mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
Add radius helper method. Tilt supports radius for quite some time now, but it was not as easy to use as haml or erb, and not documented. Tests and documentation (English and German) included.
This commit is contained in:
parent
c248dbac9d
commit
7cb94f2d3f
6 changed files with 102 additions and 0 deletions
|
@ -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
|
||||
|
|
18
README.rdoc
18
README.rdoc
|
@ -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
|
||||
|
|
|
@ -351,6 +351,10 @@ module Sinatra
|
|||
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
|
||||
|
|
59
test/radius_test.rb
Normal file
59
test/radius_test.rb
Normal file
|
@ -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
test/views/hello.radius
Normal file
1
test/views/hello.radius
Normal file
|
@ -0,0 +1 @@
|
|||
<h1>Hello From Radius</h1>
|
2
test/views/layout2.radius
Normal file
2
test/views/layout2.radius
Normal file
|
@ -0,0 +1,2 @@
|
|||
<h1>Radius Layout!</h1>
|
||||
<p><r:yield /></p>
|
Loading…
Reference in a new issue