sinatra 1.2.0.a → 1.2.0.c

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sinatra might be problematic. Click here for more details.

@@ -1,4 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
+
3
+ begin
2
4
  require 'builder'
3
5
 
4
6
  class BuilderTest < Test::Unit::TestCase
@@ -87,3 +89,7 @@ class BuilderTest < Test::Unit::TestCase
87
89
  assert_raise(Errno::ENOENT) { get('/') }
88
90
  end
89
91
  end
92
+
93
+ rescue LoadError
94
+ warn "#{$!.to_s}: skipping less tests"
95
+ end
@@ -83,6 +83,6 @@ class CoffeeTest < Test::Unit::TestCase
83
83
  end
84
84
  end
85
85
 
86
- rescue
86
+ rescue LoadError
87
87
  warn "#{$!.to_s}: skipping coffee tests"
88
88
  end
@@ -1,4 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
+
3
+ begin
2
4
  require 'erubis'
3
5
 
4
6
  class ERubisTest < Test::Unit::TestCase
@@ -80,3 +82,7 @@ class ERubisTest < Test::Unit::TestCase
80
82
  assert_equal '<outer><inner>hi</inner></outer>', body
81
83
  end
82
84
  end
85
+
86
+ rescue LoadError
87
+ warn "#{$!.to_s}: skipping erubis tests"
88
+ end
@@ -95,6 +95,7 @@ class HAMLTest < Test::Unit::TestCase
95
95
  assert_equal "bar\n", body
96
96
  end
97
97
  end
98
- rescue
98
+
99
+ rescue LoadError
99
100
  warn "#{$!.to_s}: skipping haml tests"
100
101
  end
@@ -111,6 +111,18 @@ class HelpersTest < Test::Unit::TestCase
111
111
  response = request.get('/', 'SERVER_PORT' => '444')
112
112
  assert_equal 'http://example.org:444/foo', response['Location']
113
113
  end
114
+
115
+ it 'works behind a reverse proxy' do
116
+ mock_app do
117
+ get '/' do
118
+ redirect '/foo'
119
+ end
120
+ end
121
+
122
+ request = Rack::MockRequest.new(@app)
123
+ response = request.get('/', 'HTTP_X_FORWARDED_HOST' => 'example.com', 'SERVER_PORT' => '8080')
124
+ assert_equal 'http://example.com/foo', response['Location']
125
+ end
114
126
  end
115
127
 
116
128
  describe 'error' do
@@ -599,6 +611,9 @@ class HelpersTest < Test::Unit::TestCase
599
611
  get '/compare', {}, { 'HTTP_IF_MODIFIED_SINCE' => 'Sun, 26 Sep 2010 23:43:52 GMT' }
600
612
  assert_equal 200, status
601
613
  assert_equal 'foo', body
614
+ get '/compare', {}, { 'HTTP_IF_MODIFIED_SINCE' => 'Sun, 26 Sep 2100 23:43:52 GMT' }
615
+ assert_equal 304, status
616
+ assert_equal '', body
602
617
  end
603
618
  end
604
619
 
@@ -691,6 +706,44 @@ class HelpersTest < Test::Unit::TestCase
691
706
  end
692
707
  end
693
708
 
709
+ describe 'uri' do
710
+ it 'generates absolute urls' do
711
+ mock_app { get('/') { uri }}
712
+ get '/'
713
+ assert_equal 'http://example.org/', body
714
+ end
715
+
716
+ it 'includes path_info' do
717
+ mock_app { get('/:name') { uri }}
718
+ get '/foo'
719
+ assert_equal 'http://example.org/foo', body
720
+ end
721
+
722
+ it 'allows passing an alternative to path_info' do
723
+ mock_app { get('/:name') { uri '/bar' }}
724
+ get '/foo'
725
+ assert_equal 'http://example.org/bar', body
726
+ end
727
+
728
+ it 'includes script_name' do
729
+ mock_app { get('/:name') { uri '/bar' }}
730
+ get '/foo', {}, { "SCRIPT_NAME" => '/foo' }
731
+ assert_equal 'http://example.org/foo/bar', body
732
+ end
733
+
734
+ it 'is aliased to #url' do
735
+ mock_app { get('/') { url }}
736
+ get '/'
737
+ assert_equal 'http://example.org/', body
738
+ end
739
+
740
+ it 'is aliased to #to' do
741
+ mock_app { get('/') { to }}
742
+ get '/'
743
+ assert_equal 'http://example.org/', body
744
+ end
745
+ end
746
+
694
747
  module ::HelperOne; def one; '1'; end; end
