2016-05-06 3 views
0

У меня есть следующий файл YML, представляющий файл локализации в Ruby On Rails проекта:Repace узел в лист документа

es: 
    animals: 
    happy_animals: 
     dog: Dog 
     cat: Cat 
     horse: Horse 
    sad_animals: 
     cow: Cow 
     elephant: Elephant 

мне нужно добавить еще одну категорию на том же уровне, как животных, чтобы получить следующий результат:

es: 
    animals: 
    happy_animals: 
     dog: Dog 
     cat: Cat 
     horse: Horse 
    sad_animals: 
     cow: Cow 
     elephant: Elephant 
    farm_animals: # This key is new 
    happy_animals: 
     dog: Dog 
     cat: Cat 
     horse: Horse 
    sad_animals: 
     cow: Cow 
     elephant: Sick elephant #This value changed 

Я хотел бы знать, если есть способ дублировать структуру, перекрывая некоторые конкретные значения или узлы. Я попытался следующие:

es: 
    animals: &animals 
    happy_animals: 
     dog: Dog 
     cat: Cat 
     horse: Horse 
    sad_animals: 
     cow: Cow 
     elephant: Elephant 
    farm_animals: 
    <<: *animals 
    sad_animals: 
     elephant: Sick Elephant 

Однако этот код перекрывает всю sad_animals ветвь дерева, в то время как я просто хочу, чтобы переопределить конкретное значение, оставляя остальную часть дерева, как это. Это возможно с ямлом?

ответ

0

Это должно сделать трюк:

es: 
    animals: &animals 
    happy_animals: 
     dog: Dog 
     cat: Cat 
     horse: Horse 
    sad_animals: &sad_animals 
     cow: Cow 
     elephant: Elephant 
    farm_animals: 
    <<: *animals 
    sad_animals: 
     <<: *sad_animals 
     elephant: Sick Elephant 

2.3.0 :001 > yaml = <<-YALM 
2.3.0 :002">  es: 
2.3.0 :003">  animals: &animals 
2.3.0 :004">   happy_animals: 
2.3.0 :005">   dog: Dog 
2.3.0 :006">   cat: Cat 
2.3.0 :007">   horse: Horse 
2.3.0 :008">   sad_animals: &sad_animals 
2.3.0 :009">   cow: Cow 
2.3.0 :010">   elephant: Elephant 
2.3.0 :011">  farm_animals: 
2.3.0 :012">   <<: *animals 
2.3.0 :013">   sad_animals: 
2.3.0 :014">   <<: *sad_animals 
2.3.0 :015">   elephant: Sick Elephant 
2.3.0 :016"> YALM 
2.3.0 :017"> Psych.load yaml 
=> {"es"=>{"animals"=>{"happy_animals"=>{"dog"=>"Dog", "cat"=>"Cat", "horse"=>"Horse"}, "sad_animals"=>{"cow"=>"Cow", "elephant"=>"Elephant"}}, "farm_animals"=>{"happy_animals"=>{"dog"=>"Dog", "cat"=>"Cat", "horse"=>"Horse"}, "sad_animals"=>{"cow"=>"Cow", "elephant"=>"Sick Elephant"}}}} 

Как вы можете видеть, sad_animals имеет Sick Elephant:

"sad_animals"=>{"cow"=>"Cow", "elephant"=>"Sick Elephant"} 
Смежные вопросы