sinatra-contrib 1.4.2 → 1.4.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.
- checksums.yaml +4 -4
- data/LICENSE +2 -0
- data/README.md +3 -0
- data/Rakefile +3 -3
- data/lib/sinatra/capture.rb +1 -1
- data/lib/sinatra/config_file.rb +4 -3
- data/lib/sinatra/contrib/version.rb +1 -1
- data/lib/sinatra/cookies.rb +2 -4
- data/lib/sinatra/custom_logger.rb +60 -0
- data/lib/sinatra/decompile.rb +7 -1
- data/lib/sinatra/namespace.rb +10 -3
- data/lib/sinatra/reloader.rb +6 -4
- data/lib/sinatra/respond_with.rb +30 -13
- data/lib/sinatra/streaming.rb +1 -1
- data/sinatra-contrib.gemspec +40 -3
- data/spec/capture_spec.rb +9 -2
- data/spec/config_file_spec.rb +1 -2
- data/spec/content_for_spec.rb +1 -2
- data/spec/cookies_spec.rb +25 -18
- data/spec/custom_logger_spec.rb +43 -0
- data/spec/decompile_spec.rb +1 -2
- data/spec/extension_spec.rb +2 -3
- data/spec/json_spec.rb +2 -3
- data/spec/link_header_spec.rb +1 -2
- data/spec/multi_route_spec.rb +1 -2
- data/spec/namespace_spec.rb +125 -60
- data/spec/reloader_spec.rb +1 -2
- data/spec/respond_with/bar.erb +1 -1
- data/spec/respond_with_spec.rb +3 -4
- data/spec/spec_helper.rb +1 -1
- data/spec/streaming_spec.rb +3 -3
- metadata +242 -30
data/spec/capture_spec.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
require 'backports'
|
3
2
|
require 'slim'
|
4
|
-
|
3
|
+
require 'spec_helper'
|
5
4
|
|
6
5
|
describe Sinatra::Capture do
|
7
6
|
subject do
|
@@ -42,6 +41,10 @@ describe Sinatra::Capture do
|
|
42
41
|
it "handles utf-8 encoding" do
|
43
42
|
render(:erb, "utf_8").should == "UTF-8 –"
|
44
43
|
end
|
44
|
+
|
45
|
+
it "handles ISO-8859-1 encoding" do
|
46
|
+
render(:erb, "iso_8859_1").should == "ISO-8859-1 -"
|
47
|
+
end if RUBY_VERSION >= '1.9'
|
45
48
|
end
|
46
49
|
end
|
47
50
|
|
@@ -91,3 +94,7 @@ Hello #{a.strip}
|
|
91
94
|
@@ utf_8
|
92
95
|
<% a = capture do %>–<% end %>
|
93
96
|
UTF-8 <%= a %>
|
97
|
+
|
98
|
+
@@ iso_8859_1
|
99
|
+
<% a = capture do %>-<% end %>
|
100
|
+
ISO-8859-1 <%= a.force_encoding("iso-8859-1") %>
|
data/spec/config_file_spec.rb
CHANGED
data/spec/content_for_spec.rb
CHANGED
data/spec/cookies_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require_relative 'spec_helper'
|
1
|
+
require 'spec_helper'
|
3
2
|
|
4
3
|
describe Sinatra::Cookies do
|
5
4
|
def cookie_route(*cookies, &block)
|
@@ -9,7 +8,7 @@ describe Sinatra::Cookies do
|
|
9
8
|
result = instance_eval(&block)
|
10
9
|
"ok"
|
11
10
|
end
|
12
|
-
get '/'
|
11
|
+
get '/', {}, @headers || {}
|
13
12
|
last_response.should be_ok
|
14
13
|
body.should be == "ok"
|
15
14
|
result
|
@@ -33,7 +32,7 @@ describe Sinatra::Cookies do
|
|
33
32
|
it 'runs the block' do
|
34
33
|
ran = false
|
35
34
|
cookie_route { ran = true }
|
36
|
-
ran.should
|
35
|
+
ran.should be true
|
37
36
|
end
|
38
37
|
|
39
38
|
it 'returns the block result' do
|
@@ -97,6 +96,14 @@ describe Sinatra::Cookies do
|
|
97
96
|
end.should include('HttpOnly')
|
98
97
|
end
|
99
98
|
|
99
|
+
it 'sets domain to nil if localhost' do
|
100
|
+
@headers = {'HTTP_HOST' => 'localhost'}
|
101
|
+
cookie_route do
|
102
|
+
cookies['foo'] = 'bar'
|
103
|
+
response['Set-Cookie']
|
104
|
+
end.should_not include("domain")
|
105
|
+
end
|
106
|
+
|
100
107
|
it 'sets the domain' do
|
101
108
|
cookie_route do
|
102
109
|
cookies['foo'] = 'bar'
|
@@ -275,7 +282,7 @@ describe Sinatra::Cookies do
|
|
275
282
|
cookies.each do |key, value|
|
276
283
|
key.should == 'foo'
|
277
284
|
value.should == 'baz'
|
278
|
-
seen.should
|
285
|
+
seen.should == false
|
279
286
|
seen = true
|
280
287
|
end
|
281
288
|
end
|
@@ -435,7 +442,7 @@ describe Sinatra::Cookies do
|
|
435
442
|
cookie_route do
|
436
443
|
cookies['foo'] = 'bar'
|
437
444
|
cookies.empty?
|
438
|
-
end.should
|
445
|
+
end.should be false
|
439
446
|
end
|
440
447
|
|
441
448
|
it 'becomes true if response cookies are removed' do
|
@@ -443,14 +450,14 @@ describe Sinatra::Cookies do
|
|
443
450
|
cookies['foo'] = 'bar'
|
444
451
|
cookies.delete :foo
|
445
452
|
cookies.empty?
|
446
|
-
end.should
|
453
|
+
end.should be true
|
447
454
|
end
|
448
455
|
|
449
456
|
it 'becomes true if request cookies are removed' do
|
450
457
|
cookie_route('foo=bar') do
|
451
458
|
cookies.delete :foo
|
452
459
|
cookies.empty?
|
453
|
-
end.should
|
460
|
+
end.should be_truthy
|
454
461
|
end
|
455
462
|
|
456
463
|
it 'becomes true after clear' do
|
@@ -458,7 +465,7 @@ describe Sinatra::Cookies do
|
|
458
465
|
cookies['foo'] = 'bar'
|
459
466
|
cookies.clear
|
460
467
|
cookies.empty?
|
461
|
-
end.should
|
468
|
+
end.should be_truthy
|
462
469
|
end
|
463
470
|
end
|
464
471
|
|
@@ -595,19 +602,19 @@ describe Sinatra::Cookies do
|
|
595
602
|
|
596
603
|
describe :key? do
|
597
604
|
it 'checks request cookies' do
|
598
|
-
cookies('foo=bar').key?('foo').should
|
605
|
+
cookies('foo=bar').key?('foo').should be true
|
599
606
|
end
|
600
607
|
|
601
608
|
it 'checks response cookies' do
|
602
609
|
jar = cookies
|
603
610
|
jar['foo'] = 'bar'
|
604
|
-
jar.key?(:foo).should
|
611
|
+
jar.key?(:foo).should be true
|
605
612
|
end
|
606
613
|
|
607
614
|
it 'does not use deleted cookies' do
|
608
615
|
jar = cookies('foo=bar')
|
609
616
|
jar.delete :foo
|
610
|
-
jar.key?('foo').should
|
617
|
+
jar.key?('foo').should be false
|
611
618
|
end
|
612
619
|
end
|
613
620
|
|
@@ -622,19 +629,19 @@ describe Sinatra::Cookies do
|
|
622
629
|
|
623
630
|
describe :member? do
|
624
631
|
it 'checks request cookies' do
|
625
|
-
cookies('foo=bar').member?('foo').should
|
632
|
+
cookies('foo=bar').member?('foo').should be true
|
626
633
|
end
|
627
634
|
|
628
635
|
it 'checks response cookies' do
|
629
636
|
jar = cookies
|
630
637
|
jar['foo'] = 'bar'
|
631
|
-
jar.member?(:foo).should
|
638
|
+
jar.member?(:foo).should be true
|
632
639
|
end
|
633
640
|
|
634
641
|
it 'does not use deleted cookies' do
|
635
642
|
jar = cookies('foo=bar')
|
636
643
|
jar.delete :foo
|
637
|
-
jar.member?('foo').should
|
644
|
+
jar.member?('foo').should be false
|
638
645
|
end
|
639
646
|
end
|
640
647
|
|
@@ -776,19 +783,19 @@ describe Sinatra::Cookies do
|
|
776
783
|
|
777
784
|
describe :value? do
|
778
785
|
it 'checks request cookies' do
|
779
|
-
cookies('foo=bar').value?('bar').should
|
786
|
+
cookies('foo=bar').value?('bar').should be true
|
780
787
|
end
|
781
788
|
|
782
789
|
it 'checks response cookies' do
|
783
790
|
jar = cookies
|
784
791
|
jar[:foo] = 'bar'
|
785
|
-
jar.value?('bar').should
|
792
|
+
jar.value?('bar').should be true
|
786
793
|
end
|
787
794
|
|
788
795
|
it 'does not use deleted cookies' do
|
789
796
|
jar = cookies('foo=bar')
|
790
797
|
jar.delete :foo
|
791
|
-
jar.value?('bar').
|
798
|
+
jar.value?('bar').should be false
|
792
799
|
end
|
793
800
|
end
|
794
801
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'sinatra/custom_logger'
|
3
|
+
|
4
|
+
describe Sinatra::CustomLogger do
|
5
|
+
before do
|
6
|
+
rack_logger = @rack_logger = double
|
7
|
+
mock_app do
|
8
|
+
helpers Sinatra::CustomLogger
|
9
|
+
|
10
|
+
before do
|
11
|
+
env['rack.logger'] = rack_logger
|
12
|
+
end
|
13
|
+
|
14
|
+
get '/' do
|
15
|
+
logger.info 'Logged message'
|
16
|
+
'Response'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#logger' do
|
22
|
+
it 'falls back to request.logger' do
|
23
|
+
expect(@rack_logger).to receive(:info).with('Logged message')
|
24
|
+
get '/'
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'logger setting is set' do
|
28
|
+
before do
|
29
|
+
custom_logger = @custom_logger = double
|
30
|
+
@app.class_eval do
|
31
|
+
configure do
|
32
|
+
set :logger, custom_logger
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'calls custom logger' do
|
38
|
+
expect(@custom_logger).to receive(:info).with('Logged message')
|
39
|
+
get '/'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/spec/decompile_spec.rb
CHANGED
data/spec/extension_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require_relative 'spec_helper'
|
1
|
+
require 'spec_helper'
|
3
2
|
|
4
3
|
describe Sinatra::Extension do
|
5
4
|
module ExampleExtension
|
@@ -24,7 +23,7 @@ describe Sinatra::Extension do
|
|
24
23
|
before { mock_app { register ExampleExtension }}
|
25
24
|
|
26
25
|
it('allows using set') { settings.foo.should == :bar }
|
27
|
-
it('implements configure') { settings.reload_stuff.should
|
26
|
+
it('implements configure') { settings.reload_stuff.should be false }
|
28
27
|
|
29
28
|
it 'allows defing routes' do
|
30
29
|
get('/').should be_ok
|
data/spec/json_spec.rb
CHANGED
data/spec/link_header_spec.rb
CHANGED
data/spec/multi_route_spec.rb
CHANGED
data/spec/namespace_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require_relative 'spec_helper'
|
1
|
+
require 'spec_helper'
|
3
2
|
|
4
3
|
describe Sinatra::Namespace do
|
5
4
|
verbs = [:get, :head, :post, :put, :delete, :options]
|
@@ -44,7 +43,7 @@ describe Sinatra::Namespace do
|
|
44
43
|
it 'accepts the path as a regular expression' do
|
45
44
|
namespace('/foo') { send(verb, /\/\d\d/) { 'bar' }}
|
46
45
|
send(verb, '/foo/12').should be_ok
|
47
|
-
body.should
|
46
|
+
body.should eq 'bar' unless verb == :head
|
48
47
|
send(verb, '/foo/123').should_not be_ok
|
49
48
|
end
|
50
49
|
end
|
@@ -119,14 +118,14 @@ describe Sinatra::Namespace do
|
|
119
118
|
ran = false
|
120
119
|
namespace('/foo') { before { ran = true }}
|
121
120
|
send(verb, '/foo')
|
122
|
-
ran.should
|
121
|
+
ran.should be true
|
123
122
|
end
|
124
123
|
|
125
124
|
specify 'are not triggered for a different namespace' do
|
126
125
|
ran = false
|
127
126
|
namespace('/foo') { before { ran = true }}
|
128
127
|
send(verb, '/fox')
|
129
|
-
ran.should
|
128
|
+
ran.should be false
|
130
129
|
end
|
131
130
|
end
|
132
131
|
|
@@ -135,14 +134,14 @@ describe Sinatra::Namespace do
|
|
135
134
|
ran = false
|
136
135
|
namespace('/foo') { after { ran = true }}
|
137
136
|
send(verb, '/foo')
|
138
|
-
ran.should
|
137
|
+
ran.should be true
|
139
138
|
end
|
140
139
|
|
141
140
|
specify 'are not triggered for a different namespace' do
|
142
141
|
ran = false
|
143
142
|
namespace('/foo') { after { ran = true }}
|
144
143
|
send(verb, '/fox')
|
145
|
-
ran.should
|
144
|
+
ran.should be false
|
146
145
|
end
|
147
146
|
end
|
148
147
|
|
@@ -177,13 +176,13 @@ describe Sinatra::Namespace do
|
|
177
176
|
send(verb, '/*') { 'ok' }
|
178
177
|
end
|
179
178
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.org', 'HTTP_ACCEPT' => 'text/plain')
|
180
|
-
ran.should
|
179
|
+
ran.should be false
|
181
180
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
|
182
|
-
ran.should
|
181
|
+
ran.should be false
|
183
182
|
send(verb, '/bar', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
|
184
|
-
ran.should
|
183
|
+
ran.should be false
|
185
184
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
|
186
|
-
ran.should
|
185
|
+
ran.should be true
|
187
186
|
end
|
188
187
|
|
189
188
|
specify 'are accepted in the after-filter' do
|
@@ -193,13 +192,13 @@ describe Sinatra::Namespace do
|
|
193
192
|
send(verb, '/*') { 'ok' }
|
194
193
|
end
|
195
194
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.org', 'HTTP_ACCEPT' => 'text/plain')
|
196
|
-
ran.should
|
195
|
+
ran.should be false
|
197
196
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
|
198
|
-
ran.should
|
197
|
+
ran.should be false
|
199
198
|
send(verb, '/bar', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
|
200
|
-
ran.should
|
199
|
+
ran.should be false
|
201
200
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
|
202
|
-
ran.should
|
201
|
+
ran.should be true
|
203
202
|
end
|
204
203
|
end
|
205
204
|
|
@@ -232,9 +231,9 @@ describe Sinatra::Namespace do
|
|
232
231
|
send(verb) { 'ok' }
|
233
232
|
end
|
234
233
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.org')
|
235
|
-
ran.should
|
234
|
+
ran.should be false
|
236
235
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com')
|
237
|
-
ran.should
|
236
|
+
ran.should be true
|
238
237
|
end
|
239
238
|
|
240
239
|
specify 'are accepted in the route definition' do
|
@@ -253,11 +252,11 @@ describe Sinatra::Namespace do
|
|
253
252
|
send(verb) { 'ok' }
|
254
253
|
end
|
255
254
|
send(verb, '/', {}, 'HTTP_HOST' => 'example.org', 'HTTP_ACCEPT' => 'text/plain')
|
256
|
-
ran.should
|
255
|
+
ran.should be false
|
257
256
|
send(verb, '/', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
|
258
|
-
ran.should
|
257
|
+
ran.should be false
|
259
258
|
send(verb, '/', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
|
260
|
-
ran.should
|
259
|
+
ran.should be true
|
261
260
|
end
|
262
261
|
|
263
262
|
specify 'are accepted in the filters' do
|
@@ -267,13 +266,13 @@ describe Sinatra::Namespace do
|
|
267
266
|
send(verb, '/*') { 'ok' }
|
268
267
|
end
|
269
268
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.org', 'HTTP_ACCEPT' => 'text/plain')
|
270
|
-
ran.should
|
269
|
+
ran.should be false
|
271
270
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
|
272
|
-
ran.should
|
271
|
+
ran.should be false
|
273
272
|
send(verb, '/far', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
|
274
|
-
ran.should
|
273
|
+
ran.should be false
|
275
274
|
send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
|
276
|
-
ran.should
|
275
|
+
ran.should be true
|
277
276
|
end
|
278
277
|
end
|
279
278
|
end
|
@@ -479,24 +478,24 @@ describe Sinatra::Namespace do
|
|
479
478
|
namespace('/de') do
|
480
479
|
not_found { 'nicht gefunden' }
|
481
480
|
end
|
482
|
-
send(verb, '/foo').status.should
|
483
|
-
last_response.body.should_not
|
484
|
-
get('/en/foo').status.should
|
485
|
-
last_response.body.should_not
|
486
|
-
get('/de/foo').status.should
|
487
|
-
last_response.body.should
|
481
|
+
send(verb, '/foo').status.should eq 404
|
482
|
+
last_response.body.should_not eq 'nicht gefunden' unless verb == :head
|
483
|
+
get('/en/foo').status.should eq 404
|
484
|
+
last_response.body.should_not eq 'nicht gefunden' unless verb == :head
|
485
|
+
get('/de/foo').status.should eq 404
|
486
|
+
last_response.body.should eq 'nicht gefunden' unless verb == :head
|
488
487
|
end
|
489
488
|
|
490
489
|
it 'can be customized for specific error codes' do
|
491
490
|
namespace('/de') do
|
492
491
|
error(404) { 'nicht gefunden' }
|
493
492
|
end
|
494
|
-
send(verb, '/foo').status.should
|
495
|
-
last_response.body.should_not
|
496
|
-
get('/en/foo').status.should
|
497
|
-
last_response.body.should_not
|
498
|
-
get('/de/foo').status.should
|
499
|
-
last_response.body.should
|
493
|
+
send(verb, '/foo').status.should eq 404
|
494
|
+
last_response.body.should_not eq 'nicht gefunden' unless verb == :head
|
495
|
+
get('/en/foo').status.should eq 404
|
496
|
+
last_response.body.should_not eq 'nicht gefunden' unless verb == :head
|
497
|
+
get('/de/foo').status.should eq 404
|
498
|
+
last_response.body.should eq 'nicht gefunden' unless verb == :head
|
500
499
|
end
|
501
500
|
|
502
501
|
it 'falls back to the handler defined in the base app' do
|
@@ -508,12 +507,12 @@ describe Sinatra::Namespace do
|
|
508
507
|
error(404) { 'nicht gefunden' }
|
509
508
|
end
|
510
509
|
end
|
511
|
-
send(verb, '/foo').status.should
|
512
|
-
last_response.body.should
|
513
|
-
get('/en/foo').status.should
|
514
|
-
last_response.body.should
|
515
|
-
get('/de/foo').status.should
|
516
|
-
last_response.body.should
|
510
|
+
send(verb, '/foo').status.should eq 404
|
511
|
+
last_response.body.should eq 'not found...' unless verb == :head
|
512
|
+
get('/en/foo').status.should eq 404
|
513
|
+
last_response.body.should eq 'not found...' unless verb == :head
|
514
|
+
get('/de/foo').status.should eq 404
|
515
|
+
last_response.body.should eq 'nicht gefunden' unless verb == :head
|
517
516
|
end
|
518
517
|
|
519
518
|
it 'can be customized for specific Exception classes' do
|
@@ -543,10 +542,28 @@ describe Sinatra::Namespace do
|
|
543
542
|
end
|
544
543
|
end
|
545
544
|
end
|
546
|
-
get('/en/foo').status.should
|
547
|
-
last_response.body.should
|
548
|
-
get('/de/foo').status.should
|
549
|
-
last_response.body.should
|
545
|
+
get('/en/foo').status.should eq 401
|
546
|
+
last_response.body.should eq 'auth failed' unless verb == :head
|
547
|
+
get('/de/foo').status.should eq 406
|
548
|
+
last_response.body.should eq 'methode nicht erlaubt' unless verb == :head
|
549
|
+
end
|
550
|
+
|
551
|
+
it "allows custom error handlers when namespace is declared as /en/:id. Issue #119" do
|
552
|
+
mock_app {
|
553
|
+
class CError < StandardError;
|
554
|
+
end
|
555
|
+
|
556
|
+
error { raise "should not come here" }
|
557
|
+
|
558
|
+
namespace('/en/:id') do
|
559
|
+
error(CError) { 201 }
|
560
|
+
get '/?' do
|
561
|
+
raise CError
|
562
|
+
end
|
563
|
+
end
|
564
|
+
}
|
565
|
+
|
566
|
+
get('/en/1').status.should == 201
|
550
567
|
end
|
551
568
|
end
|
552
569
|
|
@@ -561,8 +578,8 @@ describe Sinatra::Namespace do
|
|
561
578
|
end
|
562
579
|
end
|
563
580
|
|
564
|
-
send(verb, '/').body.should
|
565
|
-
send(verb, '/foo').body.should
|
581
|
+
send(verb, '/').body.should eq 'hi'
|
582
|
+
send(verb, '/foo').body.should eq 'hi'
|
566
583
|
end
|
567
584
|
|
568
585
|
specify 'can be nested' do
|
@@ -575,8 +592,8 @@ describe Sinatra::Namespace do
|
|
575
592
|
end
|
576
593
|
end
|
577
594
|
|
578
|
-
send(verb, '/').body.should
|
579
|
-
send(verb, '/foo').body.should
|
595
|
+
send(verb, '/').body.should eq 'hi'
|
596
|
+
send(verb, '/foo').body.should eq 'ho'
|
580
597
|
end
|
581
598
|
|
582
599
|
specify 'can use a custom views directory' do
|
@@ -589,8 +606,8 @@ describe Sinatra::Namespace do
|
|
589
606
|
end
|
590
607
|
end
|
591
608
|
|
592
|
-
send(verb, '/').body.should
|
593
|
-
send(verb, '/foo').body.should
|
609
|
+
send(verb, '/').body.should eq "hi\n"
|
610
|
+
send(verb, '/foo').body.should eq "ho\n"
|
594
611
|
end
|
595
612
|
|
596
613
|
specify 'default to the base app\'s layout' do
|
@@ -604,8 +621,8 @@ describe Sinatra::Namespace do
|
|
604
621
|
end
|
605
622
|
end
|
606
623
|
|
607
|
-
send(verb, '/').body.should
|
608
|
-
send(verb, '/foo').body.should
|
624
|
+
send(verb, '/').body.should eq 'he said: hi'
|
625
|
+
send(verb, '/foo').body.should eq 'he said: ho'
|
609
626
|
end
|
610
627
|
|
611
628
|
specify 'can define nested layouts' do
|
@@ -619,8 +636,8 @@ describe Sinatra::Namespace do
|
|
619
636
|
end
|
620
637
|
end
|
621
638
|
|
622
|
-
send(verb, '/').body.should
|
623
|
-
send(verb, '/foo').body.should
|
639
|
+
send(verb, '/').body.should eq 'Hello World!'
|
640
|
+
send(verb, '/foo').body.should eq 'Hi World!'
|
624
641
|
end
|
625
642
|
end
|
626
643
|
end
|
@@ -634,7 +651,7 @@ describe Sinatra::Namespace do
|
|
634
651
|
value = foo
|
635
652
|
end
|
636
653
|
end
|
637
|
-
value.should
|
654
|
+
value.should eq 42
|
638
655
|
end
|
639
656
|
|
640
657
|
specify 'can be registered within a namespace' do
|
@@ -647,8 +664,8 @@ describe Sinatra::Namespace do
|
|
647
664
|
end
|
648
665
|
b = views
|
649
666
|
end
|
650
|
-
a.should
|
651
|
-
b.should_not
|
667
|
+
a.should eq 'CUSTOM!!!'
|
668
|
+
b.should_not eq 'CUSTOM!!!'
|
652
669
|
end
|
653
670
|
|
654
671
|
specify 'trigger the route_added hook' do
|
@@ -664,7 +681,7 @@ describe Sinatra::Namespace do
|
|
664
681
|
end
|
665
682
|
get('/bar') { }
|
666
683
|
end
|
667
|
-
route[1].should
|
684
|
+
route[1].should eq '/foo'
|
668
685
|
end
|
669
686
|
|
670
687
|
specify 'prevent app-global settings from being changed' do
|
@@ -673,4 +690,52 @@ describe Sinatra::Namespace do
|
|
673
690
|
end
|
674
691
|
end
|
675
692
|
end
|
693
|
+
|
694
|
+
describe 'settings' do
|
695
|
+
it 'provides access to top-level settings' do
|
696
|
+
mock_app do
|
697
|
+
set :foo, 'ok'
|
698
|
+
|
699
|
+
namespace '/foo' do
|
700
|
+
get '/bar' do
|
701
|
+
settings.foo
|
702
|
+
end
|
703
|
+
end
|
704
|
+
end
|
705
|
+
|
706
|
+
get('/foo/bar').status.should == 200
|
707
|
+
last_response.body.should == 'ok'
|
708
|
+
end
|
709
|
+
|
710
|
+
it 'uses some repro' do
|
711
|
+
mock_app do
|
712
|
+
set :foo, 42
|
713
|
+
|
714
|
+
namespace '/foo' do
|
715
|
+
get '/bar' do
|
716
|
+
#settings.respond_to?(:foo).to_s
|
717
|
+
settings.foo.to_s
|
718
|
+
end
|
719
|
+
end
|
720
|
+
end
|
721
|
+
|
722
|
+
get('/foo/bar').status.should == 200
|
723
|
+
last_response.body.should == '42'
|
724
|
+
end
|
725
|
+
|
726
|
+
it 'allows checking setting existance with respond_to?' do
|
727
|
+
mock_app do
|
728
|
+
set :foo, 42
|
729
|
+
|
730
|
+
namespace '/foo' do
|
731
|
+
get '/bar' do
|
732
|
+
settings.respond_to?(:foo).to_s
|
733
|
+
end
|
734
|
+
end
|
735
|
+
end
|
736
|
+
|
737
|
+
get('/foo/bar').status.should == 200
|
738
|
+
last_response.body.should == 'true'
|
739
|
+
end
|
740
|
+
end
|
676
741
|
end
|