Usando Helpers do Haml

Você que trabalha com Haml já deve ter precisado retornar código HTML de algum helper, mas como já usa esse template engine não quer voltar atrás e usar a velha linguagem de marcação..

Suponha que em uma view index.haml temos a chamada para o seguinte helper:

= verbose_order_state order.state

Esse método deve retornar um HTML com o estado do pedido com ícones e enfeites do tipo, mas lembre-se, desejamos escrever Haml.

Podemos escrever nosso método do helper utilizando os métodos haml_tag e haml_concat do Haml, veja:

def verbose_order_state(order_state)
  case order_state
    when 'waiting_approval'
      haml_tag :div, style: 'text-align: center' do
        haml_tag :i, class: 'icon-time icon-2x'
        haml_tag :br
        haml_tag :span, class: 'text-warning' do
          haml_concat 'Aguardando Aprovação'
        end
      end
    ...
  end
end

Desse jeito, teriamos que trocar o = por - na view index, porque segundo a documentação, o método haml_tag tem a saída direta no buffer, não permitindo o retorno:

- verbose_order_state order.state

Agora, se você preferir retornar uma string invés de mandar direto pro buffer, pode encapsular as tags no método capture_haml:

def verbose_order_state(order_state)
  case order_state
    when 'waiting_approval'
      capture_haml do
        haml_tag :div, style: 'text-align: center' do
          haml_tag :i, class: 'icon-time icon-2x'
          haml_tag :br
          haml_tag :span, class: 'text-warning' do
            haml_concat 'Aguardando Aprovação'
          end
        end
      end
    ...
  end
end

E então voltar a usar = invés de - na view:

= verbose_order_state order.state

Abraços.

Written on November 18, 2013

Share: