sinatra-contrib 1.4.7 → 2.0.0.beta1
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.
- checksums.yaml +4 -4
- data/README.md +27 -16
- data/Rakefile +0 -1
- data/lib/sinatra/config_file.rb +8 -2
- data/lib/sinatra/content_for.rb +63 -1
- data/lib/sinatra/contrib.rb +1 -1
- data/lib/sinatra/contrib/version.rb +1 -12
- data/lib/sinatra/cookies.rb +1 -1
- data/lib/sinatra/link_header.rb +2 -2
- data/lib/sinatra/namespace.rb +90 -18
- data/lib/sinatra/reloader.rb +15 -1
- data/lib/sinatra/required_params.rb +71 -0
- data/lib/sinatra/respond_with.rb +7 -5
- data/sinatra-contrib.gemspec +14 -10
- data/spec/capture_spec.rb +5 -5
- data/spec/config_file/key_value.yml +1 -0
- data/spec/config_file_spec.rb +27 -13
- data/spec/content_for/footer.haml +1 -1
- data/spec/content_for/footer.slim +1 -1
- data/spec/content_for_spec.rb +65 -36
- data/spec/cookies_spec.rb +167 -173
- data/spec/extension_spec.rb +4 -4
- data/spec/json_spec.rb +11 -11
- data/spec/link_header_spec.rb +13 -13
- data/spec/multi_route_spec.rb +13 -13
- data/spec/namespace_spec.rb +190 -140
- data/spec/reloader_spec.rb +56 -31
- data/spec/required_params_spec.rb +68 -0
- data/spec/respond_with_spec.rb +58 -56
- data/spec/streaming_spec.rb +57 -57
- metadata +37 -22
- data/lib/sinatra/decompile.rb +0 -127
- data/spec/decompile_spec.rb +0 -43
data/lib/sinatra/reloader.rb
CHANGED
@@ -55,7 +55,8 @@ module Sinatra
|
|
55
55
|
#
|
56
56
|
# You can refine the reloading policy with +also_reload+ and
|
57
57
|
# +dont_reload+, to customize which files should, and should not, be
|
58
|
-
# reloaded, respectively.
|
58
|
+
# reloaded, respectively. You can also use +after_reload+ to execute a
|
59
|
+
# block after any file being reloaded.
|
59
60
|
#
|
60
61
|
# === Classic Application
|
61
62
|
#
|
@@ -66,6 +67,9 @@ module Sinatra
|
|
66
67
|
#
|
67
68
|
# also_reload '/path/to/some/file'
|
68
69
|
# dont_reload '/path/to/other/file'
|
70
|
+
# after_reload do
|
71
|
+
# puts 'reloaded'
|
72
|
+
# end
|
69
73
|
#
|
70
74
|
# # Your classic application code goes here...
|
71
75
|
#
|
@@ -81,6 +85,9 @@ module Sinatra
|
|
81
85
|
# register Sinatra::Reloader
|
82
86
|
# also_reload '/path/to/some/file'
|
83
87
|
# dont_reload '/path/to/other/file'
|
88
|
+
# after_reload do
|
89
|
+
# puts 'reloaded'
|
90
|
+
# end
|
84
91
|
# end
|
85
92
|
#
|
86
93
|
# # Your modular application code goes here...
|
@@ -205,6 +212,12 @@ module Sinatra
|
|
205
212
|
|
206
213
|
MUTEX_FOR_PERFORM = Mutex.new
|
207
214
|
|
215
|
+
# Allow a block to be executed after any file being reloaded
|
216
|
+
@@after_reload = []
|
217
|
+
def after_reload(&block)
|
218
|
+
@@after_reload << block
|
219
|
+
end
|
220
|
+
|
208
221
|
# When the extension is registered it extends the Sinatra application
|
209
222
|
# +klass+ with the modules +BaseMethods+ and +ExtensionMethods+ and
|
210
223
|
# defines a before filter to +perform+ the reload of the modified files.
|
@@ -236,6 +249,7 @@ module Sinatra
|
|
236
249
|
require watcher.path
|
237
250
|
watcher.update
|
238
251
|
end
|
252
|
+
@@after_reload.each(&:call)
|
239
253
|
end
|
240
254
|
|
241
255
|
# Contains the methods defined in Sinatra::Base that are overridden.
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
|
3
|
+
module Sinatra
|
4
|
+
# = Sinatra::RequiredParams
|
5
|
+
#
|
6
|
+
# Ensure required query parameters
|
7
|
+
#
|
8
|
+
# == Usage
|
9
|
+
#
|
10
|
+
# Set required query parameter keys in the argument.
|
11
|
+
# It'll halt with 400 if requried keys don't exist.
|
12
|
+
#
|
13
|
+
# get '/simple_keys' do
|
14
|
+
# required_params :p1, :p2
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# Complicated pattern is also fine.
|
18
|
+
#
|
19
|
+
# get '/complicated_keys' do
|
20
|
+
# required_params :p1, :p2 => [:p3, :p4]
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# === Classic Application
|
24
|
+
#
|
25
|
+
# In a classic application simply require the helpers, and start using them:
|
26
|
+
#
|
27
|
+
# require "sinatra"
|
28
|
+
# require "sinatra/required_params"
|
29
|
+
#
|
30
|
+
# # The rest of your classic application code goes here...
|
31
|
+
#
|
32
|
+
# === Modular Application
|
33
|
+
#
|
34
|
+
# In a modular application you need to require the helpers, and then tell
|
35
|
+
# the application to use them:
|
36
|
+
#
|
37
|
+
# require "sinatra/base"
|
38
|
+
# require "sinatra/required_params"
|
39
|
+
#
|
40
|
+
# class MyApp < Sinatra::Base
|
41
|
+
# helpers Sinatra::RequiredParams
|
42
|
+
#
|
43
|
+
# # The rest of your modular application code goes here...
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
module RequiredParams
|
47
|
+
def required_params(*keys)
|
48
|
+
_required_params(params, *keys)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def _required_params(p, *keys)
|
54
|
+
keys.each do |key|
|
55
|
+
if key.is_a?(Hash)
|
56
|
+
_required_params(p, *key.keys)
|
57
|
+
key.each do |k, v|
|
58
|
+
_required_params(p[k.to_s], v)
|
59
|
+
end
|
60
|
+
elsif key.is_a?(Array)
|
61
|
+
_required_params(p, *key)
|
62
|
+
else
|
63
|
+
halt 400 unless p.has_key?(key.to_s)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
true
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
helpers RequiredParams
|
71
|
+
end
|
data/lib/sinatra/respond_with.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'sinatra/json'
|
2
2
|
require 'sinatra/base'
|
3
3
|
|
4
|
-
$KCODE = "UTF-8" unless RUBY_VERSION > "1.9.0"
|
5
|
-
|
6
4
|
module Sinatra
|
7
5
|
#
|
8
6
|
# = Sinatra::RespondWith
|
@@ -117,7 +115,7 @@ module Sinatra
|
|
117
115
|
@app.halt result
|
118
116
|
end
|
119
117
|
end
|
120
|
-
@app.halt
|
118
|
+
@app.halt 500, "Unknown template engine"
|
121
119
|
end
|
122
120
|
|
123
121
|
def method_missing(method, *args, &block)
|
@@ -179,7 +177,11 @@ module Sinatra
|
|
179
177
|
if Tilt.respond_to?(:mappings)
|
180
178
|
klass = Tilt.mappings[Tilt.normalize(engine)].first
|
181
179
|
else
|
182
|
-
|
180
|
+
begin
|
181
|
+
klass = Tilt[engine]
|
182
|
+
rescue LoadError
|
183
|
+
next
|
184
|
+
end
|
183
185
|
end
|
184
186
|
find_template(settings.views, template, klass) do |file|
|
185
187
|
next unless File.exist? file
|
@@ -249,7 +251,7 @@ module Sinatra
|
|
249
251
|
}
|
250
252
|
engines.default = []
|
251
253
|
(defined? JRUBY_VERSION) ? jrubyify(engines) : engines
|
252
|
-
end
|
254
|
+
end
|
253
255
|
|
254
256
|
def self.registered(base)
|
255
257
|
base.set :ext_map, Hash.new { |h,k| h[k] = [] }
|
data/sinatra-contrib.gemspec
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
|
-
|
4
|
-
require
|
3
|
+
$:.unshift File.expand_path("../../lib", __FILE__)
|
4
|
+
require "sinatra/version"
|
5
|
+
|
5
6
|
Gem::Specification.new do |s|
|
6
7
|
s.name = "sinatra-contrib"
|
7
|
-
s.version = Sinatra::
|
8
|
+
s.version = Sinatra::VERSION
|
8
9
|
s.description = "Collection of useful Sinatra extensions"
|
9
10
|
s.homepage = "http://github.com/sinatra/sinatra-contrib"
|
10
11
|
s.license = "MIT"
|
@@ -137,7 +138,6 @@ Gem::Specification.new do |s|
|
|
137
138
|
"lib/sinatra/contrib/version.rb",
|
138
139
|
"lib/sinatra/cookies.rb",
|
139
140
|
"lib/sinatra/custom_logger.rb",
|
140
|
-
"lib/sinatra/decompile.rb",
|
141
141
|
"lib/sinatra/engine_tracking.rb",
|
142
142
|
"lib/sinatra/extension.rb",
|
143
143
|
"lib/sinatra/json.rb",
|
@@ -147,6 +147,7 @@ Gem::Specification.new do |s|
|
|
147
147
|
"lib/sinatra/reloader.rb",
|
148
148
|
"lib/sinatra/respond_with.rb",
|
149
149
|
"lib/sinatra/streaming.rb",
|
150
|
+
"lib/sinatra/required_params.rb",
|
150
151
|
"lib/sinatra/test_helpers.rb",
|
151
152
|
"sinatra-contrib.gemspec",
|
152
153
|
"spec/capture_spec.rb",
|
@@ -192,7 +193,6 @@ Gem::Specification.new do |s|
|
|
192
193
|
"spec/content_for_spec.rb",
|
193
194
|
"spec/cookies_spec.rb",
|
194
195
|
"spec/custom_logger_spec.rb",
|
195
|
-
"spec/decompile_spec.rb",
|
196
196
|
"spec/extension_spec.rb",
|
197
197
|
"spec/json_spec.rb",
|
198
198
|
"spec/link_header_spec.rb",
|
@@ -210,17 +210,21 @@ Gem::Specification.new do |s|
|
|
210
210
|
"spec/respond_with/not_html.sass",
|
211
211
|
"spec/respond_with_spec.rb",
|
212
212
|
"spec/spec_helper.rb",
|
213
|
-
"spec/streaming_spec.rb"
|
213
|
+
"spec/streaming_spec.rb",
|
214
|
+
"spec/required_params_spec.rb",
|
214
215
|
]
|
215
216
|
|
216
|
-
s.
|
217
|
+
s.required_ruby_version = '>= 2.2.0'
|
218
|
+
|
219
|
+
s.add_dependency "sinatra", Sinatra::VERSION
|
220
|
+
s.add_dependency "mustermann", "1.0.0.beta2"
|
217
221
|
s.add_dependency "backports", ">= 2.0"
|
218
222
|
s.add_dependency "tilt", ">= 1.3", "< 3"
|
219
223
|
s.add_dependency "rack-test"
|
220
|
-
s.add_dependency "rack-protection"
|
224
|
+
s.add_dependency "rack-protection", Sinatra::VERSION
|
221
225
|
s.add_dependency "multi_json"
|
222
226
|
|
223
|
-
s.add_development_dependency "rspec", "~>
|
227
|
+
s.add_development_dependency "rspec", "~> 3.4"
|
224
228
|
s.add_development_dependency "haml"
|
225
229
|
s.add_development_dependency "erubis"
|
226
230
|
s.add_development_dependency "slim"
|
@@ -229,7 +233,7 @@ Gem::Specification.new do |s|
|
|
229
233
|
s.add_development_dependency "builder"
|
230
234
|
s.add_development_dependency "liquid"
|
231
235
|
s.add_development_dependency "redcarpet"
|
232
|
-
s.add_development_dependency "RedCloth"
|
236
|
+
s.add_development_dependency "RedCloth", "~> 4.2.9"
|
233
237
|
s.add_development_dependency "asciidoctor"
|
234
238
|
s.add_development_dependency "radius"
|
235
239
|
s.add_development_dependency "coffee-script"
|
data/spec/capture_spec.rb
CHANGED
@@ -23,11 +23,11 @@ describe Sinatra::Capture do
|
|
23
23
|
require "#{engine}"
|
24
24
|
|
25
25
|
it "captures content" do
|
26
|
-
render(engine, "simple_#{lang}").
|
26
|
+
expect(render(engine, "simple_#{lang}")).to eq("Say Hello World!")
|
27
27
|
end
|
28
28
|
|
29
29
|
it "allows nested captures" do
|
30
|
-
render(engine, "nested_#{lang}").
|
30
|
+
expect(render(engine, "nested_#{lang}")).to eq("Say Hello World!")
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -39,12 +39,12 @@ describe Sinatra::Capture do
|
|
39
39
|
it_behaves_like "a template language", :erb
|
40
40
|
|
41
41
|
it "handles utf-8 encoding" do
|
42
|
-
render(:erb, "utf_8").
|
42
|
+
expect(render(:erb, "utf_8")).to eq("UTF-8 –")
|
43
43
|
end
|
44
44
|
|
45
45
|
it "handles ISO-8859-1 encoding" do
|
46
|
-
render(:erb, "iso_8859_1").
|
47
|
-
end
|
46
|
+
expect(render(:erb, "iso_8859_1")).to eq("ISO-8859-1 -")
|
47
|
+
end
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
data/spec/config_file_spec.rb
CHANGED
@@ -12,19 +12,19 @@ describe Sinatra::ConfigFile do
|
|
12
12
|
|
13
13
|
it 'should set options from a simple config_file' do
|
14
14
|
config_file 'key_value.yml'
|
15
|
-
settings.foo.
|
16
|
-
settings.something.
|
15
|
+
expect(settings.foo).to eq('bar')
|
16
|
+
expect(settings.something).to eq(42)
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should create indifferent hashes' do
|
20
20
|
config_file 'key_value.yml'
|
21
|
-
settings.nested['a'].
|
22
|
-
settings.nested[:a].
|
21
|
+
expect(settings.nested['a']).to eq(1)
|
22
|
+
expect(settings.nested[:a]).to eq(1)
|
23
23
|
end
|
24
24
|
|
25
|
-
it 'should render options in ERB tags' do
|
26
|
-
config_file 'key_value.yml
|
27
|
-
settings.
|
25
|
+
it 'should render options in ERB tags when using .yml files' do
|
26
|
+
config_file 'key_value.yml'
|
27
|
+
settings.bar.should == "bar"
|
28
28
|
settings.something.should == 42
|
29
29
|
settings.nested['a'].should == 1
|
30
30
|
settings.nested[:a].should == 1
|
@@ -32,31 +32,45 @@ describe Sinatra::ConfigFile do
|
|
32
32
|
settings.nested[:b].should == 2
|
33
33
|
end
|
34
34
|
|
35
|
+
it 'should render options in ERB tags when using .yml.erb files' do
|
36
|
+
config_file 'key_value.yml.erb'
|
37
|
+
expect(settings.foo).to eq("bar")
|
38
|
+
expect(settings.something).to eq(42)
|
39
|
+
expect(settings.nested['a']).to eq(1)
|
40
|
+
expect(settings.nested[:a]).to eq(1)
|
41
|
+
expect(settings.nested['b']).to eq(2)
|
42
|
+
expect(settings.nested[:b]).to eq(2)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should raise error if config file extension is not .yml or .erb' do
|
46
|
+
expect{ config_file 'config.txt' }.to raise_error(Sinatra::ConfigFile::UnsupportedConfigType)
|
47
|
+
end
|
48
|
+
|
35
49
|
it 'should recognize env specific settings per file' do
|
36
50
|
config_file 'with_envs.yml'
|
37
|
-
settings.foo.
|
51
|
+
expect(settings.foo).to eq('test')
|
38
52
|
end
|
39
53
|
|
40
54
|
it 'should recognize env specific settings per setting' do
|
41
55
|
config_file 'with_nested_envs.yml'
|
42
|
-
settings.database[:adapter].
|
56
|
+
expect(settings.database[:adapter]).to eq('sqlite')
|
43
57
|
end
|
44
58
|
|
45
59
|
it 'should not set present values to nil if the current env is missing' do
|
46
60
|
# first let's check the test is actually working properly
|
47
61
|
config_file('missing_env.yml') { set :foo => 42, :environment => :production }
|
48
|
-
settings.foo.
|
62
|
+
expect(settings.foo).to eq(10)
|
49
63
|
# now test it
|
50
64
|
config_file('missing_env.yml') { set :foo => 42, :environment => :test }
|
51
|
-
settings.foo.
|
65
|
+
expect(settings.foo).to eq(42)
|
52
66
|
end
|
53
67
|
|
54
68
|
it 'should prioritize settings in latter files' do
|
55
69
|
# first let's check the test is actually working properly
|
56
70
|
config_file 'key_value.yml'
|
57
|
-
settings.foo.
|
71
|
+
expect(settings.foo).to eq('bar')
|
58
72
|
# now test it
|
59
73
|
config_file 'key_value_override.yml'
|
60
|
-
settings.foo.
|
74
|
+
expect(settings.foo).to eq('foo')
|
61
75
|
end
|
62
76
|
end
|
@@ -1,2 +1,2 @@
|
|
1
1
|
- if content_for? :foo
|
2
|
-
|
2
|
+
= yield_content :foo
|
@@ -1,2 +1,2 @@
|
|
1
1
|
- if content_for? :foo
|
2
|
-
|
2
|
+
= yield_content :foo
|
data/spec/content_for_spec.rb
CHANGED
@@ -11,7 +11,7 @@ describe Sinatra::ContentFor do
|
|
11
11
|
Tilt.prefer Tilt::ERBTemplate
|
12
12
|
|
13
13
|
extend Forwardable
|
14
|
-
def_delegators :subject, :content_for, :yield_content
|
14
|
+
def_delegators :subject, :content_for, :clear_content_for, :yield_content
|
15
15
|
def render(engine, template)
|
16
16
|
subject.send(:render, engine, template, :layout => false).gsub(/\s/, '')
|
17
17
|
end
|
@@ -19,17 +19,22 @@ describe Sinatra::ContentFor do
|
|
19
19
|
describe "without templates" do
|
20
20
|
it 'renders blocks declared with the same key you use when rendering' do
|
21
21
|
content_for(:foo) { "foo" }
|
22
|
-
yield_content(:foo).
|
22
|
+
expect(yield_content(:foo)).to eq("foo")
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'renders blocks more than once' do
|
26
26
|
content_for(:foo) { "foo" }
|
27
|
-
3.times { yield_content(:foo).
|
27
|
+
3.times { expect(yield_content(:foo)).to eq("foo") }
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'does not render a block with a different key' do
|
31
31
|
content_for(:bar) { "bar" }
|
32
|
-
yield_content(:foo).
|
32
|
+
expect(yield_content(:foo)).to be_empty
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'renders default content if no block matches the key and a default block is specified' do
|
36
|
+
content_for(:bar) { "bar" }
|
37
|
+
expect(yield_content(:foo) { "foo" }).to eq("foo")
|
33
38
|
end
|
34
39
|
|
35
40
|
it 'renders multiple blocks with the same key' do
|
@@ -37,7 +42,7 @@ describe Sinatra::ContentFor do
|
|
37
42
|
content_for(:foo) { "bar" }
|
38
43
|
content_for(:bar) { "WON'T RENDER ME" }
|
39
44
|
content_for(:foo) { "baz" }
|
40
|
-
yield_content(:foo).
|
45
|
+
expect(yield_content(:foo)).to eq("foobarbaz")
|
41
46
|
end
|
42
47
|
|
43
48
|
it 'renders multiple blocks more than once' do
|
@@ -45,13 +50,25 @@ describe Sinatra::ContentFor do
|
|
45
50
|
content_for(:foo) { "bar" }
|
46
51
|
content_for(:bar) { "WON'T RENDER ME" }
|
47
52
|
content_for(:foo) { "baz" }
|
48
|
-
3.times { yield_content(:foo).
|
53
|
+
3.times { expect(yield_content(:foo)).to eq("foobarbaz") }
|
49
54
|
end
|
50
55
|
|
51
56
|
it 'passes values to the blocks' do
|
52
57
|
content_for(:foo) { |a| a.upcase }
|
53
|
-
yield_content(:foo, 'a').
|
54
|
-
yield_content(:foo, 'b').
|
58
|
+
expect(yield_content(:foo, 'a')).to eq("A")
|
59
|
+
expect(yield_content(:foo, 'b')).to eq("B")
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'clears named blocks with the specified key' do
|
63
|
+
content_for(:foo) { "foo" }
|
64
|
+
expect(yield_content(:foo)).to eq("foo")
|
65
|
+
clear_content_for(:foo)
|
66
|
+
expect(yield_content(:foo)).to be_empty
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'takes an immediate value instead of a block' do
|
70
|
+
content_for(:foo, "foo")
|
71
|
+
expect(yield_content(:foo)).to eq("foo")
|
55
72
|
end
|
56
73
|
end
|
57
74
|
|
@@ -64,56 +81,61 @@ describe Sinatra::ContentFor do
|
|
64
81
|
begin
|
65
82
|
require inner
|
66
83
|
rescue LoadError => e
|
67
|
-
|
84
|
+
skip "Skipping: " << e.message
|
68
85
|
end
|
69
86
|
end
|
70
87
|
|
71
88
|
describe "with yield_content in Ruby" do
|
72
89
|
it 'renders blocks declared with the same key you use when rendering' do
|
73
90
|
render inner, :same_key
|
74
|
-
yield_content(:foo).strip.
|
91
|
+
expect(yield_content(:foo).strip).to eq("foo")
|
75
92
|
end
|
76
93
|
|
77
94
|
it 'renders blocks more than once' do
|
78
95
|
render inner, :same_key
|
79
|
-
3.times { yield_content(:foo).strip.
|
96
|
+
3.times { expect(yield_content(:foo).strip).to eq("foo") }
|
80
97
|
end
|
81
98
|
|
82
99
|
it 'does not render a block with a different key' do
|
83
100
|
render inner, :different_key
|
84
|
-
yield_content(:foo).
|
101
|
+
expect(yield_content(:foo)).to be_empty
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'renders default content if no block matches the key and a default block is specified' do
|
105
|
+
render inner, :different_key
|
106
|
+
expect(yield_content(:foo) { "foo" }).to eq("foo")
|
85
107
|
end
|
86
108
|
|
87
109
|
it 'renders multiple blocks with the same key' do
|
88
110
|
render inner, :multiple_blocks
|
89
|
-
yield_content(:foo).gsub(/\s/, '').
|
111
|
+
expect(yield_content(:foo).gsub(/\s/, '')).to eq("foobarbaz")
|
90
112
|
end
|
91
113
|
|
92
114
|
it 'renders multiple blocks more than once' do
|
93
115
|
render inner, :multiple_blocks
|
94
|
-
3.times { yield_content(:foo).gsub(/\s/, '').
|
116
|
+
3.times { expect(yield_content(:foo).gsub(/\s/, '')).to eq("foobarbaz") }
|
95
117
|
end
|
96
118
|
|
97
119
|
it 'passes values to the blocks' do
|
98
120
|
render inner, :takes_values
|
99
|
-
yield_content(:foo, 1, 2).gsub(/\s/, '').
|
121
|
+
expect(yield_content(:foo, 1, 2).gsub(/\s/, '')).to eq("<i>1</i>2")
|
100
122
|
end
|
101
123
|
end
|
102
124
|
|
103
125
|
describe "with content_for in Ruby" do
|
104
126
|
it 'renders blocks declared with the same key you use when rendering' do
|
105
127
|
content_for(:foo) { "foo" }
|
106
|
-
render(inner, :layout).
|
128
|
+
expect(render(inner, :layout)).to eq("foo")
|
107
129
|
end
|
108
130
|
|
109
131
|
it 'renders blocks more than once' do
|
110
132
|
content_for(:foo) { "foo" }
|
111
|
-
render(inner, :multiple_yields).
|
133
|
+
expect(render(inner, :multiple_yields)).to eq("foofoofoo")
|
112
134
|
end
|
113
135
|
|
114
136
|
it 'does not render a block with a different key' do
|
115
137
|
content_for(:bar) { "foo" }
|
116
|
-
render(inner, :layout).
|
138
|
+
expect(render(inner, :layout)).to be_empty
|
117
139
|
end
|
118
140
|
|
119
141
|
it 'renders multiple blocks with the same key' do
|
@@ -121,7 +143,7 @@ describe Sinatra::ContentFor do
|
|
121
143
|
content_for(:foo) { "bar" }
|
122
144
|
content_for(:bar) { "WON'T RENDER ME" }
|
123
145
|
content_for(:foo) { "baz" }
|
124
|
-
render(inner, :layout).
|
146
|
+
expect(render(inner, :layout)).to eq("foobarbaz")
|
125
147
|
end
|
126
148
|
|
127
149
|
it 'renders multiple blocks more than once' do
|
@@ -129,24 +151,31 @@ describe Sinatra::ContentFor do
|
|
129
151
|
content_for(:foo) { "bar" }
|
130
152
|
content_for(:bar) { "WON'T RENDER ME" }
|
131
153
|
content_for(:foo) { "baz" }
|
132
|
-
render(inner, :multiple_yields).
|
154
|
+
expect(render(inner, :multiple_yields)).to eq("foobarbazfoobarbazfoobarbaz")
|
133
155
|
end
|
134
156
|
|
135
157
|
it 'passes values to the blocks' do
|
136
158
|
content_for(:foo) { |a,b| "<i>#{a}</i>#{b}" }
|
137
|
-
render(inner, :passes_values).
|
159
|
+
expect(render(inner, :passes_values)).to eq("<i>1</i>2")
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'clears named blocks with the specified key' do
|
163
|
+
content_for(:foo) { "foo" }
|
164
|
+
expect(render(inner, :layout)).to eq("foo")
|
165
|
+
clear_content_for(:foo)
|
166
|
+
expect(render(inner, :layout)).to be_empty
|
138
167
|
end
|
139
168
|
end
|
140
169
|
|
141
170
|
describe "with content_for? in Ruby" do
|
142
171
|
it 'renders block if key is set' do
|
143
172
|
content_for(:foo) { "foot" }
|
144
|
-
render(inner, :footer).
|
173
|
+
expect(render(inner, :footer)).to eq("foot")
|
145
174
|
end
|
146
175
|
|
147
176
|
it 'does not render a block if different key' do
|
148
177
|
content_for(:different_key) { "foot" }
|
149
|
-
render(inner, :footer).
|
178
|
+
expect(render(inner, :footer)).to be_empty
|
150
179
|
end
|
151
180
|
end
|
152
181
|
|
@@ -160,7 +189,7 @@ describe Sinatra::ContentFor do
|
|
160
189
|
begin
|
161
190
|
require outer
|
162
191
|
rescue LoadError => e
|
163
|
-
|
192
|
+
skip "Skipping: " << e.message
|
164
193
|
end
|
165
194
|
end
|
166
195
|
|
@@ -177,33 +206,33 @@ describe Sinatra::ContentFor do
|
|
177
206
|
end
|
178
207
|
|
179
208
|
it 'renders blocks declared with the same key you use when rendering' do
|
180
|
-
get('/same_key').
|
181
|
-
body.
|
209
|
+
expect(get('/same_key')).to be_ok
|
210
|
+
expect(body).to eq("foo")
|
182
211
|
end
|
183
212
|
|
184
213
|
it 'renders blocks more than once' do
|
185
|
-
get('/multiple_yields/same_key').
|
186
|
-
body.
|
214
|
+
expect(get('/multiple_yields/same_key')).to be_ok
|
215
|
+
expect(body).to eq("foofoofoo")
|
187
216
|
end
|
188
217
|
|
189
218
|
it 'does not render a block with a different key' do
|
190
|
-
get('/different_key').
|
191
|
-
body.
|
219
|
+
expect(get('/different_key')).to be_ok
|
220
|
+
expect(body).to be_empty
|
192
221
|
end
|
193
222
|
|
194
223
|
it 'renders multiple blocks with the same key' do
|
195
|
-
get('/multiple_blocks').
|
196
|
-
body.
|
224
|
+
expect(get('/multiple_blocks')).to be_ok
|
225
|
+
expect(body).to eq("foobarbaz")
|
197
226
|
end
|
198
227
|
|
199
228
|
it 'renders multiple blocks more than once' do
|
200
|
-
get('/multiple_yields/multiple_blocks').
|
201
|
-
body.
|
229
|
+
expect(get('/multiple_yields/multiple_blocks')).to be_ok
|
230
|
+
expect(body).to eq("foobarbazfoobarbazfoobarbaz")
|
202
231
|
end
|
203
232
|
|
204
233
|
it 'passes values to the blocks' do
|
205
|
-
get('/passes_values/takes_values').
|
206
|
-
body.
|
234
|
+
expect(get('/passes_values/takes_values')).to be_ok
|
235
|
+
expect(body).to eq("<i>1</i>2")
|
207
236
|
end
|
208
237
|
end
|
209
238
|
end
|