Peepcode sponsors akitaonrails.com Locaweb sponsors akitaonrails.com

Markaby and HAML: Markup for Ruby

AkitaOnRails / 05.Sep.2007 at 12:03am

Eu vejo pouca gente comentando por aqui mas para quem gosta de abstrações, deveriam tentar Markaby. Para que serve? Que tal ‘escrever XHTML em Ruby’. Quem acha que templating tradicional é “feio”, existem opções muito simples e atrativas.

Instale assim:

1
2
3

script/plugin install
http://code.whytheluckystiff.net/svn/markaby/trunk

Para que ele serve? Como o próprio nome diz: para escrever markup (HTML) em Ruby:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
html do
  head do
    title action_name
    stylesheet_link_tag 'scaffold'
  end
  body do
    h1 'Listing products'

    table.editor.classic do 
      tr do
        for column in Product.content_columns
          th column.human_name
        end
      end 

      for product in @products
        tr do
          for column in Product.content_columns
            td product.send(column.name)
          end
          td { link_to 'Show', :action => 'show', :id => product }
          td { link_to 'Edit', :action => 'edit', :id => product }
          td { link_to 'Destroy', { :action => 'destroy', :id => product }, :confirm => 'Are you sure?' }
        end
      end
    end

    link_to 'Previous page', { :page => @product_pages.current.previous } if @product_pages.current.previous
    link_to 'Next page', { :page => @product_pages.current.next } if @product_pages.current.next

    br

    link_to 'New product', :action => 'new'
  end
end

Interessante. Eu pessoalmente prefiro o XHTML puro (uso o ERubis, que é um ERB mais performático e para o desenvolvedor é transparente).

Outra opção semelhante ao Markaby é o HAML. A instalação é o de sempre:

1
2
./script/plugin install
http://svn.hamptoncatlin.com/haml/tags/stable

De acordo com o tutorial do HAML, este é um XHTML feio>

1
2
3
4
5
6
7
8
9
10
11
<div id='content'>
  <div class='left column'>
    <h2>Welcome to our site!</h2>
    <p>
      <%= print_information %>
    </p>
  </div>
  <div class="right column">
    <%= render :partial => "sidebar" %>
  </div>
</div>

E esta é a versão que vai gerar o mesmo resultado, mas escrito em HAML:

1
2
3
4
5
#content
  .left.column
    %h2 Welcome to our site!
    %p= print_information
  .right.column= render :partial => "sidebar"

6 Comments

O HAML é muito bom mesmo, e a próxima versao dele vai ter um ganho de performance grande, chegando perto do ERB normal.

o SASL é um extra do pacote HAML que permite ter a mesma agilidade com o CSS.

Mas eu gostei do Lilu que é parecido com o esquema de templates do TYPO3 . Esse vai ser legal para usar em CMS ou applicações com diferentes layouts.

Vou experimentar o Erubis (the flash) Gosto do “feio” html contanto que ele seja usado somente pra marcação, o design fica pro css

Em minha modesta opiniao, a programacao funciona melhor quando feita proxima ao produto final, ou dominio. Se o objetivo e produzir (x)HTML, entao migrar de ERB para Markaby se torna ilogico. Tanto markaby quanto HAML me parecem truques interessantes e otimos exercicios de design, mas podem se tornar abstracoes desnecessarias. Uma possivel vantagem seria a chance de reuso mais elegante das instrucoes layout, sem ter que apelar tanto para helpers e partials.

Concordo plenamente. De qualquer forma eu acho que o exercício é válido, nunca é demais tentar, mas eu também não usaria.

Este post foi destinado àqueles que acreditam que escrever XHTML/”templating” é ruim. XHTML é bastante simples, a complexidade está no CSS/imagens a serem usadas.

Alguns vão preferir – por diferentes razões – usar 100% Ruby. Se esta necessidade existir, eis as alternativas.

De qualquer forma, eu continuo no ERB, que é simples, não-obstrusivo e faz exatamente o que queremos que ele faça: páginas Web. No máximo eu recomendo testar o Erubis que é a mesma coisa que o ERB mas com mais performance.

Quanto ao reuso é outra caixa de pandora: podemos criar mecanismos de reuso bastante sofisticados, taglibs, etc, mas no final vamos achar tão complicado que acabamos voltando ao básico. Talvez exista uma implementação que eu ainda não conheça. Alguém tem alguma sugestão?

Akita, o Erubis altera muito (se altera) a forma de escrever páginas e templates?

Teoricamente não. Estou usando num projeto neste momento. Eu comecei usando Rails padrão (ERB) e num determinado momento pluguei o erubis e nenhum .rhtml quebrou. Os testes funcionais continuam passando também. Vale a pena experimentar.

Leave a Comment