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でこれを行う方法はありますか?そうでない場合、他にどのような選択肢がありますか?
これが、Perlスクリプトの構成ファイルにYAMLでネストされたレベルを使用した方法とまったく同じです。 このYAMLチュートリアル は、Rubyで必要な構造を処理する方法についての参考になるかもしれません。
あなたの問題はタイプを混ぜようとしていることだと思います。私はこのように改訂することをお勧めします:
reporting:
stored_procs:
reportingsp
uses:
usedin: breadcrumb
secondProc
uses:
usedin: something_else
@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"]}
#=> ]}