695
748
  module ::HelperTwo; def two; '2'; end; end
696
749
 
@@ -1,4 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
+
3
+ begin
2
4
  require 'less'
3
5
 
4
6
  class LessTest < Test::Unit::TestCase
@@ -59,3 +61,7 @@ class LessTest < Test::Unit::TestCase
59
61
  assert_raise(Errno::ENOENT) { get('/') }
60
62
  end
61
63
  end
64
+
65
+ rescue LoadError
66
+ warn "#{$!.to_s}: skipping less tests"
67
+ end
@@ -53,6 +53,7 @@ class LiquidTest < Test::Unit::TestCase
53
53
  assert_equal 'foo', body
54
54
  end
55
55
  end
56
- rescue
56
+
57
+ rescue LoadError
57
58
  warn "#{$!.to_s}: skipping liquid tests"
58
59
  end
@@ -74,6 +74,7 @@ class MarkabyTest < Test::Unit::TestCase
74
74
  assert_equal 'foo', body
75
75
  end
76
76
  end
77
- rescue
77
+
78
+ rescue LoadError
78
79
  warn "#{$!.to_s}: skipping markaby tests"
79
80
  end
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  begin
4
- fail "rdiscount not available" if defined? JRuby
4
+ fail LoadError, "rdiscount not available" if defined? JRuby
5
5
  require 'rdiscount'
6
6
 
7
7
  class MarkdownTest < Test::Unit::TestCase
@@ -30,6 +30,7 @@ class MarkdownTest < Test::Unit::TestCase
30
30
  assert_raise(Errno::ENOENT) { get('/') }
31
31
  end
32
32
  end
33
- rescue
33
+
34
+ rescue LoadError
34
35
  warn "#{$!.to_s}: skipping markdown tests"
35
36
  end
@@ -64,6 +64,7 @@ class NokogiriTest < Test::Unit::TestCase
64
64
  assert_raise(Errno::ENOENT) { get('/') }
65
65
  end
66
66
  end
67
- rescue
67
+
68
+ rescue LoadError
68
69
  warn "#{$!.to_s}: skipping nokogiri tests"
69
70
  end
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  begin
4
- fail 'Radius broken on 1.9.' if RUBY_VERSION >= '1.9.1'
4
+ fail LoadError, 'Radius broken on 1.9.' if RUBY_VERSION >= '1.9.1'
5
5
  require 'radius'
6
6
 
7
7
  class RadiusTest < Test::Unit::TestCase
@@ -54,6 +54,7 @@ class RadiusTest < Test::Unit::TestCase
54
54
  assert_equal 'foo', body
55
55
  end
56
56
  end
57
- rescue
57
+
58
+ rescue LoadError
58
59
  warn "#{$!.to_s}: skipping radius tests"
59
60
  end
@@ -29,6 +29,7 @@ class RdocTest < Test::Unit::TestCase
29
29
  assert_raise(Errno::ENOENT) { get('/') }
30
30
  end
31
31
  end
32
- rescue
32
+
33
+ rescue LoadError
33
34
  warn "#{$!.to_s}: skipping rdoc tests"
34
35
  end
@@ -179,6 +179,38 @@ class RoutingTest < Test::Unit::TestCase
179
179
  assert_equal "foo=;bar=", body
