sinatra-support 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/HISTORY.md CHANGED
@@ -1,3 +1,9 @@
1
+ v1.0.4 - May 15, 2011
2
+ ---------------------
3
+
4
+ ### Added:
5
+ * Implement Sinatra::MultiRender
6
+
1
7
  v1.0.3 - Mar 30, 2011
2
8
  ---------------------
3
9
 
@@ -11,6 +11,7 @@ module Sinatra
11
11
  autoload :Numeric, File.expand_path('../support/numeric', __FILE__)
12
12
  autoload :IfHelpers, File.expand_path('../support/ifhelpers', __FILE__)
13
13
  autoload :I18nSupport, File.expand_path('../support/i18nsupport', __FILE__)
14
+ autoload :MultiRender, File.expand_path('../support/multirender', __FILE__)
14
15
 
15
16
  module Support
16
17
  end
@@ -0,0 +1,75 @@
1
+ # Allows rendering from multiple engines or renderers.
2
+ #
3
+ # == Usage
4
+ #
5
+ # require 'sinatra/support/multirender'
6
+ #
7
+ # class Main < Sinatra::Base
8
+ # register Sinatra::MultiRender
9
+ #
10
+ # # These two settings are optional.
11
+ # set :multi_views, [ './views', './skin/default' ]
12
+ # set :multi_engines, [ :erb, :haml ]
13
+ #
14
+ # get '/' do
15
+ # show :home
16
+ # end
17
+ # end
18
+ #
19
+ # Using #show will automatically find the appropriate template, trying the
20
+ # following variations:
21
+ #
22
+ # ./views/home.erb
23
+ # ./views/home.haml
24
+ # ./skin/default/home.erb
25
+ # ./skin/default/home.haml
26
+ #
27
+ module Sinatra::MultiRender
28
+ def self.registered(app)
29
+ views = app.views || './views'
30
+
31
+ app.set :multi_engines, Tilt.mappings.keys unless app.respond_to?(:template_engines)
32
+ app.set :multi_views, views unless app.respond_to?(:multi_views)
33
+
34
+ app.helpers Helpers
35
+ end
36
+
37
+ module Helpers
38
+ # Shows a given template.
39
+ #
40
+ # You may pass +options[:engine]+ to specify which engines you will want
41
+ # to limit the search to. This defaults to +App.multi_engines+, or Tilt's
42
+ # supported engines if that's not defined.
43
+ #
44
+ # You may pass +options[:views]+ to specify which directories to scour.
45
+ # This defaults to +App.multi_views+, or +App.views+.
46
+ #
47
+ # == Examples
48
+ #
49
+ # # Only HAML
50
+ # show :home, engine: :haml
51
+ #
52
+ # # HAML or ERB, favoring HAML first
53
+ # show :home, engine: [:haml, :erb]
54
+ #
55
+ # # Only look at certain paths
56
+ # show :home, views: [ './views', './skins/default' ]
57
+ #
58
+ def show(template, options={}, locals={}, &block)
59
+ paths = [*(options[:views] || settings.multi_views)].join(',')
60
+ engines = [*(options[:engine] || settings.multi_engines)].join(',')
61
+
62
+ t = @template_cache.fetch template, options do
63
+ template = Dir["{#{paths}}/#{template}.{#{engines}}"].first or raise Errno::ENOENT
64
+
65
+ ext = File.extname(template)[1..-1].to_sym
66
+ options = settings.send(ext).merge(options) if settings.respond_to?(ext)
67
+ engine = Tilt[ext] or raise "Template engine not found: #{ext}"
68
+
69
+ engine.new(template, 0, options)
70
+ end
71
+
72
+ t.render(self, locals, &block) if t
73
+ end
74
+ end
75
+ end
@@ -1,6 +1,6 @@
1
1
  module Sinatra
2
2
  module Support
3
- VERSION = "1.0.3"
3
+ VERSION = "1.0.4"
4
4
 
5
5
  def self.version
6
6
  VERSION
@@ -0,0 +1 @@
1
+ <span>From ERB</span>
@@ -0,0 +1 @@
1
+ %span From HAML
@@ -0,0 +1 @@
1
+ %html from 1
@@ -0,0 +1 @@
1
+ %html contact
@@ -0,0 +1 @@
1
+ %html from 2
@@ -0,0 +1,60 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class MultiRenderTest < Test::Unit::TestCase
4
+ include Rack::Test::Methods
5
+
6
+ class App < Sinatra::Base
7
+ register Sinatra::MultiRender
8
+
9
+ set :multi_views, [
10
+ File.expand_path('../fixtures/multirender/views_1', __FILE__),
11
+ File.expand_path('../fixtures/multirender/views_2', __FILE__)
12
+ ]
13
+
14
+ get('/') { show :home }
15
+ get('/contact') { show :contact }
16
+ get('/dupe/haml') { show :dupe, engine: :haml }
17
+ get('/dupe/erb') { show :dupe, engine: [:erb] }
18
+ get('/dupe/erb2') { show :dupe, engine: [:erb, :haml] }
19
+ end
20
+
21
+ def app
22
+ App.new
23
+ end
24
+
25
+ test "picking one" do
26
+ get '/'
27
+ assert last_response.body.strip == '<html>from 1</html>'
28
+ end
29
+
30
+ test "picking one from the second path" do
31
+ get '/contact'
32
+ assert last_response.body.strip == '<html>contact</html>'
33
+ end
34
+
35
+ test "specifying engines" do
36
+ get '/dupe/haml'
37
+ assert last_response.body.strip == '<span>From HAML</span>'
38
+ end
39
+
40
+ test "specifying engines (2)" do
41
+ get '/dupe/erb'
42
+ assert last_response.body.strip == '<span>From ERB</span>'
43
+ end
44
+
45
+ test "specifying engines (2)" do
46
+ get '/dupe/erb2'
47
+ assert last_response.body.strip == '<span>From ERB</span>'
48
+ end
49
+
50
+ test "single view path" do
51
+ old = App.multi_views
52
+
53
+ App.set :multi_views, fixture_path('multirender/views_2')
54
+
55
+ get '/'
56
+ assert last_response.body.strip == '<html>from 2</html>'
57
+
58
+ App.set :multi_views, old
59
+ end
60
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: sinatra-support
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.3
5
+ version: 1.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Cyril David
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-03-30 00:00:00 +08:00
14
+ date: 2011-05-15 00:00:00 +08:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -112,12 +112,18 @@ files:
112
112
  - lib/sinatra/support/i18nsupport.rb
113
113
  - lib/sinatra/support/ifhelpers.rb
114
114
  - lib/sinatra/support/jssupport.rb
115
+ - lib/sinatra/support/multirender.rb
115
116
  - lib/sinatra/support/numeric.rb
116
117
  - lib/sinatra/support/ohmerrorhelpers.rb
117
118
  - lib/sinatra/support/version.rb
118
119
  - lib/sinatra/support.rb
119
120
  - test/fixtures/i18n/en.yml
120
121
  - test/fixtures/i18n/tl.yml
122
+ - test/fixtures/multirender/views_1/dupe.erb
123
+ - test/fixtures/multirender/views_1/dupe.haml
124
+ - test/fixtures/multirender/views_1/home.haml
125
+ - test/fixtures/multirender/views_2/contact.haml
126
+ - test/fixtures/multirender/views_2/home.haml
121
127
  - test/helper.rb
122
128
  - test/test_country.rb
123
129
  - test/test_date.rb
@@ -126,6 +132,7 @@ files:
126
132
  - test/test_html.rb
127
133
  - test/test_htmlhelpers.rb
128
134
  - test/test_i18n.rb
135
+ - test/test_multirender.rb
129
136
  - test/test_numeric.rb
130
137
  - test/test_ohmerror.rb
131
138
  - HISTORY.md
@@ -154,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
161
  requirements: []
155
162
 
156
163
  rubyforge_project:
157
- rubygems_version: 1.5.0
164
+ rubygems_version: 1.6.2
158
165
  signing_key:
159
166
  specification_version: 3
160
167
  summary: A gem with many essential helpers for creating web apps with Sinatra.