Publicado por Rafael Rosa em 10 de October de 2009

Mustache – Lugar de lógica não é na view

mustacheO Mustache é uma nova biblioteca para templating library criada por Chris Wanstrath (também conhecido como o defunkt do GitHub), que oferece uma maneira diferente de renderizar views no seu framework web Ruby preferido. Influenciado pelo ctemplate, o Mustache ajuda a manter suas camadas to keep your MVC separadas impedindo a inclusão de lógica de aplicação em suas views.

Usando ele, a camada de views é dividida em duas sub-camadas: uma classe Ruby para a "view" e um "template" HTML, para que você possa se concentrar em criar seu HTML sem poluí-lo com lógica em Ruby. Essa separação também facilita testes do código da view.

O nome do projeto ("bigode" em inglês), vêm das tags utilizadas para inserir referências a classe da view no template, que são feitas utilizando chaves duplas, ou "bigodes", como por exemplo {{nome}}.

Na sua forma mais simples, essas tags são apenas chamadas à métodos Ruby da classe da view, mas elas também podem usar blocos, chamar partials ou helpers de módulos incluídos na classe da view.

Você pode ver mais exemplos e a documentação no repositório do GitHub, mas aqui vai um exemplo retirado do README:

Lógica da View:

class Simple < Mustache
  def name
    "Chris"
  end

  def value
    10_000
  end

  def taxed_value
    value - (value * 0.4)
  end

  def in_ca
    true
  end
end

Template:

Hello {{name}}
Você acabou de ganhar U$CA {{value}}!
{{#in_ca}}
Bem, U$CA{{taxed_value}}, deduzidos os impostos.
{{/in_ca}}

Até o momento, só há suporte padrão para Sinatra support, mas ele deve ser bem fácil de integrar a outros frameworks Ruby.

Instalação

O Mustache está disponível no Gemcutter ou no Rip, e você pode instala-lo de uma das seguintes maneiras:

$ gem install mustache
$ rip install git://github.com/defunkt/mustache.git

4 Comentários para “Mustache – Lugar de lógica não é na view”

  1. #1
    nofxx Disse:

    Eu fui o unico que nao achou graça nenhuma nisso? Helper, view, view "traveis".... ahh, to mto bem com haml + helpers.

  2. #2
    Tiago Albineli Motta Disse:

    Não consegui ver diferença entre usar um helper e o tradicional erb. No helper:

    #...
    def taxed_value
    value - (value * 0.4)
    end
    #...

    Na view:
    // ...
    Bem, U$CA, deduzidos os impostos.
    // ...

    Além disso, acredito que seja mais simples pra todo mundo usar a notação

    do que

    {{#in_ca}}
    {{/in_ca}}

  3. #3
    Rafael Disse:

    também não vi graça alguma nisso.
    um helper me parece resolver esse problema e não adicionar mais complexidade ao projeto.

  4. #4
    Rafael Souza Disse:

    Helper resolve muito bem sim, mas mesmo assim se vê muito código de helper na view. Já peguei um haml com quase 20 linhas de lógica para montar uma tabela oO
    Acho que a idéia do Mustache é não permitir isso de forma alguma, obrigando o vivente a colocar tudo dentro da classe mesmo.

    Bom, eu vou dar uma testada nele é agora. Falou!

Deixe um Comentário