sinatra 1.4.8 → 2.1.0
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.
- checksums.yaml +5 -5
- data/AUTHORS.md +1 -0
- data/CHANGELOG.md +272 -54
- data/CONTRIBUTING.md +8 -8
- data/Gemfile +48 -47
- data/LICENSE +4 -1
- data/MAINTENANCE.md +42 -0
- data/README.de.md +651 -443
- data/README.es.md +738 -357
- data/README.fr.md +197 -100
- data/README.hu.md +40 -6
- data/README.ja.md +125 -67
- data/README.ko.md +15 -15
- data/README.malayalam.md +3141 -0
- data/README.md +592 -432
- data/README.pt-br.md +2362 -335
- data/README.pt-pt.md +5 -5
- data/README.ru.md +857 -608
- data/README.zh.md +91 -29
- data/Rakefile +77 -51
- data/SECURITY.md +35 -0
- data/VERSION +1 -0
- data/examples/chat.rb +2 -1
- data/examples/rainbows.conf +3 -0
- data/examples/rainbows.rb +20 -0
- data/examples/stream.ru +4 -4
- data/lib/sinatra/base.rb +243 -265
- data/lib/sinatra/indifferent_hash.rb +200 -0
- data/lib/sinatra/main.rb +30 -10
- data/lib/sinatra/show_exceptions.rb +67 -62
- data/lib/sinatra/version.rb +1 -1
- data/sinatra.gemspec +44 -8
- metadata +43 -167
- data/lib/sinatra/ext.rb +0 -17
- data/test/asciidoctor_test.rb +0 -72
- data/test/base_test.rb +0 -167
- data/test/builder_test.rb +0 -91
- data/test/coffee_test.rb +0 -96
- data/test/compile_test.rb +0 -183
- data/test/contest.rb +0 -91
- data/test/creole_test.rb +0 -65
- data/test/delegator_test.rb +0 -160
- data/test/encoding_test.rb +0 -20
- data/test/erb_test.rb +0 -116
- data/test/extensions_test.rb +0 -98
- data/test/filter_test.rb +0 -487
- data/test/haml_test.rb +0 -109
- data/test/helper.rb +0 -132
- data/test/helpers_test.rb +0 -1917
- data/test/integration/app.rb +0 -79
- data/test/integration_helper.rb +0 -236
- data/test/integration_test.rb +0 -104
- data/test/less_test.rb +0 -69
- data/test/liquid_test.rb +0 -77
- data/test/mapped_error_test.rb +0 -285
- data/test/markaby_test.rb +0 -80
- data/test/markdown_test.rb +0 -85
- data/test/mediawiki_test.rb +0 -68
- data/test/middleware_test.rb +0 -68
- data/test/nokogiri_test.rb +0 -67
- data/test/public/favicon.ico +0 -0
- data/test/public/hello+world.txt +0 -1
- data/test/rabl_test.rb +0 -89
- data/test/rack_test.rb +0 -45
- data/test/radius_test.rb +0 -59
- data/test/rdoc_test.rb +0 -66
- data/test/readme_test.rb +0 -130
- data/test/request_test.rb +0 -100
- data/test/response_test.rb +0 -63
- data/test/result_test.rb +0 -76
- data/test/route_added_hook_test.rb +0 -59
- data/test/routing_test.rb +0 -1456
- data/test/sass_test.rb +0 -115
- data/test/scss_test.rb +0 -88
- data/test/server_test.rb +0 -56
- data/test/settings_test.rb +0 -582
- data/test/sinatra_test.rb +0 -12
- data/test/slim_test.rb +0 -102
- data/test/static_test.rb +0 -266
- data/test/streaming_test.rb +0 -149
- data/test/stylus_test.rb +0 -90
- data/test/templates_test.rb +0 -382
- data/test/textile_test.rb +0 -65
- data/test/views/a/in_a.str +0 -1
- data/test/views/ascii.erb +0 -2
- data/test/views/b/in_b.str +0 -1
- data/test/views/calc.html.erb +0 -1
- data/test/views/error.builder +0 -3
- data/test/views/error.erb +0 -3
- data/test/views/error.haml +0 -3
- data/test/views/error.sass +0 -2
- data/test/views/explicitly_nested.str +0 -1
- data/test/views/foo/hello.test +0 -1
- data/test/views/hello.asciidoc +0 -1
- data/test/views/hello.builder +0 -1
- data/test/views/hello.coffee +0 -1
- data/test/views/hello.creole +0 -1
- data/test/views/hello.erb +0 -1
- data/test/views/hello.haml +0 -1
- data/test/views/hello.less +0 -5
- data/test/views/hello.liquid +0 -1
- data/test/views/hello.mab +0 -1
- data/test/views/hello.md +0 -1
- data/test/views/hello.mediawiki +0 -1
- data/test/views/hello.nokogiri +0 -1
- data/test/views/hello.rabl +0 -2
- data/test/views/hello.radius +0 -1
- data/test/views/hello.rdoc +0 -1
- data/test/views/hello.sass +0 -2
- data/test/views/hello.scss +0 -3
- data/test/views/hello.slim +0 -1
- data/test/views/hello.str +0 -1
- data/test/views/hello.styl +0 -2
- data/test/views/hello.test +0 -1
- data/test/views/hello.textile +0 -1
- data/test/views/hello.wlang +0 -1
- data/test/views/hello.yajl +0 -1
- data/test/views/layout2.builder +0 -3
- data/test/views/layout2.erb +0 -2
- data/test/views/layout2.haml +0 -2
- data/test/views/layout2.liquid +0 -2
- data/test/views/layout2.mab +0 -2
- data/test/views/layout2.nokogiri +0 -3
- data/test/views/layout2.rabl +0 -3
- data/test/views/layout2.radius +0 -2
- data/test/views/layout2.slim +0 -3
- data/test/views/layout2.str +0 -2
- data/test/views/layout2.test +0 -1
- data/test/views/layout2.wlang +0 -2
- data/test/views/nested.str +0 -1
- data/test/views/utf8.erb +0 -2
- data/test/wlang_test.rb +0 -87
- data/test/yajl_test.rb +0 -86
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Mizerany
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2020-09-04 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rack
|
@@ -19,48 +19,56 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - "~>"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '2.2'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '2.2'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: tilt
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
|
-
- - "
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: '1.3'
|
37
|
-
- - "<"
|
34
|
+
- - "~>"
|
38
35
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
36
|
+
version: '2.0'
|
40
37
|
type: :runtime
|
41
38
|
prerelease: false
|
42
39
|
version_requirements: !ruby/object:Gem::Requirement
|
43
40
|
requirements:
|
44
|
-
- - "
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '1.3'
|
47
|
-
- - "<"
|
41
|
+
- - "~>"
|
48
42
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
43
|
+
version: '2.0'
|
50
44
|
- !ruby/object:Gem::Dependency
|
51
45
|
name: rack-protection
|
46
|
+
requirement: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - '='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 2.1.0
|
51
|
+
type: :runtime
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - '='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 2.1.0
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: mustermann
|
52
60
|
requirement: !ruby/object:Gem::Requirement
|
53
61
|
requirements:
|
54
62
|
- - "~>"
|
55
63
|
- !ruby/object:Gem::Version
|
56
|
-
version: '1.
|
64
|
+
version: '1.0'
|
57
65
|
type: :runtime
|
58
66
|
prerelease: false
|
59
67
|
version_requirements: !ruby/object:Gem::Requirement
|
60
68
|
requirements:
|
61
69
|
- - "~>"
|
62
70
|
- !ruby/object:Gem::Version
|
63
|
-
version: '1.
|
71
|
+
version: '1.0'
|
64
72
|
description: Sinatra is a DSL for quickly creating web applications in Ruby with minimal
|
65
73
|
effort.
|
66
74
|
email: sinatrarb@googlegroups.com
|
@@ -73,6 +81,7 @@ extra_rdoc_files:
|
|
73
81
|
- README.hu.md
|
74
82
|
- README.ja.md
|
75
83
|
- README.ko.md
|
84
|
+
- README.malayalam.md
|
76
85
|
- README.md
|
77
86
|
- README.pt-br.md
|
78
87
|
- README.pt-pt.md
|
@@ -86,133 +95,46 @@ files:
|
|
86
95
|
- CONTRIBUTING.md
|
87
96
|
- Gemfile
|
88
97
|
- LICENSE
|
98
|
+
- MAINTENANCE.md
|
89
99
|
- README.de.md
|
90
100
|
- README.es.md
|
91
101
|
- README.fr.md
|
92
102
|
- README.hu.md
|
93
103
|
- README.ja.md
|
94
104
|
- README.ko.md
|
105
|
+
- README.malayalam.md
|
95
106
|
- README.md
|
96
107
|
- README.pt-br.md
|
97
108
|
- README.pt-pt.md
|
98
109
|
- README.ru.md
|
99
110
|
- README.zh.md
|
100
111
|
- Rakefile
|
112
|
+
- SECURITY.md
|
113
|
+
- VERSION
|
101
114
|
- examples/chat.rb
|
115
|
+
- examples/rainbows.conf
|
116
|
+
- examples/rainbows.rb
|
102
117
|
- examples/simple.rb
|
103
118
|
- examples/stream.ru
|
104
119
|
- lib/sinatra.rb
|
105
120
|
- lib/sinatra/base.rb
|
106
|
-
- lib/sinatra/ext.rb
|
107
121
|
- lib/sinatra/images/404.png
|
108
122
|
- lib/sinatra/images/500.png
|
123
|
+
- lib/sinatra/indifferent_hash.rb
|
109
124
|
- lib/sinatra/main.rb
|
110
125
|
- lib/sinatra/show_exceptions.rb
|
111
126
|
- lib/sinatra/version.rb
|
112
127
|
- sinatra.gemspec
|
113
|
-
|
114
|
-
- test/base_test.rb
|
115
|
-
- test/builder_test.rb
|
116
|
-
- test/coffee_test.rb
|
117
|
-
- test/compile_test.rb
|
118
|
-
- test/contest.rb
|
119
|
-
- test/creole_test.rb
|
120
|
-
- test/delegator_test.rb
|
121
|
-
- test/encoding_test.rb
|
122
|
-
- test/erb_test.rb
|
123
|
-
- test/extensions_test.rb
|
124
|
-
- test/filter_test.rb
|
125
|
-
- test/haml_test.rb
|
126
|
-
- test/helper.rb
|
127
|
-
- test/helpers_test.rb
|
128
|
-
- test/integration/app.rb
|
129
|
-
- test/integration_helper.rb
|
130
|
-
- test/integration_test.rb
|
131
|
-
- test/less_test.rb
|
132
|
-
- test/liquid_test.rb
|
133
|
-
- test/mapped_error_test.rb
|
134
|
-
- test/markaby_test.rb
|
135
|
-
- test/markdown_test.rb
|
136
|
-
- test/mediawiki_test.rb
|
137
|
-
- test/middleware_test.rb
|
138
|
-
- test/nokogiri_test.rb
|
139
|
-
- test/public/favicon.ico
|
140
|
-
- test/public/hello+world.txt
|
141
|
-
- test/rabl_test.rb
|
142
|
-
- test/rack_test.rb
|
143
|
-
- test/radius_test.rb
|
144
|
-
- test/rdoc_test.rb
|
145
|
-
- test/readme_test.rb
|
146
|
-
- test/request_test.rb
|
147
|
-
- test/response_test.rb
|
148
|
-
- test/result_test.rb
|
149
|
-
- test/route_added_hook_test.rb
|
150
|
-
- test/routing_test.rb
|
151
|
-
- test/sass_test.rb
|
152
|
-
- test/scss_test.rb
|
153
|
-
- test/server_test.rb
|
154
|
-
- test/settings_test.rb
|
155
|
-
- test/sinatra_test.rb
|
156
|
-
- test/slim_test.rb
|
157
|
-
- test/static_test.rb
|
158
|
-
- test/streaming_test.rb
|
159
|
-
- test/stylus_test.rb
|
160
|
-
- test/templates_test.rb
|
161
|
-
- test/textile_test.rb
|
162
|
-
- test/views/a/in_a.str
|
163
|
-
- test/views/ascii.erb
|
164
|
-
- test/views/b/in_b.str
|
165
|
-
- test/views/calc.html.erb
|
166
|
-
- test/views/error.builder
|
167
|
-
- test/views/error.erb
|
168
|
-
- test/views/error.haml
|
169
|
-
- test/views/error.sass
|
170
|
-
- test/views/explicitly_nested.str
|
171
|
-
- test/views/foo/hello.test
|
172
|
-
- test/views/hello.asciidoc
|
173
|
-
- test/views/hello.builder
|
174
|
-
- test/views/hello.coffee
|
175
|
-
- test/views/hello.creole
|
176
|
-
- test/views/hello.erb
|
177
|
-
- test/views/hello.haml
|
178
|
-
- test/views/hello.less
|
179
|
-
- test/views/hello.liquid
|
180
|
-
- test/views/hello.mab
|
181
|
-
- test/views/hello.md
|
182
|
-
- test/views/hello.mediawiki
|
183
|
-
- test/views/hello.nokogiri
|
184
|
-
- test/views/hello.rabl
|
185
|
-
- test/views/hello.radius
|
186
|
-
- test/views/hello.rdoc
|
187
|
-
- test/views/hello.sass
|
188
|
-
- test/views/hello.scss
|
189
|
-
- test/views/hello.slim
|
190
|
-
- test/views/hello.str
|
191
|
-
- test/views/hello.styl
|
192
|
-
- test/views/hello.test
|
193
|
-
- test/views/hello.textile
|
194
|
-
- test/views/hello.wlang
|
195
|
-
- test/views/hello.yajl
|
196
|
-
- test/views/layout2.builder
|
197
|
-
- test/views/layout2.erb
|
198
|
-
- test/views/layout2.haml
|
199
|
-
- test/views/layout2.liquid
|
200
|
-
- test/views/layout2.mab
|
201
|
-
- test/views/layout2.nokogiri
|
202
|
-
- test/views/layout2.rabl
|
203
|
-
- test/views/layout2.radius
|
204
|
-
- test/views/layout2.slim
|
205
|
-
- test/views/layout2.str
|
206
|
-
- test/views/layout2.test
|
207
|
-
- test/views/layout2.wlang
|
208
|
-
- test/views/nested.str
|
209
|
-
- test/views/utf8.erb
|
210
|
-
- test/wlang_test.rb
|
211
|
-
- test/yajl_test.rb
|
212
|
-
homepage: http://www.sinatrarb.com/
|
128
|
+
homepage: http://sinatrarb.com/
|
213
129
|
licenses:
|
214
130
|
- MIT
|
215
|
-
metadata:
|
131
|
+
metadata:
|
132
|
+
source_code_uri: https://github.com/sinatra/sinatra
|
133
|
+
changelog_uri: https://github.com/sinatra/sinatra/blob/master/CHANGELOG.md
|
134
|
+
homepage_uri: http://sinatrarb.com/
|
135
|
+
bug_tracker_uri: https://github.com/sinatra/sinatra/issues
|
136
|
+
mailing_list_uri: http://groups.google.com/group/sinatrarb
|
137
|
+
documentation_uri: https://www.rubydoc.info/gems/sinatra
|
216
138
|
post_install_message:
|
217
139
|
rdoc_options:
|
218
140
|
- "--line-numbers"
|
@@ -228,61 +150,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
228
150
|
requirements:
|
229
151
|
- - ">="
|
230
152
|
- !ruby/object:Gem::Version
|
231
|
-
version:
|
153
|
+
version: 2.3.0
|
232
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
233
155
|
requirements:
|
234
156
|
- - ">="
|
235
157
|
- !ruby/object:Gem::Version
|
236
158
|
version: '0'
|
237
159
|
requirements: []
|
238
|
-
|
239
|
-
rubygems_version: 2.6.8
|
160
|
+
rubygems_version: 3.1.2
|
240
161
|
signing_key:
|
241
162
|
specification_version: 4
|
242
163
|
summary: Classy web-development dressed in a DSL
|
243
|
-
test_files:
|
244
|
-
- test/asciidoctor_test.rb
|
245
|
-
- test/base_test.rb
|
246
|
-
- test/builder_test.rb
|
247
|
-
- test/coffee_test.rb
|
248
|
-
- test/compile_test.rb
|
249
|
-
- test/creole_test.rb
|
250
|
-
- test/delegator_test.rb
|
251
|
-
- test/encoding_test.rb
|
252
|
-
- test/erb_test.rb
|
253
|
-
- test/extensions_test.rb
|
254
|
-
- test/filter_test.rb
|
255
|
-
- test/haml_test.rb
|
256
|
-
- test/helpers_test.rb
|
257
|
-
- test/integration_test.rb
|
258
|
-
- test/less_test.rb
|
259
|
-
- test/liquid_test.rb
|
260
|
-
- test/mapped_error_test.rb
|
261
|
-
- test/markaby_test.rb
|
262
|
-
- test/markdown_test.rb
|
263
|
-
- test/mediawiki_test.rb
|
264
|
-
- test/middleware_test.rb
|
265
|
-
- test/nokogiri_test.rb
|
266
|
-
- test/rabl_test.rb
|
267
|
-
- test/rack_test.rb
|
268
|
-
- test/radius_test.rb
|
269
|
-
- test/rdoc_test.rb
|
270
|
-
- test/readme_test.rb
|
271
|
-
- test/request_test.rb
|
272
|
-
- test/response_test.rb
|
273
|
-
- test/result_test.rb
|
274
|
-
- test/route_added_hook_test.rb
|
275
|
-
- test/routing_test.rb
|
276
|
-
- test/sass_test.rb
|
277
|
-
- test/scss_test.rb
|
278
|
-
- test/server_test.rb
|
279
|
-
- test/settings_test.rb
|
280
|
-
- test/sinatra_test.rb
|
281
|
-
- test/slim_test.rb
|
282
|
-
- test/static_test.rb
|
283
|
-
- test/streaming_test.rb
|
284
|
-
- test/stylus_test.rb
|
285
|
-
- test/templates_test.rb
|
286
|
-
- test/textile_test.rb
|
287
|
-
- test/wlang_test.rb
|
288
|
-
- test/yajl_test.rb
|
164
|
+
test_files: []
|
data/lib/sinatra/ext.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
# This can be removed once rack/rack@2fd9df71 is released
|
2
|
-
module Sinatra
|
3
|
-
module Ext
|
4
|
-
def self.get_handler(str)
|
5
|
-
begin
|
6
|
-
::Object.const_get("Object", false)
|
7
|
-
def self._const_get(str, inherit = true)
|
8
|
-
Rack::Handler.const_get(str, inherit)
|
9
|
-
end
|
10
|
-
rescue
|
11
|
-
def self._const_get(str, inherit = true)
|
12
|
-
Rack::Handler.const_get(str)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/test/asciidoctor_test.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
require File.expand_path('../helper', __FILE__)
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'asciidoctor'
|
5
|
-
|
6
|
-
class AsciidoctorTest < Minitest::Test
|
7
|
-
def asciidoc_app(&block)
|
8
|
-
mock_app do
|
9
|
-
set :views, File.dirname(__FILE__) + '/views'
|
10
|
-
get('/', &block)
|
11
|
-
end
|
12
|
-
get '/'
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'renders inline AsciiDoc strings' do
|
16
|
-
asciidoc_app { asciidoc '== Hiya' }
|
17
|
-
assert ok?
|
18
|
-
assert_match %r{<h2.*?>Hiya</h2>}, body
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'uses the correct engine' do
|
22
|
-
engine = Tilt::AsciidoctorTemplate
|
23
|
-
assert_equal engine, Tilt[:ad]
|
24
|
-
assert_equal engine, Tilt[:adoc]
|
25
|
-
assert_equal engine, Tilt[:asciidoc]
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'renders .asciidoc files in views path' do
|
29
|
-
asciidoc_app { asciidoc :hello }
|
30
|
-
assert ok?
|
31
|
-
assert_match %r{<h2.*?>Hello from AsciiDoc</h2>}, body
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'raises error if template not found' do
|
35
|
-
mock_app { get('/') { asciidoc :no_such_template } }
|
36
|
-
assert_raises(Errno::ENOENT) { get('/') }
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'renders with inline layouts' do
|
40
|
-
mock_app do
|
41
|
-
layout { 'THIS. IS. #{yield.upcase}!' }
|
42
|
-
get('/') { asciidoc 'Sparta', :layout_engine => :str }
|
43
|
-
end
|
44
|
-
get '/'
|
45
|
-
assert ok?
|
46
|
-
assert_include body, 'THIS. IS.'
|
47
|
-
assert_include body, '<P>SPARTA</P>'
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'renders with file layouts' do
|
51
|
-
asciidoc_app do
|
52
|
-
asciidoc 'Hello World', :layout => :layout2, :layout_engine => :erb
|
53
|
-
end
|
54
|
-
assert ok?
|
55
|
-
assert_include body, 'ERB Layout!'
|
56
|
-
assert_include body, '<p>Hello World</p>'
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'can be used in a nested fashion for partials and whatnot' do
|
60
|
-
mock_app do
|
61
|
-
template(:inner) { 'hi' }
|
62
|
-
template(:outer) { '<outer><%= asciidoc :inner %></outer>' }
|
63
|
-
get('/') { erb :outer }
|
64
|
-
end
|
65
|
-
get '/'
|
66
|
-
assert ok?
|
67
|
-
assert_match %r{<outer>.*<p.*?>hi</p>.*</outer>}m, body
|
68
|
-
end
|
69
|
-
end
|
70
|
-
rescue LoadError
|
71
|
-
warn "#{$!.to_s}: skipping asciidoc tests"
|
72
|
-
end
|
data/test/base_test.rb
DELETED
@@ -1,167 +0,0 @@
|
|
1
|
-
require File.expand_path('../helper', __FILE__)
|
2
|
-
|
3
|
-
class BaseTest < Minitest::Test
|
4
|
-
describe 'Sinatra::Base subclasses' do
|
5
|
-
class TestApp < Sinatra::Base
|
6
|
-
get('/') { 'Hello World' }
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'include Rack::Utils' do
|
10
|
-
assert TestApp.included_modules.include?(Rack::Utils)
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'processes requests with #call' do
|
14
|
-
assert TestApp.respond_to?(:call)
|
15
|
-
|
16
|
-
request = Rack::MockRequest.new(TestApp)
|
17
|
-
response = request.get('/')
|
18
|
-
assert response.ok?
|
19
|
-
assert_equal 'Hello World', response.body
|
20
|
-
end
|
21
|
-
|
22
|
-
class TestApp < Sinatra::Base
|
23
|
-
get '/state' do
|
24
|
-
@foo ||= "new"
|
25
|
-
body = "Foo: #{@foo}"
|
26
|
-
@foo = 'discard'
|
27
|
-
body
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'does not maintain state between requests' do
|
32
|
-
request = Rack::MockRequest.new(TestApp)
|
33
|
-
2.times do
|
34
|
-
response = request.get('/state')
|
35
|
-
assert response.ok?
|
36
|
-
assert_equal 'Foo: new', response.body
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
it "passes the subclass to configure blocks" do
|
41
|
-
ref = nil
|
42
|
-
TestApp.configure { |app| ref = app }
|
43
|
-
assert_equal TestApp, ref
|
44
|
-
end
|
45
|
-
|
46
|
-
it "allows the configure block arg to be omitted and does not change context" do
|
47
|
-
context = nil
|
48
|
-
TestApp.configure { context = self }
|
49
|
-
assert_equal self, context
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "Sinatra::Base#new" do
|
54
|
-
it 'returns a wrapper' do
|
55
|
-
assert_equal Sinatra::Wrapper, Sinatra::Base.new.class
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'implements a nice inspect' do
|
59
|
-
assert_equal '#<Sinatra::Base app_file=nil>', Sinatra::Base.new.inspect
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'exposes settings' do
|
63
|
-
assert_equal Sinatra::Base.settings, Sinatra::Base.new.settings
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'exposes helpers' do
|
67
|
-
assert_equal 'image/jpeg', Sinatra::Base.new.helpers.mime_type(:jpg)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe "Sinatra::Base as Rack middleware" do
|
72
|
-
app = lambda { |env|
|
73
|
-
headers = {'X-Downstream' => 'true'}
|
74
|
-
headers['X-Route-Missing'] = env['sinatra.route-missing'] || ''
|
75
|
-
[210, headers, ['Hello from downstream']] }
|
76
|
-
|
77
|
-
class TestMiddleware < Sinatra::Base
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'creates a middleware that responds to #call with .new' do
|
81
|
-
middleware = TestMiddleware.new(app)
|
82
|
-
assert middleware.respond_to?(:call)
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'exposes the downstream app' do
|
86
|
-
middleware = TestMiddleware.new!(app)
|
87
|
-
assert_same app, middleware.app
|
88
|
-
end
|
89
|
-
|
90
|
-
class TestMiddleware < Sinatra::Base
|
91
|
-
def route_missing
|
92
|
-
env['sinatra.route-missing'] = '1'
|
93
|
-
super
|
94
|
-
end
|
95
|
-
|
96
|
-
get('/') { 'Hello from middleware' }
|
97
|
-
end
|
98
|
-
|
99
|
-
middleware = TestMiddleware.new(app)
|
100
|
-
request = Rack::MockRequest.new(middleware)
|
101
|
-
|
102
|
-
it 'intercepts requests' do
|
103
|
-
response = request.get('/')
|
104
|
-
assert response.ok?
|
105
|
-
assert_equal 'Hello from middleware', response.body
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'automatically forwards requests downstream when no matching route found' do
|
109
|
-
response = request.get('/missing')
|
110
|
-
assert_equal 210, response.status
|
111
|
-
assert_equal 'Hello from downstream', response.body
|
112
|
-
end
|
113
|
-
|
114
|
-
it 'calls #route_missing before forwarding downstream' do
|
115
|
-
response = request.get('/missing')
|
116
|
-
assert_equal '1', response['X-Route-Missing']
|
117
|
-
end
|
118
|
-
|
119
|
-
class TestMiddleware < Sinatra::Base
|
120
|
-
get('/low-level-forward') { app.call(env) }
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'can call the downstream app directly and return result' do
|
124
|
-
response = request.get('/low-level-forward')
|
125
|
-
assert_equal 210, response.status
|
126
|
-
assert_equal 'true', response['X-Downstream']
|
127
|
-
assert_equal 'Hello from downstream', response.body
|
128
|
-
end
|
129
|
-
|
130
|
-
class TestMiddleware < Sinatra::Base
|
131
|
-
get '/explicit-forward' do
|
132
|
-
response['X-Middleware'] = 'true'
|
133
|
-
res = forward
|
134
|
-
assert_nil res
|
135
|
-
assert_equal 210, response.status
|
136
|
-
assert_equal 'true', response['X-Downstream']
|
137
|
-
assert_equal ['Hello from downstream'], response.body
|
138
|
-
'Hello after explicit forward'
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
it 'forwards the request downstream and integrates the response into the current context' do
|
143
|
-
response = request.get('/explicit-forward')
|
144
|
-
assert_equal 210, response.status
|
145
|
-
assert_equal 'true', response['X-Downstream']
|
146
|
-
assert_equal 'Hello after explicit forward', response.body
|
147
|
-
assert_equal '28', response['Content-Length']
|
148
|
-
end
|
149
|
-
|
150
|
-
app_content_length = lambda {|env|
|
151
|
-
[200, {'Content-Length' => '16'}, 'From downstream!']}
|
152
|
-
|
153
|
-
class TestMiddlewareContentLength < Sinatra::Base
|
154
|
-
get '/forward' do
|
155
|
-
'From after explicit forward!'
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
middleware_content_length = TestMiddlewareContentLength.new(app_content_length)
|
160
|
-
request_content_length = Rack::MockRequest.new(middleware_content_length)
|
161
|
-
|
162
|
-
it "sets content length for last response" do
|
163
|
-
response = request_content_length.get('/forward')
|
164
|
-
assert_equal '28', response['Content-Length']
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
data/test/builder_test.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
require File.expand_path('../helper', __FILE__)
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'builder'
|
5
|
-
|
6
|
-
class BuilderTest < Minitest::Test
|
7
|
-
def builder_app(options = {}, &block)
|
8
|
-
mock_app do
|
9
|
-
set :views, File.dirname(__FILE__) + '/views'
|
10
|
-
set options
|
11
|
-
get('/', &block)
|
12
|
-
end
|
13
|
-
get '/'
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'renders inline Builder strings' do
|
17
|
-
builder_app { builder 'xml.instruct!' }
|
18
|
-
assert ok?
|
19
|
-
assert_equal %{<?xml version="1.0" encoding="UTF-8"?>\n}, body
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'defaults content type to xml' do
|
23
|
-
builder_app { builder 'xml.instruct!' }
|
24
|
-
assert ok?
|
25
|
-
assert_equal "application/xml;charset=utf-8", response['Content-Type']
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'defaults allows setting content type per route' do
|
29
|
-
builder_app do
|
30
|
-
content_type :html
|
31
|
-
builder 'xml.instruct!'
|
32
|
-
end
|
33
|
-
assert ok?
|
34
|
-
assert_equal "text/html;charset=utf-8", response['Content-Type']
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'defaults allows setting content type globally' do
|
38
|
-
builder_app(:builder => { :content_type => 'html' }) do
|
39
|
-
builder 'xml.instruct!'
|
40
|
-
end
|
41
|
-
assert ok?
|
42
|
-
assert_equal "text/html;charset=utf-8", response['Content-Type']
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'renders inline blocks' do
|
46
|
-
builder_app do
|
47
|
-
@name = "Frank & Mary"
|
48
|
-
builder { |xml| xml.couple @name }
|
49
|
-
end
|
50
|
-
assert ok?
|
51
|
-
assert_equal "<couple>Frank & Mary</couple>\n", body
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'renders .builder files in views path' do
|
55
|
-
builder_app do
|
56
|
-
@name = "Blue"
|
57
|
-
builder :hello
|
58
|
-
end
|
59
|
-
assert ok?
|
60
|
-
assert_equal %(<exclaim>You're my boy, Blue!</exclaim>\n), body
|
61
|
-
end
|
62
|
-
|
63
|
-
it "renders with inline layouts" do
|
64
|
-
mock_app do
|
65
|
-
layout { %(xml.layout { xml << yield }) }
|
66
|
-
get('/') { builder %(xml.em 'Hello World') }
|
67
|
-
end
|
68
|
-
get '/'
|
69
|
-
assert ok?
|
70
|
-
assert_equal "<layout>\n<em>Hello World</em>\n</layout>\n", body
|
71
|
-
end
|
72
|
-
|
73
|
-
it "renders with file layouts" do
|
74
|
-
builder_app do
|
75
|
-
builder %(xml.em 'Hello World'), :layout => :layout2
|
76
|
-
end
|
77
|
-
assert ok?
|
78
|
-
assert_equal "<layout>\n<em>Hello World</em>\n</layout>\n", body
|
79
|
-
end
|
80
|
-
|
81
|
-
it "raises error if template not found" do
|
82
|
-
mock_app do
|
83
|
-
get('/') { builder :no_such_template }
|
84
|
-
end
|
85
|
-
assert_raises(Errno::ENOENT) { get('/') }
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
rescue LoadError
|
90
|
-
warn "#{$!.to_s}: skipping builder tests"
|
91
|
-
end
|