grape 1.7.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +37 -1
  3. data/CONTRIBUTING.md +1 -1
  4. data/README.md +30 -25
  5. data/UPGRADING.md +35 -0
  6. data/grape.gemspec +3 -6
  7. data/lib/grape/api.rb +2 -2
  8. data/lib/grape/content_types.rb +2 -8
  9. data/lib/grape/dsl/desc.rb +1 -1
  10. data/lib/grape/dsl/inside_route.rb +11 -11
  11. data/lib/grape/dsl/request_response.rb +2 -1
  12. data/lib/grape/dsl/settings.rb +2 -6
  13. data/lib/grape/endpoint.rb +28 -18
  14. data/lib/grape/error_formatter/base.rb +1 -1
  15. data/lib/grape/exceptions/base.rb +2 -2
  16. data/lib/grape/exceptions/missing_group_type.rb +1 -6
  17. data/lib/grape/exceptions/unsupported_group_type.rb +1 -6
  18. data/lib/grape/exceptions/validation_errors.rb +1 -6
  19. data/lib/grape/extensions/active_support/hash_with_indifferent_access.rb +3 -3
  20. data/lib/grape/extensions/hash.rb +4 -7
  21. data/lib/grape/extensions/hashie/mash.rb +3 -3
  22. data/lib/grape/formatter/serializable_hash.rb +7 -7
  23. data/lib/grape/http/headers.rb +12 -2
  24. data/lib/grape/middleware/auth/base.rb +1 -1
  25. data/lib/grape/middleware/auth/strategies.rb +1 -2
  26. data/lib/grape/middleware/error.rb +5 -5
  27. data/lib/grape/middleware/formatter.rb +6 -6
  28. data/lib/grape/middleware/versioner/header.rb +11 -19
  29. data/lib/grape/railtie.rb +9 -0
  30. data/lib/grape/request.rb +8 -2
  31. data/lib/grape/router/route.rb +1 -3
  32. data/lib/grape/util/lazy_value.rb +3 -11
  33. data/lib/grape/util/strict_hash_configuration.rb +3 -4
  34. data/lib/grape/validations/multiple_attributes_iterator.rb +1 -1
  35. data/lib/grape/validations/params_scope.rb +8 -2
  36. data/lib/grape/validations/single_attribute_iterator.rb +3 -1
  37. data/lib/grape/validations/types/custom_type_coercer.rb +2 -16
  38. data/lib/grape/validations/validators/base.rb +9 -20
  39. data/lib/grape/validations/validators/default_validator.rb +2 -20
  40. data/lib/grape/validations/validators/multiple_params_base.rb +4 -8
  41. data/lib/grape/validations/validators/values_validator.rb +14 -5
  42. data/lib/grape/version.rb +1 -1
  43. data/lib/grape.rb +26 -5
  44. metadata +13 -253
  45. data/lib/grape/config.rb +0 -34
  46. data/lib/grape/extensions/deep_mergeable_hash.rb +0 -21
  47. data/lib/grape/extensions/deep_symbolize_hash.rb +0 -32
  48. data/spec/grape/api/custom_validations_spec.rb +0 -256
  49. data/spec/grape/api/deeply_included_options_spec.rb +0 -56
  50. data/spec/grape/api/defines_boolean_in_params_spec.rb +0 -38
  51. data/spec/grape/api/documentation_spec.rb +0 -59
  52. data/spec/grape/api/inherited_helpers_spec.rb +0 -114
  53. data/spec/grape/api/instance_spec.rb +0 -103
  54. data/spec/grape/api/invalid_format_spec.rb +0 -45
  55. data/spec/grape/api/namespace_parameters_in_route_spec.rb +0 -38
  56. data/spec/grape/api/nested_helpers_spec.rb +0 -50
  57. data/spec/grape/api/optional_parameters_in_route_spec.rb +0 -43
  58. data/spec/grape/api/parameters_modification_spec.rb +0 -41
  59. data/spec/grape/api/patch_method_helpers_spec.rb +0 -79
  60. data/spec/grape/api/recognize_path_spec.rb +0 -21
  61. data/spec/grape/api/required_parameters_in_route_spec.rb +0 -37
  62. data/spec/grape/api/required_parameters_with_invalid_method_spec.rb +0 -26
  63. data/spec/grape/api/routes_with_requirements_spec.rb +0 -59
  64. data/spec/grape/api/shared_helpers_exactly_one_of_spec.rb +0 -41
  65. data/spec/grape/api/shared_helpers_spec.rb +0 -36
  66. data/spec/grape/api_remount_spec.rb +0 -473
  67. data/spec/grape/api_spec.rb +0 -4347
  68. data/spec/grape/config_spec.rb +0 -17
  69. data/spec/grape/dsl/callbacks_spec.rb +0 -45
  70. data/spec/grape/dsl/desc_spec.rb +0 -101
  71. data/spec/grape/dsl/headers_spec.rb +0 -62
  72. data/spec/grape/dsl/helpers_spec.rb +0 -100
  73. data/spec/grape/dsl/inside_route_spec.rb +0 -535
  74. data/spec/grape/dsl/logger_spec.rb +0 -24
  75. data/spec/grape/dsl/middleware_spec.rb +0 -60
  76. data/spec/grape/dsl/parameters_spec.rb +0 -180
  77. data/spec/grape/dsl/request_response_spec.rb +0 -206
  78. data/spec/grape/dsl/routing_spec.rb +0 -275
  79. data/spec/grape/dsl/settings_spec.rb +0 -261
  80. data/spec/grape/dsl/validations_spec.rb +0 -55
  81. data/spec/grape/endpoint/declared_spec.rb +0 -846
  82. data/spec/grape/endpoint_spec.rb +0 -1085
  83. data/spec/grape/entity_spec.rb +0 -336
  84. data/spec/grape/exceptions/base_spec.rb +0 -81
  85. data/spec/grape/exceptions/body_parse_errors_spec.rb +0 -145
  86. data/spec/grape/exceptions/invalid_accept_header_spec.rb +0 -358
  87. data/spec/grape/exceptions/invalid_formatter_spec.rb +0 -15
  88. data/spec/grape/exceptions/invalid_response_spec.rb +0 -11
  89. data/spec/grape/exceptions/invalid_versioner_option_spec.rb +0 -15
  90. data/spec/grape/exceptions/missing_group_type_spec.rb +0 -21
  91. data/spec/grape/exceptions/missing_mime_type_spec.rb +0 -17
  92. data/spec/grape/exceptions/missing_option_spec.rb +0 -15
  93. data/spec/grape/exceptions/unknown_options_spec.rb +0 -15
  94. data/spec/grape/exceptions/unknown_validator_spec.rb +0 -15
  95. data/spec/grape/exceptions/unsupported_group_type_spec.rb +0 -23
  96. data/spec/grape/exceptions/validation_errors_spec.rb +0 -92
  97. data/spec/grape/exceptions/validation_spec.rb +0 -19
  98. data/spec/grape/extensions/param_builders/hash_spec.rb +0 -83
  99. data/spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb +0 -105
  100. data/spec/grape/extensions/param_builders/hashie/mash_spec.rb +0 -79
  101. data/spec/grape/integration/global_namespace_function_spec.rb +0 -29
  102. data/spec/grape/integration/rack_sendfile_spec.rb +0 -48
  103. data/spec/grape/integration/rack_spec.rb +0 -51
  104. data/spec/grape/loading_spec.rb +0 -44
  105. data/spec/grape/middleware/auth/base_spec.rb +0 -31
  106. data/spec/grape/middleware/auth/dsl_spec.rb +0 -60
  107. data/spec/grape/middleware/auth/strategies_spec.rb +0 -120
  108. data/spec/grape/middleware/base_spec.rb +0 -221
  109. data/spec/grape/middleware/error_spec.rb +0 -85
  110. data/spec/grape/middleware/exception_spec.rb +0 -294
  111. data/spec/grape/middleware/formatter_spec.rb +0 -461
  112. data/spec/grape/middleware/globals_spec.rb +0 -30
  113. data/spec/grape/middleware/stack_spec.rb +0 -155
  114. data/spec/grape/middleware/versioner/accept_version_header_spec.rb +0 -122
  115. data/spec/grape/middleware/versioner/header_spec.rb +0 -345
  116. data/spec/grape/middleware/versioner/param_spec.rb +0 -171
  117. data/spec/grape/middleware/versioner/path_spec.rb +0 -62
  118. data/spec/grape/middleware/versioner_spec.rb +0 -21
  119. data/spec/grape/named_api_spec.rb +0 -19
  120. data/spec/grape/parser_spec.rb +0 -86
  121. data/spec/grape/path_spec.rb +0 -252
  122. data/spec/grape/presenters/presenter_spec.rb +0 -71
  123. data/spec/grape/request_spec.rb +0 -136
  124. data/spec/grape/util/inheritable_setting_spec.rb +0 -242
  125. data/spec/grape/util/inheritable_values_spec.rb +0 -79
  126. data/spec/grape/util/reverse_stackable_values_spec.rb +0 -134
  127. data/spec/grape/util/stackable_values_spec.rb +0 -128
  128. data/spec/grape/util/strict_hash_configuration_spec.rb +0 -38
  129. data/spec/grape/validations/attributes_doc_spec.rb +0 -153
  130. data/spec/grape/validations/instance_behaivour_spec.rb +0 -43
  131. data/spec/grape/validations/multiple_attributes_iterator_spec.rb +0 -40
  132. data/spec/grape/validations/params_scope_spec.rb +0 -1420
  133. data/spec/grape/validations/single_attribute_iterator_spec.rb +0 -57
  134. data/spec/grape/validations/types/array_coercer_spec.rb +0 -33
  135. data/spec/grape/validations/types/primitive_coercer_spec.rb +0 -150
  136. data/spec/grape/validations/types/set_coercer_spec.rb +0 -32
  137. data/spec/grape/validations/types_spec.rb +0 -111
  138. data/spec/grape/validations/validators/all_or_none_spec.rb +0 -162
  139. data/spec/grape/validations/validators/allow_blank_spec.rb +0 -575
  140. data/spec/grape/validations/validators/at_least_one_of_spec.rb +0 -205
  141. data/spec/grape/validations/validators/coerce_spec.rb +0 -1261
  142. data/spec/grape/validations/validators/default_spec.rb +0 -463
  143. data/spec/grape/validations/validators/exactly_one_of_spec.rb +0 -233
  144. data/spec/grape/validations/validators/except_values_spec.rb +0 -192
  145. data/spec/grape/validations/validators/mutual_exclusion_spec.rb +0 -214
  146. data/spec/grape/validations/validators/presence_spec.rb +0 -315
  147. data/spec/grape/validations/validators/regexp_spec.rb +0 -161
  148. data/spec/grape/validations/validators/same_as_spec.rb +0 -57
  149. data/spec/grape/validations/validators/values_spec.rb +0 -696
  150. data/spec/grape/validations/validators/zh-CN.yml +0 -10
  151. data/spec/grape/validations_spec.rb +0 -2029
  152. data/spec/integration/eager_load/eager_load_spec.rb +0 -15
  153. data/spec/integration/multi_json/json_spec.rb +0 -7
  154. data/spec/integration/multi_xml/xml_spec.rb +0 -7
  155. data/spec/shared/versioning_examples.rb +0 -215
  156. data/spec/spec_helper.rb +0 -52
  157. data/spec/support/basic_auth_encode_helpers.rb +0 -11
  158. data/spec/support/chunks.rb +0 -14
  159. data/spec/support/content_type_helpers.rb +0 -15
  160. data/spec/support/endpoint_faker.rb +0 -25
  161. data/spec/support/file_streamer.rb +0 -13
  162. data/spec/support/integer_helpers.rb +0 -13
  163. data/spec/support/versioned_helpers.rb +0 -55
@@ -1,535 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module DSL
5
- module InsideRouteSpec
6
- class Dummy
7
- include Grape::DSL::InsideRoute
8
-
9
- attr_reader :env, :request, :new_settings
10
-
11
- def initialize
12
- @env = {}
13
- @header = {}
14
- @new_settings = { namespace_inheritable: {}, namespace_stackable: {} }
15
- end
16
- end
17
- end
18
- end
19
- end
20
-
21
- describe Grape::Endpoint do
22
- subject { Grape::DSL::InsideRouteSpec::Dummy.new }
23
-
24
- describe '#version' do
25
- it 'defaults to nil' do
26
- expect(subject.version).to be_nil
27
- end
28
-
29
- it 'returns env[api.version]' do
30
- subject.env['api.version'] = 'dummy'
31
- expect(subject.version).to eq 'dummy'
32
- end
33
- end
34
-
35
- describe '#error!' do
36
- it 'throws :error' do
37
- expect { subject.error! 'Not Found', 404 }.to throw_symbol(:error)
38
- end
39
-
40
- describe 'thrown' do
41
- before do
42
- catch(:error) { subject.error! 'Not Found', 404 }
43
- end
44
-
45
- it 'sets status' do
46
- expect(subject.status).to eq 404
47
- end
48
- end
49
-
50
- describe 'default_error_status' do
51
- before do
52
- subject.namespace_inheritable(:default_error_status, 500)
53
- catch(:error) { subject.error! 'Unknown' }
54
- end
55
-
56
- it 'sets status to default_error_status' do
57
- expect(subject.status).to eq 500
58
- end
59
- end
60
-
61
- # self.status(status || settings[:default_error_status])
62
- # throw :error, message: message, status: self.status, headers: headers
63
- end
64
-
65
- describe '#redirect' do
66
- describe 'default' do
67
- before do
68
- subject.redirect '/'
69
- end
70
-
71
- it 'sets status to 302' do
72
- expect(subject.status).to eq 302
73
- end
74
-
75
- it 'sets location header' do
76
- expect(subject.header['Location']).to eq '/'
77
- end
78
- end
79
-
80
- describe 'permanent' do
81
- before do
82
- subject.redirect '/', permanent: true
83
- end
84
-
85
- it 'sets status to 301' do
86
- expect(subject.status).to eq 301
87
- end
88
-
89
- it 'sets location header' do
90
- expect(subject.header['Location']).to eq '/'
91
- end
92
- end
93
- end
94
-
95
- describe '#status' do
96
- %w[GET PUT OPTIONS].each do |method|
97
- it 'defaults to 200 on GET' do
98
- request = Grape::Request.new(Rack::MockRequest.env_for('/', method: method))
99
- expect(subject).to receive(:request).and_return(request)
100
- expect(subject.status).to eq 200
101
- end
102
- end
103
-
104
- it 'defaults to 201 on POST' do
105
- request = Grape::Request.new(Rack::MockRequest.env_for('/', method: 'POST'))
106
- expect(subject).to receive(:request).and_return(request)
107
- expect(subject.status).to eq 201
108
- end
109
-
110
- it 'defaults to 204 on DELETE' do
111
- request = Grape::Request.new(Rack::MockRequest.env_for('/', method: 'DELETE'))
112
- expect(subject).to receive(:request).and_return(request)
113
- expect(subject.status).to eq 204
114
- end
115
-
116
- it 'defaults to 200 on DELETE with a body present' do
117
- request = Grape::Request.new(Rack::MockRequest.env_for('/', method: 'DELETE'))
118
- subject.body 'content here'
119
- expect(subject).to receive(:request).and_return(request)
120
- expect(subject.status).to eq 200
121
- end
122
-
123
- it 'returns status set' do
124
- subject.status 501
125
- expect(subject.status).to eq 501
126
- end
127
-
128
- it 'accepts symbol for status' do
129
- subject.status :see_other
130
- expect(subject.status).to eq 303
131
- end
132
-
133
- it 'raises error if unknow symbol is passed' do
134
- expect { subject.status :foo_bar }
135
- .to raise_error(ArgumentError, 'Status code :foo_bar is invalid.')
136
- end
137
-
138
- it 'accepts unknown Integer status codes' do
139
- expect { subject.status 210 }.not_to raise_error
140
- end
141
-
142
- it 'raises error if status is not a integer or symbol' do
143
- expect { subject.status Object.new }
144
- .to raise_error(ArgumentError, 'Status code must be Integer or Symbol.')
145
- end
146
- end
147
-
148
- describe '#return_no_content' do
149
- it 'sets the status code and body' do
150
- subject.return_no_content
151
- expect(subject.status).to eq 204
152
- expect(subject.body).to eq ''
153
- end
154
- end
155
-
156
- describe '#content_type' do
157
- describe 'set' do
158
- before do
159
- subject.content_type 'text/plain'
160
- end
161
-
162
- it 'returns value' do
163
- expect(subject.content_type).to eq 'text/plain'
164
- end
165
- end
166
-
167
- it 'returns default' do
168
- expect(subject.content_type).to be_nil
169
- end
170
- end
171
-
172
- describe '#cookies' do
173
- it 'returns an instance of Cookies' do
174
- expect(subject.cookies).to be_a Grape::Cookies
175
- end
176
- end
177
-
178
- describe '#body' do
179
- describe 'set' do
180
- before do
181
- subject.body 'body'
182
- end
183
-
184
- it 'returns value' do
185
- expect(subject.body).to eq 'body'
186
- end
187
- end
188
-
189
- describe 'false' do
190
- before do
191
- subject.body false
192
- end
193
-
194
- it 'sets status to 204' do
195
- expect(subject.body).to eq ''
196
- expect(subject.status).to eq 204
197
- end
198
- end
199
-
200
- it 'returns default' do
201
- expect(subject.body).to be_nil
202
- end
203
- end
204
-
205
- describe '#file' do
206
- before do
207
- allow(subject).to receive(:warn)
208
- end
209
-
210
- describe 'set' do
211
- context 'as file path' do
212
- let(:file_path) { '/some/file/path' }
213
-
214
- it 'emits a warning that this method is deprecated' do
215
- expect(subject).to receive(:warn).with(/Use sendfile or stream/)
216
-
217
- subject.file file_path
218
- end
219
-
220
- it 'forwards the call to sendfile' do
221
- expect(subject).to receive(:sendfile).with(file_path)
222
-
223
- subject.file file_path
224
- end
225
- end
226
-
227
- context 'as object (backward compatibility)' do
228
- let(:file_object) { double('StreamerObject', each: nil) }
229
-
230
- it 'emits a warning that this method is deprecated' do
231
- expect(subject).to receive(:warn).with(/Use stream to use a Stream object/)
232
-
233
- subject.file file_object
234
- end
235
-
236
- it 'forwards the call to stream' do
237
- expect(subject).to receive(:stream).with(file_object)
238
-
239
- subject.file file_object
240
- end
241
- end
242
- end
243
-
244
- describe 'get' do
245
- it 'emits a warning that this method is deprecated' do
246
- expect(subject).to receive(:warn).with(/Use sendfile or stream/)
247
-
248
- subject.file
249
- end
250
-
251
- it 'fowards call to sendfile' do
252
- expect(subject).to receive(:sendfile)
253
-
254
- subject.file
255
- end
256
- end
257
- end
258
-
259
- describe '#sendfile' do
260
- describe 'set' do
261
- context 'as file path' do
262
- let(:file_path) { '/some/file/path' }
263
-
264
- let(:file_response) do
265
- file_body = Grape::ServeStream::FileBody.new(file_path)
266
- Grape::ServeStream::StreamResponse.new(file_body)
267
- end
268
-
269
- before do
270
- subject.header 'Cache-Control', 'cache'
271
- subject.header 'Content-Length', 123
272
- subject.header 'Transfer-Encoding', 'base64'
273
- end
274
-
275
- it 'sends no deprecation warnings' do
276
- expect(subject).not_to receive(:warn)
277
-
278
- subject.sendfile file_path
279
- end
280
-
281
- it 'returns value wrapped in StreamResponse' do
282
- subject.sendfile file_path
283
-
284
- expect(subject.sendfile).to eq file_response
285
- end
286
-
287
- it 'does not change the Cache-Control header' do
288
- subject.sendfile file_path
289
-
290
- expect(subject.header['Cache-Control']).to eq 'cache'
291
- end
292
-
293
- it 'does not change the Content-Length header' do
294
- subject.sendfile file_path
295
-
296
- expect(subject.header['Content-Length']).to eq 123
297
- end
298
-
299
- it 'does not change the Transfer-Encoding header' do
300
- subject.sendfile file_path
301
-
302
- expect(subject.header['Transfer-Encoding']).to eq 'base64'
303
- end
304
- end
305
-
306
- context 'as object' do
307
- let(:file_object) { double('StreamerObject', each: nil) }
308
-
309
- it 'raises an error that only a file path is supported' do
310
- expect { subject.sendfile file_object }.to raise_error(ArgumentError, /Argument must be a file path/)
311
- end
312
- end
313
- end
314
-
315
- it 'returns default' do
316
- expect(subject.sendfile).to be_nil
317
- end
318
- end
319
-
320
- describe '#stream' do
321
- describe 'set' do
322
- context 'as a file path' do
323
- let(:file_path) { '/some/file/path' }
324
-
325
- let(:file_response) do
326
- file_body = Grape::ServeStream::FileBody.new(file_path)
327
- Grape::ServeStream::StreamResponse.new(file_body)
328
- end
329
-
330
- before do
331
- subject.header 'Cache-Control', 'cache'
332
- subject.header 'Content-Length', 123
333
- subject.header 'Transfer-Encoding', 'base64'
334
- end
335
-
336
- it 'emits no deprecation warnings' do
337
- expect(subject).not_to receive(:warn)
338
-
339
- subject.stream file_path
340
- end
341
-
342
- it 'returns file body wrapped in StreamResponse' do
343
- subject.stream file_path
344
-
345
- expect(subject.stream).to eq file_response
346
- end
347
-
348
- it 'sets Cache-Control header to no-cache' do
349
- subject.stream file_path
350
-
351
- expect(subject.header['Cache-Control']).to eq 'no-cache'
352
- end
353
-
354
- it 'does not change Cache-Control header' do
355
- subject.stream
356
-
357
- expect(subject.header['Cache-Control']).to eq 'cache'
358
- end
359
-
360
- it 'sets Content-Length header to nil' do
361
- subject.stream file_path
362
-
363
- expect(subject.header['Content-Length']).to be_nil
364
- end
365
-
366
- it 'sets Transfer-Encoding header to nil' do
367
- subject.stream file_path
368
-
369
- expect(subject.header['Transfer-Encoding']).to be_nil
370
- end
371
- end
372
-
373
- context 'as a stream object' do
374
- let(:stream_object) { double('StreamerObject', each: nil) }
375
-
376
- let(:stream_response) do
377
- Grape::ServeStream::StreamResponse.new(stream_object)
378
- end
379
-
380
- before do
381
- subject.header 'Cache-Control', 'cache'
382
- subject.header 'Content-Length', 123
383
- subject.header 'Transfer-Encoding', 'base64'
384
- end
385
-
386
- it 'emits no deprecation warnings' do
387
- expect(subject).not_to receive(:warn)
388
-
389
- subject.stream stream_object
390
- end
391
-
392
- it 'returns value wrapped in StreamResponse' do
393
- subject.stream stream_object
394
-
395
- expect(subject.stream).to eq stream_response
396
- end
397
-
398
- it 'sets Cache-Control header to no-cache' do
399
- subject.stream stream_object
400
-
401
- expect(subject.header['Cache-Control']).to eq 'no-cache'
402
- end
403
-
404
- it 'sets Content-Length header to nil' do
405
- subject.stream stream_object
406
-
407
- expect(subject.header['Content-Length']).to be_nil
408
- end
409
-
410
- it 'sets Transfer-Encoding header to nil' do
411
- subject.stream stream_object
412
-
413
- expect(subject.header['Transfer-Encoding']).to be_nil
414
- end
415
- end
416
-
417
- context 'as a non-stream object' do
418
- let(:non_stream_object) { double('NonStreamerObject') }
419
-
420
- it 'raises an error that the object must implement :each' do
421
- expect { subject.stream non_stream_object }.to raise_error(ArgumentError, /:each/)
422
- end
423
- end
424
- end
425
-
426
- it 'returns default' do
427
- expect(subject.stream).to be_nil
428
- expect(subject.header['Cache-Control']).to be_nil
429
- end
430
- end
431
-
432
- describe '#route' do
433
- before do
434
- subject.env['grape.routing_args'] = {}
435
- subject.env['grape.routing_args'][:route_info] = 'dummy'
436
- end
437
-
438
- it 'returns route_info' do
439
- expect(subject.route).to eq 'dummy'
440
- end
441
- end
442
-
443
- describe '#present' do
444
- # see entity_spec.rb for entity representation spec coverage
445
-
446
- describe 'dummy' do
447
- before do
448
- subject.present 'dummy'
449
- end
450
-
451
- it 'presents dummy object' do
452
- expect(subject.body).to eq 'dummy'
453
- end
454
- end
455
-
456
- describe 'with' do
457
- describe 'entity' do
458
- let(:entity_mock) do
459
- entity_mock = Object.new
460
- allow(entity_mock).to receive(:represent).and_return('dummy')
461
- entity_mock
462
- end
463
-
464
- describe 'instance' do
465
- before do
466
- subject.present 'dummy', with: entity_mock
467
- end
468
-
469
- it 'presents dummy object' do
470
- expect(subject.body).to eq 'dummy'
471
- end
472
- end
473
- end
474
- end
475
-
476
- describe 'multiple entities' do
477
- let(:entity_mock_one) do
478
- entity_mock_one = Object.new
479
- allow(entity_mock_one).to receive(:represent).and_return(dummy1: 'dummy1')
480
- entity_mock_one
481
- end
482
-
483
- let(:entity_mock_two) do
484
- entity_mock_two = Object.new
485
- allow(entity_mock_two).to receive(:represent).and_return(dummy2: 'dummy2')
486
- entity_mock_two
487
- end
488
-
489
- describe 'instance' do
490
- before do
491
- subject.present 'dummy1', with: entity_mock_one
492
- subject.present 'dummy2', with: entity_mock_two
493
- end
494
-
495
- it 'presents both dummy objects' do
496
- expect(subject.body[:dummy1]).to eq 'dummy1'
497
- expect(subject.body[:dummy2]).to eq 'dummy2'
498
- end
499
- end
500
- end
501
-
502
- describe 'non mergeable entity' do
503
- let(:entity_mock_one) do
504
- entity_mock_one = Object.new
505
- allow(entity_mock_one).to receive(:represent).and_return(dummy1: 'dummy1')
506
- entity_mock_one
507
- end
508
-
509
- let(:entity_mock_two) do
510
- entity_mock_two = Object.new
511
- allow(entity_mock_two).to receive(:represent).and_return('not a hash')
512
- entity_mock_two
513
- end
514
-
515
- describe 'instance' do
516
- it 'fails' do
517
- subject.present 'dummy1', with: entity_mock_one
518
- expect do
519
- subject.present 'dummy2', with: entity_mock_two
520
- end.to raise_error ArgumentError, 'Representation of type String cannot be merged.'
521
- end
522
- end
523
- end
524
- end
525
-
526
- describe '#declared' do
527
- # see endpoint_spec.rb#declared for spec coverage
528
-
529
- it 'is not available by default' do
530
- expect { subject.declared({}) }.to raise_error(
531
- Grape::DSL::InsideRoute::MethodNotYetAvailable
532
- )
533
- end
534
- end
535
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Grape::DSL::Logger do
4
- subject { Class.new(dummy_logger) }
5
-
6
- let(:dummy_logger) do
7
- Class.new do
8
- extend Grape::DSL::Logger
9
- end
10
- end
11
-
12
- let(:logger) { instance_double(::Logger) }
13
-
14
- describe '.logger' do
15
- it 'sets a logger' do
16
- subject.logger logger
17
- expect(subject.logger).to eq logger
18
- end
19
-
20
- it 'returns a logger' do
21
- expect(subject.logger(logger)).to eq logger
22
- end
23
- end
24
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module DSL
5
- module MiddlewareSpec
6
- class Dummy
7
- include Grape::DSL::Middleware
8
- end
9
- end
10
-
11
- describe Middleware do
12
- subject { Class.new(MiddlewareSpec::Dummy) }
13
-
14
- let(:proc) { -> {} }
15
- let(:foo_middleware) { Class.new }
16
- let(:bar_middleware) { Class.new }
17
-
18
- describe '.use' do
19
- it 'adds a middleware with the right operation' do
20
- expect(subject).to receive(:namespace_stackable).with(:middleware, [:use, foo_middleware, :arg1, proc])
21
-
22
- subject.use foo_middleware, :arg1, &proc
23
- end
24
- end
25
-
26
- describe '.insert' do
27
- it 'adds a middleware with the right operation' do
28
- expect(subject).to receive(:namespace_stackable).with(:middleware, [:insert, 0, :arg1, proc])
29
-
30
- subject.insert 0, :arg1, &proc
31
- end
32
- end
33
-
34
- describe '.insert_before' do
35
- it 'adds a middleware with the right operation' do
36
- expect(subject).to receive(:namespace_stackable).with(:middleware, [:insert_before, foo_middleware, :arg1, proc])
37
-
38
- subject.insert_before foo_middleware, :arg1, &proc
39
- end
40
- end
41
-
42
- describe '.insert_after' do
43
- it 'adds a middleware with the right operation' do
44
- expect(subject).to receive(:namespace_stackable).with(:middleware, [:insert_after, foo_middleware, :arg1, proc])
45
-
46
- subject.insert_after foo_middleware, :arg1, &proc
47
- end
48
- end
49
-
50
- describe '.middleware' do
51
- it 'returns the middleware stack' do
52
- subject.use foo_middleware, :arg1, &proc
53
- subject.insert_before bar_middleware, :arg1, :arg2
54
-
55
- expect(subject.middleware).to eq [[:use, foo_middleware, :arg1, proc], [:insert_before, bar_middleware, :arg1, :arg2]]
56
- end
57
- end
58
- end
59
- end
60
- end