2013-02-26 6 views
0

У меня есть список проектов в файле yaml, который я бы хотел динамически прокрутить по шаблону в средстве-посреднике, но не знаю, как или если я даже могу/должен сделать это больше динамически.Итерирование данных yaml в шаблоне посредника

у меня есть:

data.projects.each do |f| 
    proxy "/work/#{f[:name].parameterize}.html", "/work/template.html", 
    :locals => { name: f[:name], client: f[:client], ... } #would like to dynamically pull in keys as locals. 
end 

ignore "/work/template.html" 

YAML:

- name: Acme Website 
    client: Acme Inc 
    overview: "Cupcake ipsum dolor sit amet wafer gummi bears pudding applicake. Jujubes brownie powder. Sweet roll powder gingerbread gummies. Cupcake ice cream sweet roll pie lollipop. Jelly-o jelly-o apple pie chupa chups jelly jujubes gingerbread. Icing carrot cake powder chupa chups. Pudding sweet roll jelly-o muffin faworki biscuit. Marzipan marshmallow cake tiramisu caramels bear claw carrot cake cotton candy. Toffee danish sweet roll. Cookie topping powder toffee ice cream muffin dragée. Soufflé caramels apple pie chocolate cake cookie cake. Macaroon tiramisu halvah soufflé. Dessert toffee halvah chocolate cake bear claw." 
    skills: 
    - design 
    - development 
    - branding 
    - ecommerce 
    stack: 
    - middleman 
    - branding 
    - design 

ответ

0

Прежде всего, необходимо разобрать YAML обратно в объект Руби, а затем перейти оттуда:

require 'yaml' 

doc = YAML.load(<<EOT) 
--- 
- name: Acme Website 
    client: Acme Inc 
    overview: "Cupcake ipsum dolor sit amet wafer gummi bears pudding applicake. Jujubes brownie powder. Sweet roll powder gingerbread gummies. Cupcake ice cream sweet roll pie lollipop. Jelly-o jelly-o apple pie chupa chups jelly jujubes gingerbread. Icing carrot cake powder chupa chups. Pudding sweet roll jelly-o muffin faworki biscuit. Marzipan marshmallow cake tiramisu caramels bear claw carrot cake cotton candy. Toffee danish sweet roll. Cookie topping powder toffee ice cream muffin dragée. Soufflé caramels apple pie chocolate cake cookie cake. Macaroon tiramisu halvah soufflé. Dessert toffee halvah chocolate cake bear claw." 
    skills: 
    - design 
    - development 
    - branding 
    - ecommerce 
    stack: 
    - middleman 
    - branding 
    - design 
EOT 

require 'pp' 
pp doc 

Какие выходы :

[{"name"=>"Acme Website", 
    "client"=>"Acme Inc", 
    "overview"=> 
    "Cupcake ipsum dolor sit amet wafer gummi bears pudding applicake. Jujubes brownie powder. Sweet roll powder gingerbread gummies. Cupcake ice cream sweet roll pie lollipop. Jelly-o jelly-o apple pie chupa chups jelly jujubes gingerbread. Icing carrot cake powder chupa chups. Pudding sweet roll jelly-o muffin faworki biscuit. Marzipan marshmallow cake tiramisu caramels bear claw carrot cake cotton candy. Toffee danish sweet roll. Cookie topping powder toffee ice cream muffin dragée. Soufflé caramels apple pie chocolate cake cookie cake. Macaroon tiramisu halvah soufflé. Dessert toffee halvah chocolate cake bear claw.", 
    "skills"=>["design", "development", "branding", "ecommerce"], 
    "stack"=>["middleman", "branding", "design"]}] 

Это массив хешей. Вы можете перебрать возвращенный массив, и извлекать вложенные хэш и обработать их, как правило:

doc.each { |h| 
    puts h['name'] 
    puts h['client'] 
} 
+0

Возможно, это трюк, yaml уже загружен 'data.projects', я просто не уверен, как поместить ключи в хэши: locals. – ere

1

Может быть, вы могли бы просто использовать полный project объект в шаблонах?

data.projects.each do |p| 
    proxy "/work/#{p[:name].parameterize}.html", "work/template.html", 
    :locals => { :p => p } 
end 

... вы получите доступ к вашему проекту в http://0.0.0.0:4567/work/acme-website.html:

<ul> 
<li><%= p.name %></li> 
<li><%= p.client %></li> 
</ul> 

Результат:

  • Acme Сайт
  • Acme Inc