web-dev-qa-db-ja.com

YAMLでの複数レベルのネスト

YAMLを使用して、アプリケーションで使用されるすべてのストアドプロシージャのリストと、それらが呼び出される場所を作成しようとしています。私は以下のようなものを想定しましたが、YAMLは複数レベルのネストを許可しないと思います。

access_log:
  stored_proc: getsomething
    uses:
      usedin: some->bread->crumb
      usedin: something else here
  stored_proc: anothersp
    uses:
      usedin: blahblah

reporting:
  stored_proc: reportingsp
    uses:
      usedin: breadcrumb

YAMLでこれを行う方法はありますか?そうでない場合、他にどのような選択肢がありますか?

16
Anthony

これが、Perlスクリプトの構成ファイルにYAMLでネストされたレベルを使用した方法とまったく同じです。 このYAMLチュートリアル は、Rubyで必要な構造を処理する方法についての参考になるかもしれません。

あなたの問題はタイプを混ぜようとしていることだと思います。私はこのように改訂することをお勧めします:

reporting:
  stored_procs:
    reportingsp
      uses:
        usedin: breadcrumb
    secondProc
      uses:
        usedin: something_else
14
Ilion

@Ilionで述べたように、文字列とオブジェクトの両方を指すプロパティを持つことはできません。配列か、stored_proc名にラベルを付ける必要があります。また、配列が本当に必要な場合は、同じ名前を使用してキーを繰り返し実行します。簡単な例とそれが機能することの証明を次に示します。

MY_YAML = "
access_log:
  - 
    name: getsomething
    uses:
      - some->bread
      - something else here
  -
    name: anothersp
    uses:
      - blahblah"

require 'yaml'
require 'pp'
pp YAML.load(MY_YAML)
#=> {"access_log"=>[
#=>   {"name"=>"get something", "uses"=>["some->bread", "something else here"]},
#=>   {"name"=>"anothersp", "uses"=>["blahblah"]}
#=> ]}
15
Phrogz