sinatra-contrib 1.4.2 → 1.4.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
- require 'backports'
3
2
  require 'slim'
4
- require_relative 'spec_helper'
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") %>
@@ -1,5 +1,4 @@
1
- require 'backports'
2
- require_relative 'spec_helper'
1
+ require 'spec_helper'
3
2
 
4
3
  describe Sinatra::ConfigFile do
5
4
  def config_file(*args, &block)
@@ -1,5 +1,4 @@
1
- require 'backports'
2
- require_relative 'spec_helper'
1
+ require 'spec_helper'
3
2
 
4
3
  describe Sinatra::ContentFor do
5
4
  subject do
@@ -1,5 +1,4 @@
1
- require 'backports'
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 be_true
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 == false
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 be_false
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 be_true
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 be_true
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 be_true
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 be_true
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 be_true
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 be_false
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 be_true
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 be_true
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 be_false
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 be_true
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 be_true
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').should_not be_true
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
@@ -1,5 +1,4 @@
1
- require 'backports'
2
- require_relative 'spec_helper'
1
+ require 'spec_helper'
3
2
 
4
3
  RSpec::Matchers.define :decompile do |path|
5
4
  match do |app|
@@ -1,5 +1,4 @@
1
- require 'backports'
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 be_false }
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
@@ -1,8 +1,7 @@
1
- require 'backports'
2
1
  require 'multi_json'
3
2
 
4
- require_relative 'spec_helper'
5
- require_relative 'okjson'
3
+ require 'spec_helper'
4
+ require 'okjson'
6
5
 
7
6
  shared_examples_for "a json encoder" do |lib, const|
8
7
  before do
@@ -1,5 +1,4 @@
1
- require 'backports'
2
- require_relative 'spec_helper'
1
+ require 'spec_helper'
3
2
 
4
3
  describe Sinatra::LinkHeader do
5
4
  before do
@@ -1,5 +1,4 @@
1
- require 'backports'
2
- require_relative 'spec_helper'
1
+ require 'spec_helper'
3
2
 
4
3
  describe Sinatra::MultiRoute do
5
4
 
@@ -1,5 +1,4 @@
1
- require 'backports'
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 == 'bar' unless verb == :head
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 be_true
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 be_false
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 be_true
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 be_false
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 be_false
179
+ ran.should be false
181
180
  send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
182
- ran.should be_false
181
+ ran.should be false
183
182
  send(verb, '/bar', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
184
- ran.should be_false
183
+ ran.should be false
185
184
  send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
186
- ran.should be_true
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 be_false
195
+ ran.should be false
197
196
  send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
198
- ran.should be_false
197
+ ran.should be false
199
198
  send(verb, '/bar', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
200
- ran.should be_false
199
+ ran.should be false
201
200
  send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
202
- ran.should be_true
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 be_false
234
+ ran.should be false
236
235
  send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com')
237
- ran.should be_true
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 be_false
255
+ ran.should be false
257
256
  send(verb, '/', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
258
- ran.should be_false
257
+ ran.should be false
259
258
  send(verb, '/', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
260
- ran.should be_true
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 be_false
269
+ ran.should be false
271
270
  send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/html')
272
- ran.should be_false
271
+ ran.should be false
273
272
  send(verb, '/far', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
274
- ran.should be_false
273
+ ran.should be false
275
274
  send(verb, '/foo', {}, 'HTTP_HOST' => 'example.com', 'HTTP_ACCEPT' => 'text/plain')
276
- ran.should be_true
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 == 404
483
- last_response.body.should_not == 'nicht gefunden' unless verb == :head
484
- get('/en/foo').status.should == 404
485
- last_response.body.should_not == 'nicht gefunden' unless verb == :head
486
- get('/de/foo').status.should == 404
487
- last_response.body.should == 'nicht gefunden' unless verb == :head
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 == 404
495
- last_response.body.should_not == 'nicht gefunden' unless verb == :head
496
- get('/en/foo').status.should == 404
497
- last_response.body.should_not == 'nicht gefunden' unless verb == :head
498
- get('/de/foo').status.should == 404
499
- last_response.body.should == 'nicht gefunden' unless verb == :head
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 == 404
512
- last_response.body.should == 'not found...' unless verb == :head
513
- get('/en/foo').status.should == 404
514
- last_response.body.should == 'not found...' unless verb == :head
515
- get('/de/foo').status.should == 404
516
- last_response.body.should == 'nicht gefunden' unless verb == :head
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 == 401
547
- last_response.body.should == 'auth failed' unless verb == :head
548
- get('/de/foo').status.should == 406
549
- last_response.body.should == 'methode nicht erlaubt' unless verb == :head
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 == 'hi'
565
- send(verb, '/foo').body.should == 'hi'
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 == 'hi'
579
- send(verb, '/foo').body.should == 'ho'
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 == "hi\n"
593
- send(verb, '/foo').body.should == "ho\n"
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 == 'he said: hi'
608
- send(verb, '/foo').body.should == 'he said: ho'
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 == 'Hello World!'
623
- send(verb, '/foo').body.should == 'Hi World!'
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 == 42
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 == 'CUSTOM!!!'
651
- b.should_not == 'CUSTOM!!!'
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 == '/foo'
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