Skip to content

Commit

Permalink
Add radius helper method. Tilt supports radius for quite some time no…
Browse files Browse the repository at this point in the history
…w, but it was not as easy to use as haml or erb, and not documented. Tests and documentation (English and German) included.
  • Loading branch information
rkh committed Sep 12, 2010
1 parent c248dba commit 7cb94f2
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 0 deletions.
18 changes: 18 additions & 0 deletions README.de.rdoc
Expand Up @@ -393,6 +393,24 @@ aufzurufen:
%h1 Hallo von Haml!
%p= rdoc(:greetings)

=== Radius-Templates

Das radius gem wird benötigt um Radius-Templates rendern zu können:

## radius muss eingebunden werden
require 'radius'

get '/' do
radius :index
end

Dieser Code rendert <tt>./views/index.radius</tt>.

Da man aus Radius-Templates heraus keine Methoden (abgesehen von +yield+)
aufrufen kann, will man nahezu in allen Fällen +locals+ übergeben:

radius :index, :locals => { :key => 'value' }

=== Inline-Templates

get '/' do
Expand Down
18 changes: 18 additions & 0 deletions README.rdoc
Expand Up @@ -381,6 +381,24 @@ Note that you may also call the rdoc method from within other templates:
%h1 Hello From Haml!
%p= rdoc(:greetings)

=== Radius Templates

The radius gem/library is required to render Radius templates:

## You'll need to require radius in your app
require 'radius'

get '/' do
radius :index
end

Renders <tt>./views/index.radius</tt>.

Since you cannot call Ruby methods (except for +yield+) from a Radius
template, you almost always want to pass locals to it:

radius :index, :locals => { :key => 'value' }

=== Inline Templates

get '/' do
Expand Down
4 changes: 4 additions & 0 deletions lib/sinatra/base.rb
Expand Up @@ -351,6 +351,10 @@ def rdoc(template, options={}, locals={})
render :rdoc, template, options, locals
end

def radius(template, options={}, locals={})
render :radius, template, options, locals
end

private
def render(engine, data, options={}, locals={}, &block)
# merge app-level options
Expand Down
59 changes: 59 additions & 0 deletions test/radius_test.rb
@@ -0,0 +1,59 @@
require File.dirname(__FILE__) + '/helper'

begin
fail 'Radius broken on 1.9.' if RUBY_VERSION >= '1.9.1'
require 'radius'

class RadiusTest < Test::Unit::TestCase
def radius_app(&block)
mock_app do
set :views, File.dirname(__FILE__) + '/views'
get '/', &block
end
get '/'
end

it 'renders inline radius strings' do
radius_app { radius '<h1>Hiya</h1>' }
assert ok?
assert_equal "<h1>Hiya</h1>", body
end

it 'renders .radius files in views path' do
radius_app { radius :hello }
assert ok?
assert_equal "<h1>Hello From Radius</h1>\n", body
end

it "renders with inline layouts" do
mock_app do
layout { "<h1>THIS. IS. <r:yield /></h1>" }
get('/') { radius '<EM>SPARTA</EM>' }
end
get '/'
assert ok?
assert_equal "<h1>THIS. IS. <EM>SPARTA</EM></h1>", body
end

it "renders with file layouts" do
radius_app { radius 'Hello World', :layout => :layout2 }
assert ok?
assert_equal "<h1>Radius Layout!</h1>\n<p>Hello World</p>\n", body
end

it "raises error if template not found" do
mock_app { get('/') { radius :no_such_template } }
assert_raise(Errno::ENOENT) { get('/') }
end

it "allows passing locals" do
radius_app do
radius '<r:value />', :locals => { :value => 'foo' }
end
assert ok?
assert_equal 'foo', body
end
end
rescue
warn "#{$!.to_s}: skipping radius tests"
end
1 change: 1 addition & 0 deletions test/views/hello.radius
@@ -0,0 +1 @@
<h1>Hello From Radius</h1>
2 changes: 2 additions & 0 deletions test/views/layout2.radius
@@ -0,0 +1,2 @@
<h1>Radius Layout!</h1>
<p><r:yield /></p>

0 comments on commit 7cb94f2

Please sign in to comment.