Post.new(“HAML”, “Rails”)

by

A vida de um desenvolvedor Ruby on Rails não é feita apenas de código Ruby. Sendo necessário também saber html e javascript por exemplo.

Quando falamos de html no ecossistema Rails, logo vem a cabeça os arquivos html.erb. Esses que contém a cara da nossa aplicação web e é uma mistura de html e Ruby, possível graças ao ERB, que é uma implentação do eRuby em Ruby.

No entanto, há outras alternativas ao uso do ERB e uma delas é o HAML (HTML Abstraction Markup Language – “Linguagem de marcação abstraída do HTML”).

Hello World!

Para trabalhar com o HAML no Rails, precisamos instalar a gem haml. Para isso execute o seguinte comando na pasta do seu projeto:

sudo gem install haml

Se preferi você pode também especificar a gem no seu arquivo environment.rb (o que é uma boa prática), adicionando a seguinte linha.

config.gem ‘haml’

E depois executar a rake task que irá instalar as gems especificadas no seu arquivo environment.rb.

rake gems:install

Instalada a gem já podemos começar a brincar.🙂

No exemplo abaixo é apresentado um exemplo de um Hello World “parrudo”, primeiro utilizando ERB e depois utilizando o HAML.

Hello World!
<p>
  1+1 é:
  <b><%= 1 + 1 %></b>
</p>
<p>
  Contando de 1 a 5:
  <%for i in (1..5)%>
    <i><%= i %></i>
  <%end%>
</p>
<br/>
<table border="1">
    <th>
      Grupo G
    </th>
    <tr>
      <td>
        Brasil
      </td>
     </tr>
    <tr>
      <td>
        Coreia do Norte
      </td>
     </tr>
    <tr>
      <td>
        Costa do Marfim
      </td>
     </tr>
    <tr>
      <td>
        Portugal
      </td>
     </tr>
</table>

Agora o mesmo exemplo em HAML:

Hello World!
%p
  1+1 é:
  %b= 1 + 1
%p
  Contando de 1 a 5:
  - for i in (1..5)
    %i= i
%br
%table{:border => 1}
  %th
    Grupo G
  %tr
    %td
      Brasil
  %tr
    %td
      Coreia do Norte
  %tr
    %td
      Costa do Marfim
  %tr
    %td
      Portugal

E o resultado é o mesmo, tanto com o ERB quanto com o HAML.

Diferenças

A primeira diferença notada é a quantidade de linhas para escrever usando o HAML, menor que com o ERB, uma vez que foi preciso de 37 linhas com o ERB, enquanto com o HAML apenas 24 já bastaram. Outra diferença é a sintaxe menos verbosa do HAML.

Além disso, há outras diferenças importantes que é bom saber para não cometer erros:

  • O HAML utiliza marcações menos verbosas, utilizando porcentagem (%) e essas marcações não são fechadas como no HTML;
  • Ao transformar para HTML a gem haml sabe quando uma marcação termina pela identação;
  • A identação é super importante no HAML, e você irá perceber isso ao identar errado, pois irá dá erro de sintaxe;
  • Código Ruby é identificado colocando-se um traço (), e quando queremos exibir a saída do código, colocamos um igual (=), ao invés, do traço ();
  • É possível especificar as propriedades das marcações, utilizando chaves ({}) e informando a propriedade como um símbolo (ex.: :color) e atribuindo o valor como fazemos em Ruby, com a “seta” (=>);
  • Como não é necessário fechar a marcação, não é necessário colocar end, pois a gem haml irá saber do end, pela identação. E como o HAML segue o princípio DRY e utiliza da identação para reconhecer as marcações, ele não iria deixar você colocar um end, sendo que com a identação já é possível saber que aquele trecho de código possui um end.

Gerando scaffold em HAML

Legal, mas se utilizamos o scaffold para gerar as nossas views, iremos ter um trabalho do cão para alterar os arquivos para HAML, uma vez que o scaffold gera arquivos ERB.

Pensando nisso o Norman Clarke criou o haml-scaffold, cuja principal diferença para o scaffold é que ele gera as views em HAML, ao invés, de ERB. Para instalar essa gem, basta digitar:

sudo gem install haml_scaffold

A gem haml_scaffold tem algumas dependências a gem haml (que já temos), will_paginate e mocha.  Para instalar as dependências você pode especificar essas gems no environment.rb e rodar a rake task ou instalar da forma tradicional.

Abaixo, segue as duas formas.

Via rake gems:install

No arquivo environment.rb acrescente:

config.gem “will_paginate”

config.gem “mocha”

Salve o arquivo e execute na pasta do seu projeto:

rake gems:install

Via gem install

sudo gem install will_paginate mocha

Instalado agora teremos um novo gerador, o haml_scaffold. Um exemplo de uso segue abaixo:

script/generate haml_scaffold Post title:string content:text published:boolean

Você notará que todas as views foram geradas em HAML e já temos dois partials, que são usados na criação/edição e outro na listagem.

Conclusão

Utilizando HAML as nossas views ficam bem enxutas, com o tempo acostumamos com as novas marcações e acaba sendo mais produtivo e prazeroso usar o HAML. Além disso, somos forçados a identar corretamente o código, e erros de HTML acabam não mais acontecendo.

Além disso, acaba sendo muito mais fácil dá manutenção num código gerado com o HAML, do que com o ERB, uma vez que ele é mais curto, menos verboso e identado.🙂

Espero que vocês tenham gostado de conhecer o HAML e como podemos utilizá-lo no Rails, qualquer dúvida sintam-se à vontade em colocar nos comentários.

Saiba mais:

Site oficial com vários exemplos e explicações:

http://haml-lang.com/

Post do Marcos Tapajós, comparando a performance do ERB X HAML:

http://tapajos.me/2010/01/05/haml-versus-erb

Ambiente utilizado

SO: Ubuntu 10.04

Rails: 2.3.8

Gems: haml (3.0.6), haml_scaffold (1.1.0), will_paginate (2.3.14) e mocha (0.9.8).

rake gems:install

Tags: ,

Uma resposta to “Post.new(“HAML”, “Rails”)”

  1. andrepanta Says:

    Bem legal o post Fabrício.

    Eu só havia mexido com o ERB apesar de conhecer o HAML.
    E realmente tirando os casos quando fazemos a indentação errado, ele é bem melhor.

    Até mais,

    André

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


%d blogueiros gostam disto: