sinatra 1.0.a → 1.0.b
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.
- data/CHANGES +59 -21
- data/README.rdoc +21 -7
- data/Rakefile +11 -8
- data/lib/sinatra/base.rb +51 -24
- data/lib/sinatra/main.rb +1 -1
- data/lib/sinatra/tilt.rb +368 -131
- data/sinatra.gemspec +5 -2
- data/test/helpers_test.rb +9 -0
- data/test/less_test.rb +37 -0
- data/test/mapped_error_test.rb +13 -2
- data/test/server_test.rb +1 -1
- data/test/settings_test.rb +47 -16
- data/test/templates_test.rb +14 -10
- data/test/views/hello.less +5 -0
- metadata +71 -28
data/sinatra.gemspec
CHANGED
@@ -3,8 +3,8 @@ Gem::Specification.new do |s|
|
|
3
3
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
4
4
|
|
5
5
|
s.name = 'sinatra'
|
6
|
-
s.version = '1.0.
|
7
|
-
s.date = '2010-
|
6
|
+
s.version = '1.0.b'
|
7
|
+
s.date = '2010-03-07'
|
8
8
|
|
9
9
|
s.description = "Classy web-development dressed in a DSL"
|
10
10
|
s.summary = "Classy web-development dressed in a DSL"
|
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
|
|
38
38
|
test/haml_test.rb
|
39
39
|
test/helper.rb
|
40
40
|
test/helpers_test.rb
|
41
|
+
test/less_test.rb
|
41
42
|
test/mapped_error_test.rb
|
42
43
|
test/middleware_test.rb
|
43
44
|
test/public/favicon.ico
|
@@ -62,6 +63,7 @@ Gem::Specification.new do |s|
|
|
62
63
|
test/views/hello.erb
|
63
64
|
test/views/hello.erubis
|
64
65
|
test/views/hello.haml
|
66
|
+
test/views/hello.less
|
65
67
|
test/views/hello.sass
|
66
68
|
test/views/hello.test
|
67
69
|
test/views/layout2.builder
|
@@ -81,6 +83,7 @@ Gem::Specification.new do |s|
|
|
81
83
|
s.add_development_dependency 'haml'
|
82
84
|
s.add_development_dependency 'builder'
|
83
85
|
s.add_development_dependency 'erubis'
|
86
|
+
s.add_development_dependency 'less'
|
84
87
|
|
85
88
|
s.has_rdoc = true
|
86
89
|
s.homepage = "http://sinatra.rubyforge.org"
|
data/test/helpers_test.rb
CHANGED
@@ -451,6 +451,15 @@ class HelpersTest < Test::Unit::TestCase
|
|
451
451
|
assert_equal 304, status
|
452
452
|
assert_equal '', body
|
453
453
|
end
|
454
|
+
|
455
|
+
it 'ignores nil' do
|
456
|
+
mock_app {
|
457
|
+
get '/' do last_modified nil; 200; end
|
458
|
+
}
|
459
|
+
|
460
|
+
get '/'
|
461
|
+
assert ! response['Last-Modified']
|
462
|
+
end
|
454
463
|
end
|
455
464
|
|
456
465
|
describe 'etag' do
|
data/test/less_test.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
require 'less'
|
3
|
+
|
4
|
+
class LessTest < Test::Unit::TestCase
|
5
|
+
def less_app(&block)
|
6
|
+
mock_app {
|
7
|
+
set :views, File.dirname(__FILE__) + '/views'
|
8
|
+
get '/', &block
|
9
|
+
}
|
10
|
+
get '/'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'renders inline Less strings' do
|
14
|
+
less_app { less "@white_color: #fff; #main { background-color: @white_color }"}
|
15
|
+
assert ok?
|
16
|
+
assert_equal "#main { background-color: #ffffff; }\n", body
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'renders .less files in views path' do
|
20
|
+
less_app { less :hello }
|
21
|
+
assert ok?
|
22
|
+
assert_equal "#main { background-color: #ffffff; }\n", body
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'ignores the layout option' do
|
26
|
+
less_app { less :hello, :layout => :layout2 }
|
27
|
+
assert ok?
|
28
|
+
assert_equal "#main { background-color: #ffffff; }\n", body
|
29
|
+
end
|
30
|
+
|
31
|
+
it "raises error if template not found" do
|
32
|
+
mock_app {
|
33
|
+
get('/') { less :no_such_template }
|
34
|
+
}
|
35
|
+
assert_raise(Errno::ENOENT) { get('/') }
|
36
|
+
end
|
37
|
+
end
|
data/test/mapped_error_test.rb
CHANGED
@@ -55,10 +55,9 @@ class MappedErrorTest < Test::Unit::TestCase
|
|
55
55
|
assert_equal 'looks good', body
|
56
56
|
end
|
57
57
|
|
58
|
-
it "raises
|
58
|
+
it "raises errors from the app when raise_errors set and no handler defined" do
|
59
59
|
mock_app {
|
60
60
|
set :raise_errors, true
|
61
|
-
error(FooError) { "she's not there." }
|
62
61
|
get '/' do
|
63
62
|
raise FooError
|
64
63
|
end
|
@@ -66,6 +65,18 @@ class MappedErrorTest < Test::Unit::TestCase
|
|
66
65
|
assert_raise(FooError) { get '/' }
|
67
66
|
end
|
68
67
|
|
68
|
+
it "calls error handlers before raising errors even when raise_errors is set" do
|
69
|
+
mock_app {
|
70
|
+
set :raise_errors, true
|
71
|
+
error(FooError) { "she's there." }
|
72
|
+
get '/' do
|
73
|
+
raise FooError
|
74
|
+
end
|
75
|
+
}
|
76
|
+
assert_nothing_raised { get '/' }
|
77
|
+
assert_equal 500, status
|
78
|
+
end
|
79
|
+
|
69
80
|
it "never raises Sinatra::NotFound beyond the application" do
|
70
81
|
mock_app {
|
71
82
|
set :raise_errors, true
|
data/test/server_test.rb
CHANGED
data/test/settings_test.rb
CHANGED
@@ -21,6 +21,19 @@ class SettingsTest < Test::Unit::TestCase
|
|
21
21
|
assert_equal 'baz', @base.foo
|
22
22
|
end
|
23
23
|
|
24
|
+
it 'sets settings using a block' do
|
25
|
+
@base.set(:foo){ 'baz' }
|
26
|
+
assert @base.respond_to?(:foo)
|
27
|
+
assert_equal 'baz', @base.foo
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'raises an error with a value and a block' do
|
31
|
+
assert_raise ArgumentError do
|
32
|
+
@base.set(:fiz, 'boom!'){ 'baz' }
|
33
|
+
end
|
34
|
+
assert !@base.respond_to?(:fiz)
|
35
|
+
end
|
36
|
+
|
24
37
|
it "sets multiple settings with a Hash" do
|
25
38
|
@base.set :foo => 1234,
|
26
39
|
:bar => 'Hello World',
|
@@ -93,28 +106,33 @@ class SettingsTest < Test::Unit::TestCase
|
|
93
106
|
assert !@base.bar
|
94
107
|
end
|
95
108
|
|
96
|
-
|
97
109
|
it 'is accessible from instances via #settings' do
|
98
110
|
assert_equal :foo, @base.new.settings.environment
|
99
111
|
end
|
100
112
|
|
101
113
|
describe 'methodoverride' do
|
102
114
|
it 'is disabled on Base' do
|
103
|
-
assert ! @base.
|
115
|
+
assert ! @base.method_override?
|
104
116
|
end
|
105
117
|
|
106
118
|
it 'is enabled on Application' do
|
107
|
-
assert @application.
|
119
|
+
assert @application.method_override?
|
108
120
|
end
|
109
121
|
|
110
122
|
it 'enables MethodOverride middleware' do
|
111
|
-
@base.set :
|
123
|
+
@base.set :method_override, true
|
112
124
|
@base.put('/') { 'okay' }
|
113
125
|
@app = @base
|
114
126
|
post '/', {'_method'=>'PUT'}, {}
|
115
127
|
assert_equal 200, status
|
116
128
|
assert_equal 'okay', body
|
117
129
|
end
|
130
|
+
|
131
|
+
it 'is backward compatible with methodoverride' do
|
132
|
+
assert ! @base.methodoverride?
|
133
|
+
@base.enable :methodoverride
|
134
|
+
assert @base.methodoverride?
|
135
|
+
end
|
118
136
|
end
|
119
137
|
|
120
138
|
describe 'clean_trace' do
|
@@ -177,10 +195,11 @@ class SettingsTest < Test::Unit::TestCase
|
|
177
195
|
end
|
178
196
|
|
179
197
|
describe 'raise_errors' do
|
180
|
-
it 'is enabled on Base
|
198
|
+
it 'is enabled on Base only in test' do
|
199
|
+
assert ! @base.raise_errors?
|
200
|
+
|
201
|
+
@base.set(:environment, :test)
|
181
202
|
assert @base.raise_errors?
|
182
|
-
@base.environment = :development
|
183
|
-
assert !@base.raise_errors?
|
184
203
|
end
|
185
204
|
|
186
205
|
it 'is enabled on Application only in test' do
|
@@ -223,20 +242,20 @@ class SettingsTest < Test::Unit::TestCase
|
|
223
242
|
end
|
224
243
|
|
225
244
|
describe 'dump_errors' do
|
226
|
-
it 'is disabled on Base
|
245
|
+
it 'is disabled on Base in test' do
|
246
|
+
@base.environment = :test
|
227
247
|
assert ! @base.dump_errors?
|
228
248
|
@base.environment = :development
|
229
249
|
assert @base.dump_errors?
|
230
|
-
|
231
|
-
|
232
|
-
it 'is enabled on Application' do
|
233
|
-
assert @application.dump_errors?
|
250
|
+
@base.environment = :production
|
251
|
+
assert @base.dump_errors?
|
234
252
|
end
|
235
253
|
|
236
254
|
it 'dumps exception with backtrace to rack.errors' do
|
237
255
|
klass = Sinatra.new(Sinatra::Application)
|
238
256
|
|
239
257
|
mock_app(klass) {
|
258
|
+
enable :dump_errors
|
240
259
|
disable :raise_errors
|
241
260
|
|
242
261
|
error do
|
@@ -296,15 +315,27 @@ class SettingsTest < Test::Unit::TestCase
|
|
296
315
|
assert @base.static?
|
297
316
|
end
|
298
317
|
|
299
|
-
it 'is
|
318
|
+
it 'is disabled on Application by default' do
|
319
|
+
assert ! @application.static?
|
320
|
+
end
|
321
|
+
|
322
|
+
it 'is enabled on Application when public is set and exists' do
|
323
|
+
@application.set :environment, :development
|
324
|
+
@application.set :public, File.dirname(__FILE__)
|
325
|
+
assert @application.static?
|
326
|
+
end
|
327
|
+
|
328
|
+
it 'is enabled on Application when root is set and root/public exists' do
|
329
|
+
@application.set :environment, :development
|
330
|
+
@application.set :root, File.dirname(__FILE__)
|
300
331
|
assert @application.static?
|
301
332
|
end
|
302
333
|
end
|
303
334
|
|
304
|
-
describe '
|
335
|
+
describe 'bind' do
|
305
336
|
it 'defaults to 0.0.0.0' do
|
306
|
-
assert_equal '0.0.0.0', @base.
|
307
|
-
assert_equal '0.0.0.0', @application.
|
337
|
+
assert_equal '0.0.0.0', @base.bind
|
338
|
+
assert_equal '0.0.0.0', @application.bind
|
308
339
|
end
|
309
340
|
end
|
310
341
|
|
data/test/templates_test.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/helper'
|
2
2
|
|
3
3
|
class TestTemplate < Tilt::Template
|
4
|
-
def
|
4
|
+
def prepare
|
5
5
|
end
|
6
|
+
alias compile! prepare # for tilt < 0.7
|
6
7
|
|
7
8
|
def evaluate(scope, locals={}, &block)
|
8
9
|
inner = block ? block.call : ''
|
@@ -76,21 +77,18 @@ class TemplatesTest < Test::Unit::TestCase
|
|
76
77
|
assert_equal "Layout 3!\nHello World!\n", body
|
77
78
|
end
|
78
79
|
|
79
|
-
it 'loads templates from source file
|
80
|
-
mock_app {
|
81
|
-
enable :inline_templates
|
82
|
-
}
|
80
|
+
it 'loads templates from source file' do
|
81
|
+
mock_app { enable :inline_templates }
|
83
82
|
assert_equal "this is foo\n\n", @app.templates[:foo][0]
|
84
83
|
assert_equal "X\n= yield\nX\n", @app.templates[:layout][0]
|
85
84
|
end
|
86
85
|
|
87
|
-
it 'loads templates from
|
88
|
-
|
89
|
-
|
90
|
-
assert_equal "from another views directory\n", body
|
86
|
+
it 'loads templates from given source file' do
|
87
|
+
mock_app { set :inline_templates, __FILE__ }
|
88
|
+
assert_equal "this is foo\n\n", @app.templates[:foo][0]
|
91
89
|
end
|
92
90
|
|
93
|
-
test '
|
91
|
+
test 'inline_templates ignores IO errors' do
|
94
92
|
assert_nothing_raised {
|
95
93
|
mock_app {
|
96
94
|
set :inline_templates, '/foo/bar'
|
@@ -100,6 +98,12 @@ class TemplatesTest < Test::Unit::TestCase
|
|
100
98
|
assert @app.templates.empty?
|
101
99
|
end
|
102
100
|
|
101
|
+
it 'loads templates from specified views directory' do
|
102
|
+
render_app { render :test, :hello, :views => options.views + '/foo' }
|
103
|
+
|
104
|
+
assert_equal "from another views directory\n", body
|
105
|
+
end
|
106
|
+
|
103
107
|
it 'passes locals to the layout' do
|
104
108
|
mock_app {
|
105
109
|
template :my_layout do
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: true
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- b
|
9
|
+
version: 1.0.b
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Blake Mizerany
|
@@ -11,72 +16,103 @@ autorequire:
|
|
11
16
|
bindir: bin
|
12
17
|
cert_chain: []
|
13
18
|
|
14
|
-
date: 2010-
|
19
|
+
date: 2010-03-07 00:00:00 -08:00
|
15
20
|
default_executable:
|
16
21
|
dependencies:
|
17
22
|
- !ruby/object:Gem::Dependency
|
18
23
|
name: rack
|
19
|
-
|
20
|
-
|
21
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
22
26
|
requirements:
|
23
27
|
- - ">="
|
24
28
|
- !ruby/object:Gem::Version
|
29
|
+
segments:
|
30
|
+
- 1
|
31
|
+
- 0
|
25
32
|
version: "1.0"
|
26
|
-
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
27
35
|
- !ruby/object:Gem::Dependency
|
28
36
|
name: shotgun
|
29
|
-
|
30
|
-
|
31
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
32
39
|
requirements:
|
33
40
|
- - ">="
|
34
41
|
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
- 6
|
35
45
|
version: "0.6"
|
36
46
|
- - <
|
37
47
|
- !ruby/object:Gem::Version
|
48
|
+
segments:
|
49
|
+
- 1
|
50
|
+
- 0
|
38
51
|
version: "1.0"
|
39
|
-
|
52
|
+
type: :development
|
53
|
+
version_requirements: *id002
|
40
54
|
- !ruby/object:Gem::Dependency
|
41
55
|
name: rack-test
|
42
|
-
|
43
|
-
|
44
|
-
version_requirements: !ruby/object:Gem::Requirement
|
56
|
+
prerelease: false
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
45
58
|
requirements:
|
46
59
|
- - ">="
|
47
60
|
- !ruby/object:Gem::Version
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
- 3
|
64
|
+
- 0
|
48
65
|
version: 0.3.0
|
49
|
-
|
66
|
+
type: :development
|
67
|
+
version_requirements: *id003
|
50
68
|
- !ruby/object:Gem::Dependency
|
51
69
|
name: haml
|
52
|
-
|
53
|
-
|
54
|
-
version_requirements: !ruby/object:Gem::Requirement
|
70
|
+
prerelease: false
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
55
72
|
requirements:
|
56
73
|
- - ">="
|
57
74
|
- !ruby/object:Gem::Version
|
75
|
+
segments:
|
76
|
+
- 0
|
58
77
|
version: "0"
|
59
|
-
|
78
|
+
type: :development
|
79
|
+
version_requirements: *id004
|
60
80
|
- !ruby/object:Gem::Dependency
|
61
81
|
name: builder
|
62
|
-
|
63
|
-
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
82
|
+
prerelease: false
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
65
84
|
requirements:
|
66
85
|
- - ">="
|
67
86
|
- !ruby/object:Gem::Version
|
87
|
+
segments:
|
88
|
+
- 0
|
68
89
|
version: "0"
|
69
|
-
|
90
|
+
type: :development
|
91
|
+
version_requirements: *id005
|
70
92
|
- !ruby/object:Gem::Dependency
|
71
93
|
name: erubis
|
94
|
+
prerelease: false
|
95
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
72
102
|
type: :development
|
73
|
-
|
74
|
-
|
103
|
+
version_requirements: *id006
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: less
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
75
108
|
requirements:
|
76
109
|
- - ">="
|
77
110
|
- !ruby/object:Gem::Version
|
111
|
+
segments:
|
112
|
+
- 0
|
78
113
|
version: "0"
|
79
|
-
|
114
|
+
type: :development
|
115
|
+
version_requirements: *id007
|
80
116
|
description: Classy web-development dressed in a DSL
|
81
117
|
email: sinatrarb@googlegroups.com
|
82
118
|
executables: []
|
@@ -111,6 +147,7 @@ files:
|
|
111
147
|
- test/haml_test.rb
|
112
148
|
- test/helper.rb
|
113
149
|
- test/helpers_test.rb
|
150
|
+
- test/less_test.rb
|
114
151
|
- test/mapped_error_test.rb
|
115
152
|
- test/middleware_test.rb
|
116
153
|
- test/public/favicon.ico
|
@@ -135,6 +172,7 @@ files:
|
|
135
172
|
- test/views/hello.erb
|
136
173
|
- test/views/hello.erubis
|
137
174
|
- test/views/hello.haml
|
175
|
+
- test/views/hello.less
|
138
176
|
- test/views/hello.sass
|
139
177
|
- test/views/hello.test
|
140
178
|
- test/views/layout2.builder
|
@@ -160,18 +198,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
198
|
requirements:
|
161
199
|
- - ">="
|
162
200
|
- !ruby/object:Gem::Version
|
201
|
+
segments:
|
202
|
+
- 0
|
163
203
|
version: "0"
|
164
|
-
version:
|
165
204
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
205
|
requirements:
|
167
206
|
- - ">"
|
168
207
|
- !ruby/object:Gem::Version
|
208
|
+
segments:
|
209
|
+
- 1
|
210
|
+
- 3
|
211
|
+
- 1
|
169
212
|
version: 1.3.1
|
170
|
-
version:
|
171
213
|
requirements: []
|
172
214
|
|
173
215
|
rubyforge_project: sinatra
|
174
|
-
rubygems_version: 1.3.
|
216
|
+
rubygems_version: 1.3.6
|
175
217
|
signing_key:
|
176
218
|
specification_version: 2
|
177
219
|
summary: Classy web-development dressed in a DSL
|
@@ -184,6 +226,7 @@ test_files:
|
|
184
226
|
- test/filter_test.rb
|
185
227
|
- test/haml_test.rb
|
186
228
|
- test/helpers_test.rb
|
229
|
+
- test/less_test.rb
|
187
230
|
- test/mapped_error_test.rb
|
188
231
|
- test/middleware_test.rb
|
189
232
|
- test/request_test.rb
|