Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge pull request #528 from blambeau/wlang

Add support for wlang templating engine.
  • Loading branch information...
commit 8752085a05c33edd13d3ec8d3187d1406456d404 2 parents 4f5a2fd + 4334871
@rkh rkh authored
View
1  Gemfile
@@ -42,6 +42,7 @@ gem 'maruku'
gem 'creole'
gem 'markaby'
gem 'radius'
+gem 'wlang', '>= 2.0.1'
if RUBY_ENGINE == 'jruby'
gem 'nokogiri', '!= 1.5.0'
View
10 README.fr.rdoc
@@ -561,6 +561,16 @@ pour décorer l'objet retourné.
var resource = {"foo":"bar","baz":"qux"}; present(resource);
+=== Templates WLang
+
+Dependency:: {wlang}[https://github.com/blambeau/wlang/]
+File Extensions:: <tt>.wlang</tt>
+Example:: <tt>wlang :index, :locals => { :key => 'value' }</tt>
+
+L'appel de code ruby au sein des templates n'est pas idiomatique en wlang. L'écriture de
+templates sans logique est encouragé, via le passage de variables locales. Il est néanmoins
+possible d'écrire un +layout+ en wlang et d'y utiliser +yield+.
+
=== Templates embarqués
get '/' do
View
9 README.rdoc
@@ -529,6 +529,15 @@ The <tt>:callback</tt> and <tt>:variable</tt> options can be used to decorate th
var resource = {"foo":"bar","baz":"qux"}; present(resource);
+=== WLang Templates
+
+Dependency:: {wlang}[https://github.com/blambeau/wlang/]
+File Extensions:: <tt>.wlang</tt>
+Example:: <tt>wlang :index, :locals => { :key => 'value' }</tt>
+
+Since calling ruby methods is not idiomatic in wlang, you almost always want to pass locals
+to it. Layouts written in wlang and +yield+ are supported, though.
+
=== Embedded Templates
get '/' do
View
4 lib/sinatra/base.rb
@@ -645,6 +645,10 @@ def creole(template, options={}, locals={})
render :creole, template, options, locals
end
+ def wlang(template, options={}, locals={})
+ render :wlang, template, options, locals
+ end
+
def yajl(template, options={}, locals={})
options[:default_content_type] = :json
render :yajl, template, options, locals
View
1  test/views/hello.wlang
@@ -0,0 +1 @@
+Hello from wlang!
View
2  test/views/layout2.wlang
@@ -0,0 +1,2 @@
+WLang Layout!
++{yield}
View
70 test/wlang_test.rb
@@ -0,0 +1,70 @@
+require File.expand_path('../helper', __FILE__)
+
+begin
+require 'wlang'
+
+class WLangTest < Test::Unit::TestCase
+ def engine
+ Tilt::WLangTemplate
+ end
+
+ def wlang_app(&block)
+ mock_app {
+ set :views, File.dirname(__FILE__) + '/views'
+ get '/', &block
+ }
+ get '/'
+ end
+
+ it 'uses the correct engine' do
+ assert_equal engine, Tilt[:wlang]
+ end
+
+ it 'renders .wlang files in views path' do
+ wlang_app { wlang :hello }
+ assert ok?
+ assert_equal "Hello from wlang!\n", body
+ end
+
+ it 'renders in the app instance scope' do
+ mock_app do
+ helpers do
+ def who; "world"; end
+ end
+ get('/') { wlang 'Hello +{who}!' }
+ end
+ get '/'
+ assert ok?
+ assert_equal 'Hello world!', body
+ end
+
+ it 'takes a :locals option' do
+ wlang_app do
+ locals = {:foo => 'Bar'}
+ wlang 'Hello ${foo}!', :locals => locals
+ end
+ assert ok?
+ assert_equal 'Hello Bar!', body
+ end
+
+ it "renders with inline layouts" do
+ mock_app do
+ layout { 'THIS. IS. +{yield.upcase}!' }
+ get('/') { wlang 'Sparta' }
+ end
+ get '/'
+ assert ok?
+ assert_equal 'THIS. IS. SPARTA!', body
+ end
+
+ it "renders with file layouts" do
+ wlang_app { wlang 'Hello World', :layout => :layout2 }
+ assert ok?
+ assert_body "WLang Layout!\nHello World"
+ end
+
+end
+
+rescue LoadError
+ warn "#{$!.to_s}: skipping wlang tests"
+end
Please sign in to comment.
Something went wrong with that request. Please try again.