A inclinação é uma interface fina sobre vários motores de modelo Ruby diferentes, na tentativa de tornar seu uso o mais genérico possível. Isso é útil para estruturas da Web, geradores de sites estáticos e outros sistemas que suportam vários mecanismos de modelo, mas não querem codificar para cada um deles individualmente.
Os seguintes recursos são suportados para todos os motores de modelo (assumindo que o recurso seja relevante para o mecanismo):
O objetivo principal é obter todas as coisas listadas acima para todos os motores de modelo incluídos na distribuição.
O suporte a esses motores de modelo está incluído no pacote:
Motor | Extensões de arquivo | Bibliotecas necessárias | Mantenedor |
---|---|---|---|
Asidoctor | .Ad, .Adoc, .asciidoc | asidoctor (> = 0,1.0) | Comunidade |
Erb | .erb, .rhtml | nenhum (incluído ruby stdlib) | Equipe de inclinação |
String interpolado | .str | nenhum (incluído ruby core) | Equipe de inclinação |
Erubi | .erb, .rhtml, .erubi | Erubi | Comunidade |
Erubis | .erb, .rhtml, .erubis | Erubis | Equipe de inclinação |
Haml | .haml | Haml | Equipe de inclinação |
Sass | .Sass | SASS-EBLEDDED (> = 1,0) ou SASSC (> = 2.0) | Equipe de inclinação |
SCSS | .Scss | SASS-EBLEDDED (> = 1,0) ou SASSC (> = 2.0) | Equipe de inclinação |
Construtor | .construtor | construtor | Equipe de inclinação |
Líquido | .líquido | líquido | Comunidade |
Rdiscount | .markdown, .mkd, .md | Rdiscount | Comunidade |
RedCarpet | .markdown, .mkd, .md | RedCarpet | Comunidade |
Kramdown | .markdown, .mkd, .md | Kramdown | Comunidade |
Pandoc | .markdown, .mkd, .md | pandoc | Comunidade |
reestruturoutext | .rst | pandoc | Comunidade |
Maruku | .markdown, .mkd, .md | Maruku | Comunidade |
Commonmarker | .markdown, .mkd, .md | Commonmarker | Comunidade |
Redcloth | .têxtil | Redcloth | Comunidade |
Rdoc | .rdoc | rdoc | Equipe de inclinação |
Raio | .raio | raio | Comunidade |
Markaby | .mab | Markaby | Equipe de inclinação |
Nokogiri | .nokogiri | Nokogiri | Comunidade |
CoffeeScript | .café | S-Script de café (+ JavaScript) | Equipe de inclinação |
CoffeeScript (alfabetizado) | .LitCoffee | S-Script de café (> = 1.5.0) (+ JavaScript) | Equipe de inclinação |
LiveScript | .ls | LiveScript (+ JavaScript) | Equipe de inclinação |
TypeScript | .ts | TypeScript (+ JavaScript) | Equipe de inclinação |
Creole (marcação wiki) | .wiki, .creole | crioulo | Comunidade |
Wikicloth (marcação wiki) | .wiki, .mediawiki, .mw | Wikicloth | Comunidade |
Yajl | .yajl | yajl-ruby | Comunidade |
CSV | .rcsv | nenhum (incluído ruby stdlib) | Equipe de inclinação |
Camarão | .camarão | Prawn (> = 2.0.0) | Comunidade |
Babel | .es6, .Babel, .jsx | Babel-Transpiler | Equipe de inclinação |
Opala | .rb | opala | Comunidade |
Todo motor de modelo suportado possui um mantenedor . Observe que este é o mantenedor da integração de inclinação, não o mantenedor do próprio mecanismo de modelo. O mantenedor é responsável por fornecer uma integração adequada e manter a compatibilidade com versões anteriores na versão Tilt. Algumas integrações são mantidas pela comunidade , que é tratada da seguinte maneira:
Esses motores de modelo são enviados com sua própria integração de inclinação:
Motor | Extensões de arquivo | Bibliotecas necessárias |
---|---|---|
Magro | .magro | Slim (> = 0,7) |
JavaScript incorporado | Salhetas | |
CoffeeScript incorporado | Salhetas | |
Jst | Salhetas | |
Modo de organização | .org | org-ruby (> = 0,6.2) |
EMACS Org | .org | Tilt-EMACS_ORG |
Guidão | .hbs, guidão | barbas de inclinação |
JBuilder | .jbuilder | Tilt-jbuilder |
Consulte Modelos.MD para obter informações detalhadas sobre as opções de mecanismo de modelo e recursos suportados.
Gratificação instantânea:
require 'erb'
require 'tilt'
template = Tilt . new ( 'templates/foo.erb' )
=> #<Tilt::ERBTemplate @file="templates/foo.erb" ...>
output = template . render
=> "Hello world!"
Recomenda -se que os programas de chamada exijam explicitamente as bibliotecas de motores de modelos (como 'erb' acima) no tempo de carregamento. As tentativas de inclinação de preguiçoso exigem a biblioteca de mecanismo de modelo na primeira vez em que um modelo é criado, mas isso é propenso a erros em ambientes encadeados.
O módulo {tilt} contém classes de implementação genérica para todos os mecanismos de modelo suportados. Cada classe de modelo adere à mesma interface para criação e renderização. No exemplo de gratificação instantânea, deixamos o Tilt determinar a classe de implementação do modelo com base no nome do arquivo, mas as implementações {tilt :: modelo} também podem ser usadas diretamente:
require 'tilt/haml'
template = Tilt :: HamlTemplate . new ( 'templates/foo.haml' )
output = template . render
O método render
leva um escopo de avaliação opcional e os argumentos de hash dos locais. Aqui, o modelo é avaliado no contexto do objeto de Person
com os habitantes locais x
e y
:
require 'tilt/erb'
template = Tilt :: ERBTemplate . new ( 'templates/foo.erb' )
joe = Person . find ( 'joe' )
output = template . render ( joe , :x => 35 , :y => 42 )
Se nenhum escopo for fornecido, o modelo será avaliado no contexto de um objeto criado com Object.new
.
O método render
de uma única instância Template
pode ser chamado várias vezes com diferentes argumentos de escopo e habitantes locais. Continuando o exemplo anterior, renderizamos o mesmo modelo compilado, mas desta vez no escopo de Jane:
jane = Person . find ( 'jane' )
output = template . render ( jane , :x => 22 , :y => nil )
Os blocos podem ser transmitidos para render
modelos que suportam a execução do código arbitrário do Ruby (geralmente com alguma forma de yield
). Por exemplo, assumindo o seguinte em foo.erb
:
Hey <%= yield %>!
O bloco passado para render
é chamado ao yield
:
template = Tilt :: ERBTemplate . new ( 'foo.erb' )
template . render { 'Joe' }
# => "Hey Joe!"
A classe {tilt :: mapeamento} inclui métodos para associar classes de implementação de modelos com padrões de nome do arquivo e para localizar/instantar classes de modelos com base nessas associações.
O módulo {tilt} possui uma instância global de Mapping
que é preenchida com a tabela de mecanismos de modelo acima.
O método {tilt.register} associa um padrão de nome de arquivo a uma implementação de modelo específica. Para usar o ERB para arquivos que terminam em uma extensão .bar
:
>> Tilt . register Tilt :: ERBTemplate , 'bar'
>> Tilt . new ( 'views/foo.bar' )
=> #<Tilt::ERBTemplate @file="views/foo.bar" ...>
Recuperando a classe de modelo para uma extensão de arquivo ou arquivo:
>> Tilt [ 'foo.bar' ]
=> Tilt :: ERBTemplate
>> Tilt [ 'haml' ]
=> Tilt :: HamlTemplate
Recuperando uma lista de classes de modelo para um arquivo:
>> Tilt . templates_for ( 'foo.bar' )
=> [ Tilt :: ERBTemplate ]
>> Tilt . templates_for ( 'foo.haml.bar' )
=> [ Tilt :: ERBTemplate , Tilt :: HamlTemplate ]
A classe de modelo é determinada pesquisando uma série de padrões de nomes decrescentemente específicos. Ao criar um novo modelo com Tilt.new('views/foo.html.erb')
, verificamos os seguintes mapeamentos de modelo:
views/foo.html.erb
foo.html.erb
html.erb
erb
Tilt precisa conhecer a codificação do modelo para funcionar corretamente:
O Tilt usará o Encoding.default_external
como codificação ao ler arquivos externos. Se você está trabalhando principalmente com uma codificação (por exemplo, UTF-8), recomendamos definir esta opção. Ao fornecer um bloco de leitor personalizado ( Tilt.new { custom_string }
), você garantirá que a string seja codificada corretamente.
A maioria dos motores de modelo em inclinação também permite substituir a codificação usando o :default_encoding
-Option:
tmpl = Tilt . new ( 'hello.erb' , :default_encoding => 'Big5' )
Por fim, cabe ao modelo o modelo como lidar com a codificação: pode respeitar :default_encoding
, pode sempre assumir que é UTF-8 (como o CoffeeScript), ou pode fazer sua própria detecção de codificação.
As compiladas de inclinação geraram o código -fonte Ruby produzido pelos motores de modelo e reutiliza -o nas invocações de modelo subsequente. Os benchmarks mostram que isso produz um aumento de desempenho de 5x-10x em relação à avaliação da fonte do rubi em cada invocação.
Atualmente, a compilação de modelos é suportada para esses motores de modelo: StringTemplate, ERB, ERUBIS, ERUBI, HAML, Nokogiri, Builder e Yajl.
O Tilt é direitos autorais (c) 2010 Ryan Tomayko e distribuído sob a licença do MIT. Consulte o arquivo COPYING
para obter mais informações.