L'inclinaison est une interface mince sur un tas de moteurs de matrices de rubis différents pour tenter de rendre leur utilisation aussi générique que possible. Ceci est utile pour les cadres Web, les générateurs de sites statiques et d'autres systèmes qui prennent en charge plusieurs moteurs de modèle mais ne veulent pas coder pour chacun d'eux individuellement.
Les fonctionnalités suivantes sont prises en charge pour tous les moteurs de modèle (en supposant que la fonction est pertinente pour le moteur):
L'objectif principal est d'obtenir toutes les choses énumérées ci-dessus, juste pour tous les moteurs de modèle inclus dans la distribution.
La prise en charge de ces moteurs de modèle est incluse avec le package:
Moteur | Extensions de fichiers | Bibliothèques requises | Maintienneur |
---|---|---|---|
Asciidoctor | .ad, .adoc, .asciidoc | asciidoctor (> = 0,1,0) | Communauté |
Erb | .erb, .rhtml | Aucun (inclus Ruby Stdlib) | Équipe d'inclinaison |
Interpolée | .str | Aucun (inclus Ruby Core) | Équipe d'inclinaison |
Erubi | .erb, .rhtml, .erubi | Erubi | Communauté |
Errubis | .erb, .rhtml, .erubis | errubis | Équipe d'inclinaison |
Haml | .haml | haml | Équipe d'inclinaison |
Toupet | .toupet | Sass-Embedded (> = 1.0) ou SASSC (> = 2.0) | Équipe d'inclinaison |
SCSS | .SCSS | Sass-Embedded (> = 1.0) ou SASSC (> = 2.0) | Équipe d'inclinaison |
Constructeur | .constructeur | constructeur | Équipe d'inclinaison |
Liquide | .liquide | liquide | Communauté |
Rdiscount | .markdown, .mkd, .md | rdiscount | Communauté |
Redcarpet | .markdown, .mkd, .md | redcarpet | Communauté |
Kramdown | .markdown, .mkd, .md | Kramdown | Communauté |
Pandoc | .markdown, .mkd, .md | pandoc | Communauté |
texte restructuré | . | pandoc | Communauté |
Maruku | .markdown, .mkd, .md | maruku | Communauté |
Marchand commun | .markdown, .mkd, .md | marchand commun | Communauté |
Vloth | .textile | vloth | Communauté |
RDOC | .rdoc | RDOC | Équipe d'inclinaison |
Rayon | .rayon | rayon | Communauté |
Markaby | .Mab | markaby | Équipe d'inclinaison |
Nokogiri | .nokogiri | nokogiri | Communauté |
Cafée | .café | Coffee-Script (+ JavaScript) | Équipe d'inclinaison |
CoffeeScript (alphabétisé) | .Litcoffee | Coffee-Script (> = 1.5.0) (+ JavaScript) | Équipe d'inclinaison |
Livescript | .LS | Livescript (+ JavaScript) | Équipe d'inclinaison |
Manuscrit | .ts | TypeScript (+ javascript) | Équipe d'inclinaison |
Créole (balisage wiki) | .Wiki, .Creole | créole | Communauté |
Wikicloth (balisage wiki) | .Wiki, .MediaKi, .mw | wikicloth | Communauté |
Yajl | .yajl | Yajl-Ruby | Communauté |
CSV | .rcsv | Aucun (inclus Ruby Stdlib) | Équipe d'inclinaison |
Crevette | .crevette | crevette (> = 2.0.0) | Communauté |
Babel | .es6, .babel, .jsx | transpilleur Babel | Équipe d'inclinaison |
Opale | .rb | opale | Communauté |
Chaque moteur de modèle pris en charge a un mainteneur . Notez qu'il s'agit du mainteneur de l'intégration d'inclinaison, et non du mainteneur du moteur de modèle lui-même. Le responsable est chargé de fournir une intégration adéquate et de garder la compatibilité en arrière à travers la version Tilt. Certaines intégrations sont maintenues par la communauté , qui est gérée de la manière suivante:
Ces moteurs de modèle sont expédiés avec leur propre intégration d'inclinaison:
Moteur | Extensions de fichiers | Bibliothèques requises |
---|---|---|
Mince | .mince | Slim (> = 0,7) |
Javascript intégré | pignon | |
Cafée intégré | pignon | |
JST JST | pignon | |
Mode org | .org | org-ruby (> = 0,6,2) |
Emacs Org | .org | inclinaison-emacs_org |
Guidon | .hbs, guidon | bandes d'inclinaison |
Jbuilder | .jbuilder | inclinaison |
Voir modèles.md pour des informations détaillées sur les options de moteur des modèles et les fonctionnalités prises en charge.
Gratification instantanée:
require 'erb'
require 'tilt'
template = Tilt . new ( 'templates/foo.erb' )
=> #<Tilt::ERBTemplate @file="templates/foo.erb" ...>
output = template . render
=> "Hello world!"
Il est recommandé d'appeler explicitement les programmes qui nécessitent explicitement des bibliothèques de moteurs de modèle (comme «ERB» ci-dessus) au temps du chargement. TILT Tentatives pour paresseux exiger la bibliothèque de moteurs de modèle la première fois qu'un modèle est créé, mais cela est sujet à l'erreur dans des environnements en filetage.
Le module {Tilt} contient des classes d'implémentation génériques pour tous les moteurs de modèle pris en charge. Chaque classe de modèle adhère à la même interface pour la création et le rendu. Dans l'exemple de gratification instantanée, nous laissons Tilt déterminer la classe d'implémentation de modèle basée sur le nom de fichier, mais {Tilt :: modèle} les implémentations peuvent également être utilisées directement:
require 'tilt/haml'
template = Tilt :: HamlTemplate . new ( 'templates/foo.haml' )
output = template . render
La méthode render
prend une portée d'évaluation facultative et les arguments de hachage des habitants. Ici, le modèle est évalué dans le contexte de l'objet Person
avec les locaux x
et y
:
require 'tilt/erb'
template = Tilt :: ERBTemplate . new ( 'templates/foo.erb' )
joe = Person . find ( 'joe' )
output = template . render ( joe , :x => 35 , :y => 42 )
Si aucune portée n'est fournie, le modèle est évalué dans le contexte d'un objet créé avec Object.new
.
La méthode render
d'une Template
unique peut être appelée plusieurs fois avec des arguments de portée et de locaux différents. Poursuivant l'exemple précédent, nous rendons le même modèle compilé mais cette fois dans la portée de Jane:
jane = Person . find ( 'jane' )
output = template . render ( jane , :x => 22 , :y => nil )
Les blocs peuvent être transmis pour render
pour des modèles qui prennent en charge l'exécution du code rubis arbitraire (généralement avec une certaine forme de yield
). Par exemple, en supposant ce qui suit dans foo.erb
:
Hey <%= yield %>!
Le bloc transmis au render
est appelé sur yield
:
template = Tilt :: ERBTemplate . new ( 'foo.erb' )
template . render { 'Joe' }
# => "Hey Joe!"
La classe {Tilt :: Mapping} comprend des méthodes d'association de classes d'implémentation des modèles à des modèles de nom de fichier et pour localiser / instancier des classes de modèles basées sur ces associations.
Le module {Tilt} a une instance globale de Mapping
qui est remplie de moteurs de modèle ci-dessus.
La méthode {Tilt.register} associe un modèle de nom de fichier à une implémentation de modèle spécifique. Pour utiliser ERB pour les fichiers se terminant par une extension .bar
:
>> Tilt . register Tilt :: ERBTemplate , 'bar'
>> Tilt . new ( 'views/foo.bar' )
=> #<Tilt::ERBTemplate @file="views/foo.bar" ...>
Récupération de la classe de modèle pour une extension de fichier ou de fichier:
>> Tilt [ 'foo.bar' ]
=> Tilt :: ERBTemplate
>> Tilt [ 'haml' ]
=> Tilt :: HamlTemplate
Récupération d'une liste de classes de modèles pour un fichier:
>> Tilt . templates_for ( 'foo.bar' )
=> [ Tilt :: ERBTemplate ]
>> Tilt . templates_for ( 'foo.haml.bar' )
=> [ Tilt :: ERBTemplate , Tilt :: HamlTemplate ]
La classe de modèle est déterminée en recherchant une série de modèles de noms de moins en moins spécifiques. Lors de la création d'un nouveau modèle avec Tilt.new('views/foo.html.erb')
, nous vérifions les mappages de modèles suivants:
views/foo.html.erb
foo.html.erb
html.erb
erb
Tilt doit connaître le codage du modèle afin de fonctionner correctement:
Tilt utilisera Encoding.default_external
comme codage lors de la lecture des fichiers externes. Si vous travaillez principalement avec un encodage (par exemple UTF-8), nous vous recommandons fortement de définir cette option. Lors de la fourniture d'un bloc de lecture personnalisé ( Tilt.new { custom_string }
), vous vous assurerez que la chaîne est correctement encodée vous-même.
La plupart des moteurs de modèle dans TILT vous permettent également de remplacer le codage à l'aide du :default_encoding
-Option:
tmpl = Tilt . new ( 'hello.erb' , :default_encoding => 'Big5' )
En fin de compte, c'est au moteur de modèle comment gérer le codage: il pourrait respecter :default_encoding
, il peut toujours supposer que c'est UTF-8 (comme CoffeeScript), ou il peut faire sa propre détection de codage.
TILT compiles Code source Ruby produit par les moteurs de modèle et le réutilise sur les invocations de modèle ultérieures. Les repères montrent que cela donne une augmentation des performances 5x-10x par rapport à l'évaluation de la source de rubis à chaque invocation.
La compilation de modèles est actuellement prise en charge de ces moteurs de modèle: StringTemplate, Erb, Erubis, Erubi, Haml, Nokogiri, Builder et Yajl.
Tilt est le droit d'auteur (C) 2010 Ryan Tomayko et distribué sous la licence du MIT. Voir le fichier COPYING
pour plus d'informations.