Множество уровней в 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, а если нет, то какие существуют другие альтернативы?
Ответы
Ответ 1
Именно так я использовал вложенные уровни в YAML для файлов конфигурации для perl-скриптов. Это учебное пособие по YAML может быть хорошей ссылкой для вас о том, как обрабатывать структуру, которую вы хотите в Ruby.
Я думаю, ваша проблема пытается смешивать типы. Я предлагаю пересмотреть вот так:
reporting:
stored_procs:
reportingsp
uses:
usedin: breadcrumb
secondProc
uses:
usedin: something_else
Ответ 2
Как отмечено @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"]}
#=> ]}
Ответ 3
---
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