Mais DRY no seu YAML
Olha quem está vivo? Sim, sou eu. Sem mais enrolação.
Como já publicado no post do DRY config/database.yml, é possível usar aliases para evitar duplicidade de valores, mas como fazer isso para chaves simples? E porque eu tive essa necessidade?
Em uma view onde eu preciso exibir uma mensagem de disponibilidade de expedição de um produto, tenho algo como:
app/views/products/show.html
1
2
3
4
5
6
...
<dl>
<dt>Prazo para expição</dt>
<dd><%= I18n.t('.delivery_days', count: product.delivery_days) %></dd>
</dl>
...
config/locales/pt-BR.yml com repetição
1
2
3
4
5
6
7
pt-BR:
products:
show:
delivery_days:
one: Pronta Entrega
other: Disponível em %{count} dias úteis
zero: Pronta Entrega
Considerando que eu tenha que mostrar a mensagem quando da disponibilidade de entrega é de zero ou um dia, mas não quero duplicar a mensagem. O que podemos fazer?
Antes da chave que nós queremos “copiar”, criamos o alias &alias_name
, e no lugar do valor que vamos repetir, usamos o *alias_name
config/locales/pt-BR.yml sem repetição
1
2
3
4
5
6
7
pt-BR:
products:
show:
delivery_days:
&oneDeliveryDay one: Pronta Entrega
other: Disponível em %{count} dias úteis
zero: *oneDeliveryDay
No exemplo acima, nós identificamos a chave :one
com o alias onDeliveryDay
e aplicanos na chave :zero