180
180
  end
181
181
 
182
+ it "supports named captures like %r{/hello/(?<person>[^/?#]+)} on Ruby >= 1.9" do
183
+ next if RUBY_VERSION < '1.9'
184
+ mock_app {
185
+ get Regexp.new('/hello/(?<person>[^/?#]+)') do
186
+ "Hello #{params['person']}"
187
+ end
188
+ }
189
+ get '/hello/Frank'
190
+ assert_equal 'Hello Frank', body
191
+ end
192
+
193
+ it "supports optional named captures like %r{/page(?<format>.[^/?#]+)?} on Ruby >= 1.9" do
194
+ next if RUBY_VERSION < '1.9'
195
+ mock_app {
196
+ get Regexp.new('/page(?<format>.[^/?#]+)?') do
197
+ "format=#{params[:format]}"
198
+ end
199
+ }
200
+
201
+ get '/page.html'
202
+ assert ok?
203
+ assert_equal "format=.html", body
204
+
205
+ get '/page.xml'
206
+ assert ok?
207
+ assert_equal "format=.xml", body
208
+
209
+ get '/page'
210
+ assert ok?
211
+ assert_equal "format=", body
212
+ end
213
+
182
214
  it "supports single splat params like /*" do
183
215
  mock_app {
184
216
  get '/*' do
@@ -247,7 +279,7 @@ class RoutingTest < Test::Unit::TestCase
247
279
  assert_equal 'right on', body
248
280
  end
249
281
 
250
- it "literally matches . in paths" do
282
+ it "literally matches dot in paths" do
251
283
  route_def '/test.bar'
252
284
 
253
285
  get '/test.bar'
@@ -256,14 +288,14 @@ class RoutingTest < Test::Unit::TestCase
256
288
  assert not_found?
257
289
  end
258
290
 
259
- it "literally matches $ in paths" do
291
+ it "literally matches dollar sign in paths" do
260
292
  route_def '/test$/'
261
293
 
262
294
  get '/test$/'
263
295
  assert ok?
264
296
  end
265
297
 
266
- it "literally matches + in paths" do
298
+ it "literally matches plus sign in paths" do
267
299
  route_def '/te+st/'
268
300
 
269
301
  get '/te%2Bst/'
@@ -272,7 +304,7 @@ class RoutingTest < Test::Unit::TestCase
272
304
  assert not_found?
273
305
  end
274
306
 
275
- it "literally matches () in paths" do
307
+ it "literally matches parens in paths" do
276
308
  route_def '/test(bar)/'
277
309
 
278
310
  get '/test(bar)/'
@@ -611,6 +643,18 @@ class RoutingTest < Test::Unit::TestCase
611
643
  assert_equal 'Hello World', body
612
644
  end
613
645
 
646
+ it "treats missing user agent like an empty string" do
647
+ mock_app do
648
+ user_agent(/.*/)
649
+ get '/' do
650
+ "Hello World"
651
+ end
652
+ end
653
+ get '/'
654
+ assert_equal 200, status
655
+ assert_equal 'Hello World', body
656
+ end
657
+
614
658
  it "makes captures in user agent pattern available in params[:agent]" do
615
659
  mock_app {
616
660
  user_agent(/Foo (.*)/)
@@ -636,7 +680,7 @@ class RoutingTest < Test::Unit::TestCase
636
680
  get '/', {}, { 'HTTP_ACCEPT' => 'application/xml' }
637
681
  assert ok?
638
682
  assert_equal 'application/xml', body
639
- assert_equal 'application/xml', response.headers['Content-Type']
683
+ assert_equal 'application/xml;charset=utf-8', response.headers['Content-Type']
640
684
 
641
685
  get '/', {}, { :accept => 'text/html' }
642
686
  assert !ok?
@@ -110,6 +110,6 @@ class SassTest < Test::Unit::TestCase
110
110
  end
111
111
  end
112
112
 
113
- rescue
113
+ rescue LoadError
114
114
  warn "#{$!.to_s}: skipping sass tests"
115
115
  end
@@ -83,6 +83,6 @@ class ScssTest < Test::Unit::TestCase
83
83
  end
84
84
  end
85
85
 
86
- rescue
86
+ rescue LoadError
87
87
  warn "#{$!.to_s}: skipping scss tests"
88
88
  end
@@ -92,6 +92,7 @@ class SlimTest < Test::Unit::TestCase
92
92
  assert_equal "<!DOCTYPE html><h1 class=\"header\">Hello World</h1>", body
93
93
  end
94
94
  end
95
- rescue
95
+
96
+ rescue LoadError
96
97
  warn "#{$!.to_s}: skipping slim tests"
97
98
  end
@@ -223,6 +223,49 @@ class TemplatesTest < Test::Unit::TestCase
223
223
  end
224
224
  assert_equal "Hello <%= 'World' %>!", body
225
225
  end
226
+
227
+ it "is possible to register another template" do
228
+ Tilt.register "html.erb", Tilt[:erb]
229
+ render_app { render :erb, :calc }
230
+ assert_equal '2', body
231
+ end
232
+
233
+ it "passes scope to the template" do
234
+ mock_app do
235
+ template :scoped do
236
+ 'Hello <%= foo %>'
237
+ end
238
+
239
+ get '/' do
240
+ some_scope = Object.new
241
+ def some_scope.foo() 'World!' end
242
+ erb :scoped, :scope => some_scope
243
+ end
244
+ end
245
+
246
+ get '/'
247
+ assert ok?
248
+ assert_equal 'Hello World!', body
249
+ end
250
+
251
+ it "is possible to use custom logic for finding template files" do
252
+ mock_app do
253
+ set :views, ["a", "b"].map { |d| File.dirname(__FILE__) + '/views/' + d }
254
+ def find_template(views, name, engine, &block)
255
+ Array(views).each { |v| super(v, name, engine, &block) }
256
+ end
257
+
258
+ get('/:name') do
259
+ render :str, params[:name].to_sym
260
+ end
261
+ end
262
+
263
+ get '/in_a'
264
+ assert_body 'Gimme an A!'
265
+
266
+ get '/in_b'
267
+ assert_body 'Gimme a B!'
268
+ end
226
269
  end
227
270
 
228
271
  # __END__ : this is not the real end of the script.
@@ -29,6 +29,7 @@ class TextileTest < Test::Unit::TestCase
29
29
  assert_raise(Errno::ENOENT) { get('/') }
30
30
  end
31
31
  end
32
- rescue
32
+
33
+ rescue LoadError
33
34
  warn "#{$!.to_s}: skipping textile tests"
34
35
  end
@@ -0,0 +1 @@
1
+ Gimme an A!
@@ -0,0 +1 @@
1
+ Gimme a B!
@@ -0,0 +1 @@
1
+ <%= 1 + 1 %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra
3
3
  version: !ruby/object:Gem::Version
4
- hash: 42
5
- prerelease: true
4
+ hash: 3414817362724122558
5
+ prerelease: 6
6
6
  segments:
7
7
  - 1
8
8
  - 2
9
9
  - 0
10
- - a
11
- version: 1.2.0.a
10
+ - c
11
+ version: 1.2.0.c
12
12
  platform: ruby
13
13
  authors:
14
14
  - Blake Mizerany
@@ -19,7 +19,7 @@ autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
21
 
22
- date: 2010-12-25 00:00:00 +01:00
22
+ date: 2011-02-19 00:00:00 +01:00
23
23
  default_executable:
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency
@@ -43,33 +43,27 @@ dependencies:
43
43
  requirement: &id002 !ruby/object:Gem::Requirement
44
44
  none: false
45
45
  requirements:
46
- - - ~>
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- hash: 11
48
+ hash: 27
49
49
  segments:
50
50
  - 1
51
51
  - 2
52
- version: "1.2"
53
- type: :runtime
54
- version_requirements: *id002
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- prerelease: false
58
- requirement: &id003 !ruby/object:Gem::Requirement
59
- none: false
60
- requirements:
61
- - - ">="
52
+ - 2
53
+ version: 1.2.2
54
+ - - <
62
55
  - !ruby/object:Gem::Version
63
56
  hash: 3
64
57
  segments:
58
+ - 2
65
59
  - 0
66
- version: "0"
67
- type: :development
68
- version_requirements: *id003
60
+ version: "2.0"
61
+ type: :runtime
62
+ version_requirements: *id002
69
63
  - !ruby/object:Gem::Dependency
70
64
  name: shotgun
71
65
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
66
+ requirement: &id003 !ruby/object:Gem::Requirement
73
67
  none: false
74
68
  requirements:
75
69
  - - ~>
@@ -80,207 +74,7 @@ dependencies:
80
74
  - 6
81
75
  version: "0.6"
82
76
  type: :development
83
- version_requirements: *id004
84
- - !ruby/object:Gem::Dependency
85
- name: rack-test
86
- prerelease: false
87
- requirement: &id005 !ruby/object:Gem::Requirement
88
- none: false
89
- requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- hash: 7
93
- segments:
94
- - 0
95
- - 5
96
- - 6
97
- version: 0.5.6
98
- type: :development
99
- version_requirements: *id005
100
- - !ruby/object:Gem::Dependency
101
- name: haml
102
- prerelease: false
103
- requirement: &id006 !ruby/object:Gem::Requirement
104
- none: false
105
- requirements:
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- hash: 7
109
- segments:
110
- - 3
111
- - 0
112
- version: "3.0"
113
- type: :development
114
- version_requirements: *id006
115
- - !ruby/object:Gem::Dependency
116
- name: builder
117
- prerelease: false
118
- requirement: &id007 !ruby/object:Gem::Requirement
119
- none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- hash: 3
124
- segments:
125
- - 0
126
- version: "0"
127
- type: :development
128
- version_requirements: *id007
129
- - !ruby/object:Gem::Dependency
130
- name: erubis
131
- prerelease: false
132
- requirement: &id008 !ruby/object:Gem::Requirement
133
- none: false
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- hash: 3
138
- segments:
139
- - 0
140
- version: "0"
141
- type: :development
142
- version_requirements: *id008
143
- - !ruby/object:Gem::Dependency
144
- name: less
145
- prerelease: false
146
- requirement: &id009 !ruby/object:Gem::Requirement
147
- none: false
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- hash: 3
152
- segments:
153
- - 0
154
- version: "0"
155
- type: :development
156
- version_requirements: *id009
157
- - !ruby/object:Gem::Dependency
158
- name: liquid
159
- prerelease: false
160
- requirement: &id010 !ruby/object:Gem::Requirement
161
- none: false
162
- requirements:
163
- - - ">="
164
- - !ruby/object:Gem::Version
165
- hash: 3
166
- segments:
167
- - 0
168
- version: "0"
169
- type: :development
170
- version_requirements: *id010
171
- - !ruby/object:Gem::Dependency
172
- name: rdiscount
173
- prerelease: false
174
- requirement: &id011 !ruby/object:Gem::Requirement
175
- none: false
176
- requirements:
177
- - - ">="
178
- - !ruby/object:Gem::Version
179
- hash: 3
180
- segments:
181
- - 0
182
- version: "0"
183
- type: :development
184
- version_requirements: *id011
185
- - !ruby/object:Gem::Dependency
186
- name: RedCloth
187
- prerelease: false
188
- requirement: &id012 !ruby/object:Gem::Requirement
189
- none: false
190
- requirements:
191
- - - ">="
192
- - !ruby/object:Gem::Version
193
- hash: 3
194
- segments:
195
- - 0
196
- version: "0"
197
- type: :development
198
- version_requirements: *id012
199
- - !ruby/object:Gem::Dependency
200
- name: radius
201
- prerelease: false
202
- requirement: &id013 !ruby/object:Gem::Requirement
203
- none: false
204
- requirements:
205
- - - ">="
206
- - !ruby/object:Gem::Version
207
- hash: 3
208
- segments:
209
- - 0
210
- version: "0"
211
- type: :development
212
- version_requirements: *id013
213
- - !ruby/object:Gem::Dependency
214
- name: markaby
215
- prerelease: false
216
- requirement: &id014 !ruby/object:Gem::Requirement
217
- none: false
218
- requirements:
219
- - - ">="
220
- - !ruby/object:Gem::Version
221
- hash: 3
222
- segments:
223
- - 0
224
- version: "0"
225
- type: :development
226
- version_requirements: *id014
227
- - !ruby/object:Gem::Dependency
228
- name: coffee-script
229
- prerelease: false
230
- requirement: &id015 !ruby/object:Gem::Requirement
231
- none: false
232
- requirements:
233
- - - ">="
234
- - !ruby/object:Gem::Version
235
- hash: 3
236
- segments:
237
- - 2
238
- - 0
239
- version: "2.0"
240
- type: :development
241
- version_requirements: *id015
242
- - !ruby/object:Gem::Dependency
243
- name: rdoc
244
- prerelease: false
245
- requirement: &id016 !ruby/object:Gem::Requirement
246
- none: false
247
- requirements:
248
- - - ">="
249
- - !ruby/object:Gem::Version
250
- hash: 3
251
- segments:
252
- - 0
253
- version: "0"
254
- type: :development
255
- version_requirements: *id016
256
- - !ruby/object:Gem::Dependency
257
- name: nokogiri
258
- prerelease: false
259
- requirement: &id017 !ruby/object:Gem::Requirement
260
- none: false
261
- requirements:
262
- - - ">="
263
- - !ruby/object:Gem::Version
264
- hash: 3
265
- segments:
266
- - 0
267
- version: "0"
268
- type: :development
269
- version_requirements: *id017
270
- - !ruby/object:Gem::Dependency
271
- name: slim
272
- prerelease: false
273
- requirement: &id018 !ruby/object:Gem::Requirement
274
- none: false
275
- requirements:
276
- - - ">="
277
- - !ruby/object:Gem::Version
278
- hash: 3
279
- segments:
280
- - 0
281
- version: "0"
282
- type: :development
283
- version_requirements: *id018
77
+ version_requirements: *id003
284
78
  description: Classy web-development dressed in a DSL
285
79
  email: sinatrarb@googlegroups.com
286
80
  executables: []
@@ -299,6 +93,8 @@ extra_rdoc_files:
299
93
  files:
300
94
  - AUTHORS
301
95
  - CHANGES
96
+ - Gemfile
97
+ - Gemfile.lock
302
98
  - LICENSE
303
99
  - README.de.rdoc
304
100
  - README.es.rdoc
@@ -354,7 +150,10 @@ files:
354
150
  - test/static_test.rb
355
151
  - test/templates_test.rb
356
152
  - test/textile_test.rb
153
+ - test/views/a/in_a.str
357
154
  - test/views/ascii.haml
155
+ - test/views/b/in_b.str
156
+ - test/views/calc.html.erb
358
157
  - test/views/error.builder
359
158
  - test/views/error.erb
360
159
  - test/views/error.erubis
@@ -430,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
430
229
  requirements: []
431
230
 
432
231
  rubyforge_project: sinatra
433
- rubygems_version: 1.3.7
232
+ rubygems_version: 1.5.2
434
233
  signing_key:
435
234
  specification_version: 2
436
235
  summary: Classy web-development dressed in a DSL