sinatra 1.4.8 → 2.0.8.1

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.

Files changed (129) hide show
  1. checksums.yaml +5 -5
  2. data/AUTHORS.md +1 -0
  3. data/CHANGELOG.md +238 -54
  4. data/CONTRIBUTING.md +8 -8
  5. data/Gemfile +47 -47
  6. data/LICENSE +4 -1
  7. data/MAINTENANCE.md +42 -0
  8. data/README.de.md +650 -442
  9. data/README.es.md +738 -357
  10. data/README.fr.md +15 -15
  11. data/README.hu.md +37 -3
  12. data/README.ja.md +124 -66
  13. data/README.ko.md +14 -14
  14. data/README.malayalam.md +3141 -0
  15. data/README.md +530 -403
  16. data/README.pt-br.md +2361 -334
  17. data/README.pt-pt.md +2 -2
  18. data/README.ru.md +856 -607
  19. data/README.zh.md +90 -28
  20. data/Rakefile +77 -51
  21. data/SECURITY.md +35 -0
  22. data/VERSION +1 -0
  23. data/lib/sinatra/base.rb +177 -239
  24. data/lib/sinatra/indifferent_hash.rb +200 -0
  25. data/lib/sinatra/main.rb +30 -10
  26. data/lib/sinatra/show_exceptions.rb +102 -62
  27. data/lib/sinatra/version.rb +1 -1
  28. data/sinatra.gemspec +44 -8
  29. metadata +41 -166
  30. data/lib/sinatra/ext.rb +0 -17
  31. data/test/asciidoctor_test.rb +0 -72
  32. data/test/base_test.rb +0 -167
  33. data/test/builder_test.rb +0 -91
  34. data/test/coffee_test.rb +0 -96
  35. data/test/compile_test.rb +0 -183
  36. data/test/contest.rb +0 -91
  37. data/test/creole_test.rb +0 -65
  38. data/test/delegator_test.rb +0 -160
  39. data/test/encoding_test.rb +0 -20
  40. data/test/erb_test.rb +0 -116
  41. data/test/extensions_test.rb +0 -98
  42. data/test/filter_test.rb +0 -487
  43. data/test/haml_test.rb +0 -109
  44. data/test/helper.rb +0 -132
  45. data/test/helpers_test.rb +0 -1917
  46. data/test/integration/app.rb +0 -79
  47. data/test/integration_helper.rb +0 -236
  48. data/test/integration_test.rb +0 -104
  49. data/test/less_test.rb +0 -69
  50. data/test/liquid_test.rb +0 -77
  51. data/test/mapped_error_test.rb +0 -285
  52. data/test/markaby_test.rb +0 -80
  53. data/test/markdown_test.rb +0 -85
  54. data/test/mediawiki_test.rb +0 -68
  55. data/test/middleware_test.rb +0 -68
  56. data/test/nokogiri_test.rb +0 -67
  57. data/test/public/favicon.ico +0 -0
  58. data/test/public/hello+world.txt +0 -1
  59. data/test/rabl_test.rb +0 -89
  60. data/test/rack_test.rb +0 -45
  61. data/test/radius_test.rb +0 -59
  62. data/test/rdoc_test.rb +0 -66
  63. data/test/readme_test.rb +0 -130
  64. data/test/request_test.rb +0 -100
  65. data/test/response_test.rb +0 -63
  66. data/test/result_test.rb +0 -76
  67. data/test/route_added_hook_test.rb +0 -59
  68. data/test/routing_test.rb +0 -1456
  69. data/test/sass_test.rb +0 -115
  70. data/test/scss_test.rb +0 -88
  71. data/test/server_test.rb +0 -56
  72. data/test/settings_test.rb +0 -582
  73. data/test/sinatra_test.rb +0 -12
  74. data/test/slim_test.rb +0 -102
  75. data/test/static_test.rb +0 -266
  76. data/test/streaming_test.rb +0 -149
  77. data/test/stylus_test.rb +0 -90
  78. data/test/templates_test.rb +0 -382
  79. data/test/textile_test.rb +0 -65
  80. data/test/views/a/in_a.str +0 -1
  81. data/test/views/ascii.erb +0 -2
  82. data/test/views/b/in_b.str +0 -1
  83. data/test/views/calc.html.erb +0 -1
  84. data/test/views/error.builder +0 -3
  85. data/test/views/error.erb +0 -3
  86. data/test/views/error.haml +0 -3
  87. data/test/views/error.sass +0 -2
  88. data/test/views/explicitly_nested.str +0 -1
  89. data/test/views/foo/hello.test +0 -1
  90. data/test/views/hello.asciidoc +0 -1
  91. data/test/views/hello.builder +0 -1
  92. data/test/views/hello.coffee +0 -1
  93. data/test/views/hello.creole +0 -1
  94. data/test/views/hello.erb +0 -1
  95. data/test/views/hello.haml +0 -1
  96. data/test/views/hello.less +0 -5
  97. data/test/views/hello.liquid +0 -1
  98. data/test/views/hello.mab +0 -1
  99. data/test/views/hello.md +0 -1
  100. data/test/views/hello.mediawiki +0 -1
  101. data/test/views/hello.nokogiri +0 -1
  102. data/test/views/hello.rabl +0 -2
  103. data/test/views/hello.radius +0 -1
  104. data/test/views/hello.rdoc +0 -1
  105. data/test/views/hello.sass +0 -2
  106. data/test/views/hello.scss +0 -3
  107. data/test/views/hello.slim +0 -1
  108. data/test/views/hello.str +0 -1
  109. data/test/views/hello.styl +0 -2
  110. data/test/views/hello.test +0 -1
  111. data/test/views/hello.textile +0 -1
  112. data/test/views/hello.wlang +0 -1
  113. data/test/views/hello.yajl +0 -1
  114. data/test/views/layout2.builder +0 -3
  115. data/test/views/layout2.erb +0 -2
  116. data/test/views/layout2.haml +0 -2
  117. data/test/views/layout2.liquid +0 -2
  118. data/test/views/layout2.mab +0 -2
  119. data/test/views/layout2.nokogiri +0 -3
  120. data/test/views/layout2.rabl +0 -3
  121. data/test/views/layout2.radius +0 -2
  122. data/test/views/layout2.slim +0 -3
  123. data/test/views/layout2.str +0 -2
  124. data/test/views/layout2.test +0 -1
  125. data/test/views/layout2.wlang +0 -2
  126. data/test/views/nested.str +0 -1
  127. data/test/views/utf8.erb +0 -2
  128. data/test/wlang_test.rb +0 -87
  129. 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.8
4
+ version: 2.0.8.1
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: 2017-01-30 00:00:00.000000000 Z
14
+ date: 2020-01-01 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: '1.5'
22
+ version: '2.0'
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: '1.5'
29
+ version: '2.0'
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: '3'
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: '3'
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.0.8.1
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - '='
56
+ - !ruby/object:Gem::Version
57
+ version: 2.0.8.1
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.4'
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.4'
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,44 @@ 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
102
115
  - examples/simple.rb
103
116
  - examples/stream.ru
104
117
  - lib/sinatra.rb
105
118
  - lib/sinatra/base.rb
106
- - lib/sinatra/ext.rb
107
119
  - lib/sinatra/images/404.png
108
120
  - lib/sinatra/images/500.png
121
+ - lib/sinatra/indifferent_hash.rb
109
122
  - lib/sinatra/main.rb
110
123
  - lib/sinatra/show_exceptions.rb
111
124
  - lib/sinatra/version.rb
112
125
  - sinatra.gemspec
113
- - test/asciidoctor_test.rb
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/
126
+ homepage: http://sinatrarb.com/
213
127
  licenses:
214
128
  - MIT
215
- metadata: {}
129
+ metadata:
130
+ source_code_uri: https://github.com/sinatra/sinatra
131
+ changelog_uri: https://github.com/sinatra/sinatra/blob/master/CHANGELOG.md
132
+ homepage_uri: http://sinatrarb.com/
133
+ bug_tracker_uri: https://github.com/sinatra/sinatra/issues
134
+ mailing_list_uri: http://groups.google.com/group/sinatrarb
135
+ documentation_uri: https://www.rubydoc.info/gems/sinatra
216
136
  post_install_message:
217
137
  rdoc_options:
218
138
  - "--line-numbers"
@@ -228,7 +148,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
228
148
  requirements:
229
149
  - - ">="
230
150
  - !ruby/object:Gem::Version
231
- version: '0'
151
+ version: 2.2.0
232
152
  required_rubygems_version: !ruby/object:Gem::Requirement
233
153
  requirements:
234
154
  - - ">="
@@ -236,53 +156,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
236
156
  version: '0'
237
157
  requirements: []
238
158
  rubyforge_project:
239
- rubygems_version: 2.6.8
159
+ rubygems_version: 2.7.3
240
160
  signing_key:
241
161
  specification_version: 4
242
162
  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
163
+ 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
@@ -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 &amp; 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