Tilt는 가능한 한 일반적인 사용을 만들기 위해 다양한 루비 템플릿 엔진에 대한 얇은 인터페이스입니다. 이는 웹 프레임 워크, 정적 사이트 생성기 및 다중 템플릿 엔진을 지원하지만 각각을 개별적으로 코딩하고 싶지 않은 기타 시스템에 유용합니다.
다음 기능은 모든 템플릿 엔진에 대해 지원됩니다 (기능이 엔진과 관련이 있다고 가정) :
주요 목표는 분포에 포함 된 모든 템플릿 엔진에 대해 위에 나열된 모든 것들을 얻는 것입니다.
이 템플릿 엔진에 대한 지원은 패키지에 포함되어 있습니다.
엔진 | 파일 확장 | 필요한 라이브러리 | 관리자 |
---|---|---|---|
Asciidoctor | .ad, .adoc, .asciidoc | asciidoctor (> = 0.1.0) | 지역 사회 |
ERB | .ERB, .rhtml | 없음 (루비 stdlib 포함) | 틸트 팀 |
보간 스트링 | .Str | 없음 (루비 코어 포함) | 틸트 팀 |
에루비 | .erb, .rhtml, .erubi | 에루비 | 지역 사회 |
에루비스 | .erb, .rhtml, .erubis | 에루비스 | 틸트 팀 |
햄 | .HAML | 햄 | 틸트 팀 |
사스 | .Sass | Sass-embedded (> = 1.0) 또는 SASSC (> = 2.0) | 틸트 팀 |
SCSS | .Scss | Sass-embedded (> = 1.0) 또는 SASSC (> = 2.0) | 틸트 팀 |
빌더 | 빌더 | 빌더 | 틸트 팀 |
액체 | .액체 | 액체 | 지역 사회 |
rdiscount | .markdown, .mkd, .md | rdiscount | 지역 사회 |
레드 카펫 | .markdown, .mkd, .md | 레드 카펫 | 지역 사회 |
Kramdown | .markdown, .mkd, .md | Kramdown | 지역 사회 |
팬닥 | .markdown, .mkd, .md | 팬닥 | 지역 사회 |
구조 조정 텍스트 | .rst | 팬닥 | 지역 사회 |
마루쿠 | .markdown, .mkd, .md | 마루쿠 | 지역 사회 |
커먼 마커 | .markdown, .mkd, .md | 커먼 마커 | 지역 사회 |
Redcloth | .직물 | Redcloth | 지역 사회 |
RDOC | .RDOC | RDOC | 틸트 팀 |
반지름 | .반지름 | 반지름 | 지역 사회 |
마르카비 | .mab | 마르카비 | 틸트 팀 |
노코 시리 | .nokogiri | 노코 시리 | 지역 사회 |
커피 스크립트 | .커피 | 커피 스크립트 (+ JavaScript) | 틸트 팀 |
커피 스크립트 (문맹) | .litcoffee | 커피 스크립트 (> = 1.5.0) (+ javaScript) | 틸트 팀 |
Livescript | .LS | Livescript (+ javaScript) | 틸트 팀 |
TypeScript | .ts | TypeScript (+ JavaScript) | 틸트 팀 |
크리올 (Wiki Markup) | .wiki, .creole | 크리올 사람 | 지역 사회 |
위키 클로스 (Wiki Markup) | .wiki, .mediawiki, .mw | 위키 클로스 | 지역 사회 |
Yajl | .yajl | Yajl-Ruby | 지역 사회 |
CSV | .rcsv | 없음 (루비 stdlib 포함) | 틸트 팀 |
왕새우 | .왕새우 | 새우 (> = 2.0.0) | 지역 사회 |
바벨 | .es6, .babel, .jsx | 바벨 트랜스 필러 | 틸트 팀 |
오팔 | .RB | 오팔 | 지역 사회 |
지원되는 모든 템플릿 엔진에는 관리자가 있습니다. 이것은 템플릿 엔진 자체의 관리자가 아니라 틸트 통합의 관리자입니다. 관리자는 적절한 통합을 제공하고 틸트 버전에서 역 호환성을 유지해야합니다. 일부 통합은 커뮤니티 에 의해 유지되며 다음과 같은 방식으로 처리됩니다.
이 템플릿 엔진은 자체 틸트 통합 기능을 제공합니다.
엔진 | 파일 확장 | 필요한 라이브러리 |
---|---|---|
아주 적은 | .아주 적은 | 슬림 (> = 0.7) |
내장 된 JavaScript | 스프로킷 | |
내장 된 커피 스크립트 | 스프로킷 | |
JST | 스프로킷 | |
org 모드 | .org | org-ruby (> = 0.6.2) |
Emacs org | .org | Tilt-emacs_org |
핸들 바 | .HBS, 핸들 바 | 틸트 핸들 바 |
jbuilder | .jbuilder | 틸트-jbuilder |
템플릿 엔진 옵션 및 지원되는 기능에 대한 자세한 정보는 Templates.md를 참조하십시오.
즉각적인 만족 :
require 'erb'
require 'tilt'
template = Tilt . new ( 'templates/foo.erb' )
=> #<Tilt::ERBTemplate @file="templates/foo.erb" ...>
output = template . render
=> "Hello world!"
통화 프로그램은로드 시간에 위의 'ERB'와 같은 템플릿 엔진 라이브러리를 명시 적으로 요구하는 것이 좋습니다. 틸트는 게으른 템플릿을 생성 할 때 템플릿 엔진 라이브러리를 요구하지만 이는 스레드 환경에서 오류가 발생하기 쉬운 템플릿 엔진 라이브러리가 필요합니다.
{tilt} 모듈에는 모든 지원되는 템플릿 엔진에 대한 일반적인 구현 클래스가 포함되어 있습니다. 각 템플릿 클래스는 생성 및 렌더링을 위해 동일한 인터페이스를 준수합니다. 즉각적인 만족 예제에서, 우리는 틸트가 파일 이름을 기반으로 템플릿 구현 클래스를 결정하게하지만 {tilt :: template} 구현은 다음을 직접 사용할 수 있습니다.
require 'tilt/haml'
template = Tilt :: HamlTemplate . new ( 'templates/foo.haml' )
output = template . render
render
방법은 선택적 평가 범위와 현지인 해시 인수를 취합니다. 여기서 템플릿은 현지인 x
및 y
와 함께 Person
객체의 컨텍스트 내에서 평가됩니다.
require 'tilt/erb'
template = Tilt :: ERBTemplate . new ( 'templates/foo.erb' )
joe = Person . find ( 'joe' )
output = template . render ( joe , :x => 35 , :y => 42 )
범위가 제공되지 않으면 Object.new
로 만든 객체의 컨텍스트 내에서 템플릿이 평가됩니다.
단일 Template
인스턴스의 render
메소드는 다른 범위와 지역 인수로 여러 번 호출 될 수 있습니다. 이전 예를 계속하면서, 우리는 동일한 컴파일 된 템플릿을 렌더링하지만 이번에는 Jane의 범위에서 다음과 같습니다.
jane = Person . find ( 'jane' )
output = template . render ( jane , :x => 22 , :y => nil )
임의의 루비 코드를 실행하는 지원을 지원하는 템플릿 (보통 일부 형태의 yield
)을 지원하는 템플릿의 render
으로 블록을 전달할 수 있습니다. 예를 들어, foo.erb
에서 다음을 가정합니다.
Hey <%= yield %>!
render
로 전달 된 블록은 yield
로 호출됩니다.
template = Tilt :: ERBTemplate . new ( 'foo.erb' )
template . render { 'Joe' }
# => "Hey Joe!"
{tilt :: mapping} 클래스에는 템플릿 구현 클래스를 파일 이름 패턴과 연관하고 해당 협회를 기반으로 템플릿 클래스를 찾아/인스턴스화하기위한 방법이 포함되어 있습니다.
{tilt} 모듈에는 위의 템플릿 엔진 테이블로 채워진 전역의 Mapping
인스턴스가 있습니다.
{tilt.register} 메소드는 파일 이름 패턴을 특정 템플릿 구현과 연결합니다. .bar
확장자로 끝나는 파일에 ERB를 사용하려면 :
>> Tilt . register Tilt :: ERBTemplate , 'bar'
>> Tilt . new ( 'views/foo.bar' )
=> #<Tilt::ERBTemplate @file="views/foo.bar" ...>
파일 또는 파일 확장자의 템플릿 클래스 검색 :
>> Tilt [ 'foo.bar' ]
=> Tilt :: ERBTemplate
>> Tilt [ 'haml' ]
=> Tilt :: HamlTemplate
파일의 템플릿 클래스 목록 검색 :
>> Tilt . templates_for ( 'foo.bar' )
=> [ Tilt :: ERBTemplate ]
>> Tilt . templates_for ( 'foo.haml.bar' )
=> [ Tilt :: ERBTemplate , Tilt :: HamlTemplate ]
템플릿 클래스는 일련의 감소하는 특정 이름 패턴을 검색하여 결정됩니다. Tilt.new('views/foo.html.erb')
로 새 템플릿을 만들 때 다음 템플릿 매핑을 확인합니다.
views/foo.html.erb
foo.html.erb
html.erb
erb
Tilt는 제대로 작동하기 위해서는 템플릿의 인코딩을 알아야합니다.
Tilt는 외부 파일을 읽을 때 인코딩으로 Encoding.default_external
사용합니다. 주로 하나의 인코딩 (예 : UTF-8)으로 작업하는 경우이 옵션을 설정하는 것이 좋습니다 . 사용자 정의 리더 블록 ( Tilt.new { custom_string }
)을 제공 할 때 문자열이 올바르게 인코딩되어 있는지 확인하십시오.
Tilt의 대부분의 템플릿 엔진을 사용하면 다음을 사용하여 인코딩을 무시할 수 있습니다 :default_encoding
-option :
tmpl = Tilt . new ( 'hello.erb' , :default_encoding => 'Big5' )
궁극적으로 인코딩을 처리하는 방법 : 존경 할 수 있습니다 :default_encoding
, 항상 UTF-8 (커피 스크립트와 같은)이라고 가정하거나 자체 인코딩 감지를 수행 할 수 있습니다.
틸트 컴파일 템플릿 엔진에서 생성 된 루비 소스 코드를 생성하고 후속 템플릿 호출에서 재사용합니다. 벤치 마크는 각 호출에서 루비 소스를 평가하는 것보다 5x-10x 성능이 증가 함을 보여줍니다.
템플릿 컴파일은 현재 이러한 템플릿 엔진에 대해 지원됩니다 : StringTemplate, Erb, Erubis, Erubi, Haml, Nokogiri, Builder 및 Yajl.
Tilt는 Copyright (C) 2010 Ryan Tomayko이며 MIT 라이센스에 따라 배포됩니다. 자세한 내용은 COPYING
파일을 참조하십시오.