grape 1.5.2 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (210) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +75 -0
  3. data/CONTRIBUTING.md +2 -1
  4. data/README.md +152 -21
  5. data/UPGRADING.md +86 -2
  6. data/grape.gemspec +5 -5
  7. data/lib/grape/api/instance.rb +14 -18
  8. data/lib/grape/api.rb +18 -13
  9. data/lib/grape/cookies.rb +2 -0
  10. data/lib/grape/dry_types.rb +12 -0
  11. data/lib/grape/dsl/api.rb +0 -2
  12. data/lib/grape/dsl/callbacks.rb +0 -2
  13. data/lib/grape/dsl/configuration.rb +0 -2
  14. data/lib/grape/dsl/desc.rb +2 -19
  15. data/lib/grape/dsl/headers.rb +5 -2
  16. data/lib/grape/dsl/helpers.rb +7 -7
  17. data/lib/grape/dsl/inside_route.rb +43 -30
  18. data/lib/grape/dsl/middleware.rb +4 -6
  19. data/lib/grape/dsl/parameters.rb +8 -10
  20. data/lib/grape/dsl/request_response.rb +9 -8
  21. data/lib/grape/dsl/routing.rb +6 -4
  22. data/lib/grape/dsl/settings.rb +5 -7
  23. data/lib/grape/dsl/validations.rb +0 -15
  24. data/lib/grape/endpoint.rb +21 -36
  25. data/lib/grape/error_formatter/json.rb +9 -7
  26. data/lib/grape/error_formatter/xml.rb +2 -6
  27. data/lib/grape/exceptions/base.rb +2 -2
  28. data/lib/grape/exceptions/empty_message_body.rb +11 -0
  29. data/lib/grape/exceptions/missing_group_type.rb +8 -1
  30. data/lib/grape/exceptions/too_many_multipart_files.rb +11 -0
  31. data/lib/grape/exceptions/unsupported_group_type.rb +8 -1
  32. data/lib/grape/exceptions/validation.rb +1 -6
  33. data/lib/grape/formatter/json.rb +1 -0
  34. data/lib/grape/formatter/serializable_hash.rb +2 -1
  35. data/lib/grape/formatter/xml.rb +1 -0
  36. data/lib/grape/locale/en.yml +9 -8
  37. data/lib/grape/middleware/auth/dsl.rb +7 -2
  38. data/lib/grape/middleware/base.rb +3 -1
  39. data/lib/grape/middleware/error.rb +2 -2
  40. data/lib/grape/middleware/formatter.rb +4 -4
  41. data/lib/grape/middleware/stack.rb +2 -2
  42. data/lib/grape/middleware/versioner/accept_version_header.rb +3 -5
  43. data/lib/grape/middleware/versioner/header.rb +6 -4
  44. data/lib/grape/middleware/versioner/param.rb +1 -0
  45. data/lib/grape/middleware/versioner/parse_media_type_patch.rb +2 -1
  46. data/lib/grape/middleware/versioner/path.rb +2 -0
  47. data/lib/grape/parser/json.rb +1 -1
  48. data/lib/grape/parser/xml.rb +1 -1
  49. data/lib/grape/path.rb +1 -0
  50. data/lib/grape/request.rb +5 -0
  51. data/lib/grape/router/pattern.rb +1 -1
  52. data/lib/grape/router/route.rb +2 -2
  53. data/lib/grape/router.rb +6 -0
  54. data/lib/grape/util/inheritable_setting.rb +1 -3
  55. data/lib/grape/util/json.rb +2 -0
  56. data/lib/grape/util/lazy_value.rb +3 -2
  57. data/lib/grape/util/strict_hash_configuration.rb +1 -1
  58. data/lib/grape/validations/attributes_doc.rb +58 -0
  59. data/lib/grape/validations/params_scope.rb +137 -78
  60. data/lib/grape/validations/types/array_coercer.rb +0 -2
  61. data/lib/grape/validations/types/custom_type_coercer.rb +1 -2
  62. data/lib/grape/validations/types/dry_type_coercer.rb +4 -8
  63. data/lib/grape/validations/types/json.rb +2 -1
  64. data/lib/grape/validations/types/primitive_coercer.rb +16 -8
  65. data/lib/grape/validations/types/set_coercer.rb +0 -2
  66. data/lib/grape/validations/types.rb +98 -30
  67. data/lib/grape/validations/validators/all_or_none_of_validator.rb +16 -0
  68. data/lib/grape/validations/validators/allow_blank_validator.rb +20 -0
  69. data/lib/grape/validations/validators/as_validator.rb +14 -0
  70. data/lib/grape/validations/validators/at_least_one_of_validator.rb +15 -0
  71. data/lib/grape/validations/validators/base.rb +82 -70
  72. data/lib/grape/validations/validators/coerce_validator.rb +75 -0
  73. data/lib/grape/validations/validators/default_validator.rb +51 -0
  74. data/lib/grape/validations/validators/exactly_one_of_validator.rb +17 -0
  75. data/lib/grape/validations/validators/except_values_validator.rb +24 -0
  76. data/lib/grape/validations/validators/multiple_params_base.rb +24 -20
  77. data/lib/grape/validations/validators/mutual_exclusion_validator.rb +16 -0
  78. data/lib/grape/validations/validators/presence_validator.rb +15 -0
  79. data/lib/grape/validations/validators/regexp_validator.rb +16 -0
  80. data/lib/grape/validations/validators/same_as_validator.rb +29 -0
  81. data/lib/grape/validations/validators/values_validator.rb +88 -0
  82. data/lib/grape/validations.rb +16 -6
  83. data/lib/grape/version.rb +1 -1
  84. data/lib/grape.rb +70 -29
  85. data/spec/grape/api/custom_validations_spec.rb +116 -45
  86. data/spec/grape/api/deeply_included_options_spec.rb +3 -5
  87. data/spec/grape/api/defines_boolean_in_params_spec.rb +2 -3
  88. data/spec/grape/api/documentation_spec.rb +59 -0
  89. data/spec/grape/api/inherited_helpers_spec.rb +0 -2
  90. data/spec/grape/api/instance_spec.rb +0 -1
  91. data/spec/grape/api/invalid_format_spec.rb +2 -2
  92. data/spec/grape/api/namespace_parameters_in_route_spec.rb +0 -2
  93. data/spec/grape/api/nested_helpers_spec.rb +0 -2
  94. data/spec/grape/api/optional_parameters_in_route_spec.rb +0 -2
  95. data/spec/grape/api/parameters_modification_spec.rb +0 -2
  96. data/spec/grape/api/patch_method_helpers_spec.rb +0 -2
  97. data/spec/grape/api/recognize_path_spec.rb +1 -3
  98. data/spec/grape/api/required_parameters_in_route_spec.rb +0 -2
  99. data/spec/grape/api/required_parameters_with_invalid_method_spec.rb +0 -2
  100. data/spec/grape/api/routes_with_requirements_spec.rb +8 -10
  101. data/spec/grape/api/shared_helpers_exactly_one_of_spec.rb +9 -17
  102. data/spec/grape/api/shared_helpers_spec.rb +0 -2
  103. data/spec/grape/api_remount_spec.rb +16 -16
  104. data/spec/grape/api_spec.rb +527 -224
  105. data/spec/grape/config_spec.rb +0 -2
  106. data/spec/grape/dsl/callbacks_spec.rb +2 -3
  107. data/spec/grape/dsl/configuration_spec.rb +0 -2
  108. data/spec/grape/dsl/desc_spec.rb +0 -2
  109. data/spec/grape/dsl/headers_spec.rb +39 -11
  110. data/spec/grape/dsl/helpers_spec.rb +3 -4
  111. data/spec/grape/dsl/inside_route_spec.rb +16 -16
  112. data/spec/grape/dsl/logger_spec.rb +15 -19
  113. data/spec/grape/dsl/middleware_spec.rb +2 -3
  114. data/spec/grape/dsl/parameters_spec.rb +2 -2
  115. data/spec/grape/dsl/request_response_spec.rb +7 -8
  116. data/spec/grape/dsl/routing_spec.rb +11 -10
  117. data/spec/grape/dsl/settings_spec.rb +0 -2
  118. data/spec/grape/dsl/validations_spec.rb +0 -17
  119. data/spec/grape/endpoint/declared_spec.rb +261 -16
  120. data/spec/grape/endpoint_spec.rb +98 -57
  121. data/spec/grape/entity_spec.rb +22 -23
  122. data/spec/grape/exceptions/base_spec.rb +16 -2
  123. data/spec/grape/exceptions/body_parse_errors_spec.rb +3 -2
  124. data/spec/grape/exceptions/invalid_accept_header_spec.rb +61 -24
  125. data/spec/grape/exceptions/invalid_formatter_spec.rb +0 -2
  126. data/spec/grape/exceptions/invalid_response_spec.rb +0 -2
  127. data/spec/grape/exceptions/invalid_versioner_option_spec.rb +1 -3
  128. data/spec/grape/exceptions/missing_group_type_spec.rb +21 -0
  129. data/spec/grape/exceptions/missing_mime_type_spec.rb +0 -2
  130. data/spec/grape/exceptions/missing_option_spec.rb +1 -3
  131. data/spec/grape/exceptions/unknown_options_spec.rb +0 -2
  132. data/spec/grape/exceptions/unknown_validator_spec.rb +0 -2
  133. data/spec/grape/exceptions/unsupported_group_type_spec.rb +23 -0
  134. data/spec/grape/exceptions/validation_errors_spec.rb +13 -11
  135. data/spec/grape/exceptions/validation_spec.rb +5 -5
  136. data/spec/grape/extensions/param_builders/hash_spec.rb +7 -9
  137. data/spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb +8 -10
  138. data/spec/grape/extensions/param_builders/hashie/mash_spec.rb +8 -10
  139. data/spec/grape/integration/global_namespace_function_spec.rb +0 -2
  140. data/spec/grape/integration/rack_sendfile_spec.rb +1 -3
  141. data/spec/grape/integration/rack_spec.rb +0 -2
  142. data/spec/grape/loading_spec.rb +8 -10
  143. data/spec/grape/middleware/auth/base_spec.rb +0 -1
  144. data/spec/grape/middleware/auth/dsl_spec.rb +15 -8
  145. data/spec/grape/middleware/auth/strategies_spec.rb +60 -22
  146. data/spec/grape/middleware/base_spec.rb +24 -17
  147. data/spec/grape/middleware/error_spec.rb +8 -3
  148. data/spec/grape/middleware/exception_spec.rb +111 -163
  149. data/spec/grape/middleware/formatter_spec.rb +27 -8
  150. data/spec/grape/middleware/globals_spec.rb +7 -6
  151. data/spec/grape/middleware/stack_spec.rb +14 -14
  152. data/spec/grape/middleware/versioner/accept_version_header_spec.rb +2 -3
  153. data/spec/grape/middleware/versioner/header_spec.rb +30 -15
  154. data/spec/grape/middleware/versioner/param_spec.rb +7 -3
  155. data/spec/grape/middleware/versioner/path_spec.rb +5 -3
  156. data/spec/grape/middleware/versioner_spec.rb +1 -3
  157. data/spec/grape/named_api_spec.rb +0 -2
  158. data/spec/grape/parser_spec.rb +4 -2
  159. data/spec/grape/path_spec.rb +52 -54
  160. data/spec/grape/presenters/presenter_spec.rb +7 -8
  161. data/spec/grape/request_spec.rb +6 -6
  162. data/spec/grape/util/inheritable_setting_spec.rb +7 -8
  163. data/spec/grape/util/inheritable_values_spec.rb +3 -3
  164. data/spec/grape/util/reverse_stackable_values_spec.rb +3 -2
  165. data/spec/grape/util/stackable_values_spec.rb +7 -6
  166. data/spec/grape/util/strict_hash_configuration_spec.rb +0 -1
  167. data/spec/grape/validations/attributes_doc_spec.rb +153 -0
  168. data/spec/grape/validations/attributes_iterator_spec.rb +0 -2
  169. data/spec/grape/validations/instance_behaivour_spec.rb +9 -12
  170. data/spec/grape/validations/multiple_attributes_iterator_spec.rb +1 -2
  171. data/spec/grape/validations/params_scope_spec.rb +361 -96
  172. data/spec/grape/validations/single_attribute_iterator_spec.rb +2 -3
  173. data/spec/grape/validations/types/array_coercer_spec.rb +0 -2
  174. data/spec/grape/validations/types/primitive_coercer_spec.rb +24 -9
  175. data/spec/grape/validations/types/set_coercer_spec.rb +0 -2
  176. data/spec/grape/validations/types_spec.rb +36 -10
  177. data/spec/grape/validations/validators/all_or_none_spec.rb +50 -58
  178. data/spec/grape/validations/validators/allow_blank_spec.rb +135 -141
  179. data/spec/grape/validations/validators/at_least_one_of_spec.rb +50 -58
  180. data/spec/grape/validations/validators/coerce_spec.rb +99 -24
  181. data/spec/grape/validations/validators/default_spec.rb +72 -80
  182. data/spec/grape/validations/validators/exactly_one_of_spec.rb +71 -79
  183. data/spec/grape/validations/validators/except_values_spec.rb +3 -5
  184. data/spec/grape/validations/validators/mutual_exclusion_spec.rb +71 -79
  185. data/spec/grape/validations/validators/presence_spec.rb +16 -3
  186. data/spec/grape/validations/validators/regexp_spec.rb +25 -33
  187. data/spec/grape/validations/validators/same_as_spec.rb +14 -22
  188. data/spec/grape/validations/validators/values_spec.rb +182 -179
  189. data/spec/grape/validations_spec.rb +149 -80
  190. data/spec/integration/eager_load/eager_load_spec.rb +2 -2
  191. data/spec/integration/multi_json/json_spec.rb +1 -3
  192. data/spec/integration/multi_xml/xml_spec.rb +1 -3
  193. data/spec/shared/versioning_examples.rb +12 -9
  194. data/spec/spec_helper.rb +21 -6
  195. data/spec/support/basic_auth_encode_helpers.rb +1 -1
  196. metadata +125 -115
  197. data/lib/grape/validations/validators/all_or_none.rb +0 -15
  198. data/lib/grape/validations/validators/allow_blank.rb +0 -18
  199. data/lib/grape/validations/validators/as.rb +0 -16
  200. data/lib/grape/validations/validators/at_least_one_of.rb +0 -14
  201. data/lib/grape/validations/validators/coerce.rb +0 -91
  202. data/lib/grape/validations/validators/default.rb +0 -48
  203. data/lib/grape/validations/validators/exactly_one_of.rb +0 -16
  204. data/lib/grape/validations/validators/except_values.rb +0 -22
  205. data/lib/grape/validations/validators/mutual_exclusion.rb +0 -15
  206. data/lib/grape/validations/validators/presence.rb +0 -12
  207. data/lib/grape/validations/validators/regexp.rb +0 -13
  208. data/lib/grape/validations/validators/same_as.rb +0 -26
  209. data/lib/grape/validations/validators/values.rb +0 -83
  210. data/spec/support/eager_load.rb +0 -19
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  describe '.configure' do
6
4
  before do
7
5
  Grape.configure do |config|
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module CallbacksSpec
@@ -12,7 +10,8 @@ module Grape
12
10
 
13
11
  describe Callbacks do
14
12
  subject { Class.new(CallbacksSpec::Dummy) }
15
- let(:proc) { ->() {} }
13
+
14
+ let(:proc) { -> {} }
16
15
 
17
16
  describe '.before' do
18
17
  it 'adds a block to "before"' do
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module ConfigurationSpec
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module DescSpec
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module HeadersSpec
@@ -12,21 +10,51 @@ module Grape
12
10
  describe Headers do
13
11
  subject { HeadersSpec::Dummy.new }
14
12
 
15
- describe '#header' do
16
- describe 'set' do
13
+ let(:header_data) do
14
+ { 'First Key' => 'First Value',
15
+ 'Second Key' => 'Second Value' }
16
+ end
17
+
18
+ context 'when headers are set' do
19
+ describe '#header' do
17
20
  before do
18
- subject.header 'Name', 'Value'
21
+ header_data.each { |k, v| subject.header(k, v) }
22
+ end
23
+
24
+ describe 'get' do
25
+ it 'returns a specifc value' do
26
+ expect(subject.header['First Key']).to eq 'First Value'
27
+ expect(subject.header['Second Key']).to eq 'Second Value'
28
+ end
29
+
30
+ it 'returns all set headers' do
31
+ expect(subject.header).to eq header_data
32
+ expect(subject.headers).to eq header_data
33
+ end
34
+ end
35
+
36
+ describe 'set' do
37
+ it 'returns value' do
38
+ expect(subject.header('Third Key', 'Third Value'))
39
+ expect(subject.header['Third Key']).to eq 'Third Value'
40
+ end
19
41
  end
20
42
 
21
- it 'returns value' do
22
- expect(subject.header['Name']).to eq 'Value'
23
- expect(subject.header('Name')).to eq 'Value'
43
+ describe 'delete' do
44
+ it 'deletes a header key-value pair' do
45
+ expect(subject.header('First Key')).to eq header_data['First Key']
46
+ expect(subject.header).not_to have_key('First Key')
47
+ end
24
48
  end
25
49
  end
50
+ end
26
51
 
27
- it 'returns nil' do
28
- expect(subject.header['Name']).to be nil
29
- expect(subject.header('Name')).to be nil
52
+ context 'when no headers are set' do
53
+ describe '#header' do
54
+ it 'returns nil' do
55
+ expect(subject.header['First Key']).to be_nil
56
+ expect(subject.header('First Key')).to be_nil
57
+ end
30
58
  end
31
59
  end
32
60
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module HelpersSpec
@@ -34,6 +32,7 @@ module Grape
34
32
 
35
33
  describe Helpers do
36
34
  subject { Class.new(HelpersSpec::Dummy) }
35
+
37
36
  let(:proc) do
38
37
  lambda do |*|
39
38
  def test
@@ -54,7 +53,7 @@ module Grape
54
53
  it 'uses provided modules' do
55
54
  mod = Module.new
56
55
 
57
- expect(subject).to receive(:namespace_stackable).with(:helpers, kind_of(Grape::DSL::Helpers::BaseHelper)).and_call_original.exactly(2).times
56
+ expect(subject).to receive(:namespace_stackable).with(:helpers, kind_of(Grape::DSL::Helpers::BaseHelper)).and_call_original.twice
58
57
  expect(subject).to receive(:namespace_stackable).with(:helpers).and_call_original
59
58
  subject.helpers(mod, &proc)
60
59
 
@@ -92,7 +91,7 @@ module Grape
92
91
  use :requires_toggle_prm
93
92
  end
94
93
  end
95
- end.to_not raise_exception
94
+ end.not_to raise_exception
96
95
  end
97
96
  end
98
97
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module InsideRouteSpec
@@ -25,7 +23,7 @@ describe Grape::Endpoint do
25
23
 
26
24
  describe '#version' do
27
25
  it 'defaults to nil' do
28
- expect(subject.version).to be nil
26
+ expect(subject.version).to be_nil
29
27
  end
30
28
 
31
29
  it 'returns env[api.version]' do
@@ -43,6 +41,7 @@ describe Grape::Endpoint do
43
41
  before do
44
42
  catch(:error) { subject.error! 'Not Found', 404 }
45
43
  end
44
+
46
45
  it 'sets status' do
47
46
  expect(subject.status).to eq 404
48
47
  end
@@ -53,6 +52,7 @@ describe Grape::Endpoint do
53
52
  subject.namespace_inheritable(:default_error_status, 500)
54
53
  catch(:error) { subject.error! 'Unknown' }
55
54
  end
55
+
56
56
  it 'sets status to default_error_status' do
57
57
  expect(subject.status).to eq 500
58
58
  end
@@ -136,7 +136,7 @@ describe Grape::Endpoint do
136
136
  end
137
137
 
138
138
  it 'accepts unknown Integer status codes' do
139
- expect { subject.status 210 }.to_not raise_error
139
+ expect { subject.status 210 }.not_to raise_error
140
140
  end
141
141
 
142
142
  it 'raises error if status is not a integer or symbol' do
@@ -165,7 +165,7 @@ describe Grape::Endpoint do
165
165
  end
166
166
 
167
167
  it 'returns default' do
168
- expect(subject.content_type).to be nil
168
+ expect(subject.content_type).to be_nil
169
169
  end
170
170
  end
171
171
 
@@ -198,7 +198,7 @@ describe Grape::Endpoint do
198
198
  end
199
199
 
200
200
  it 'returns default' do
201
- expect(subject.body).to be nil
201
+ expect(subject.body).to be_nil
202
202
  end
203
203
  end
204
204
 
@@ -273,7 +273,7 @@ describe Grape::Endpoint do
273
273
  end
274
274
 
275
275
  it 'sends no deprecation warnings' do
276
- expect(subject).to_not receive(:warn)
276
+ expect(subject).not_to receive(:warn)
277
277
 
278
278
  subject.sendfile file_path
279
279
  end
@@ -313,7 +313,7 @@ describe Grape::Endpoint do
313
313
  end
314
314
 
315
315
  it 'returns default' do
316
- expect(subject.sendfile).to be nil
316
+ expect(subject.sendfile).to be_nil
317
317
  end
318
318
  end
319
319
 
@@ -334,7 +334,7 @@ describe Grape::Endpoint do
334
334
  end
335
335
 
336
336
  it 'emits no deprecation warnings' do
337
- expect(subject).to_not receive(:warn)
337
+ expect(subject).not_to receive(:warn)
338
338
 
339
339
  subject.stream file_path
340
340
  end
@@ -360,13 +360,13 @@ describe Grape::Endpoint do
360
360
  it 'sets Content-Length header to nil' do
361
361
  subject.stream file_path
362
362
 
363
- expect(subject.header['Content-Length']).to eq nil
363
+ expect(subject.header['Content-Length']).to be_nil
364
364
  end
365
365
 
366
366
  it 'sets Transfer-Encoding header to nil' do
367
367
  subject.stream file_path
368
368
 
369
- expect(subject.header['Transfer-Encoding']).to eq nil
369
+ expect(subject.header['Transfer-Encoding']).to be_nil
370
370
  end
371
371
  end
372
372
 
@@ -384,7 +384,7 @@ describe Grape::Endpoint do
384
384
  end
385
385
 
386
386
  it 'emits no deprecation warnings' do
387
- expect(subject).to_not receive(:warn)
387
+ expect(subject).not_to receive(:warn)
388
388
 
389
389
  subject.stream stream_object
390
390
  end
@@ -404,13 +404,13 @@ describe Grape::Endpoint do
404
404
  it 'sets Content-Length header to nil' do
405
405
  subject.stream stream_object
406
406
 
407
- expect(subject.header['Content-Length']).to eq nil
407
+ expect(subject.header['Content-Length']).to be_nil
408
408
  end
409
409
 
410
410
  it 'sets Transfer-Encoding header to nil' do
411
411
  subject.stream stream_object
412
412
 
413
- expect(subject.header['Transfer-Encoding']).to eq nil
413
+ expect(subject.header['Transfer-Encoding']).to be_nil
414
414
  end
415
415
  end
416
416
 
@@ -424,8 +424,8 @@ describe Grape::Endpoint do
424
424
  end
425
425
 
426
426
  it 'returns default' do
427
- expect(subject.stream).to be nil
428
- expect(subject.header['Cache-Control']).to eq nil
427
+ expect(subject.stream).to be_nil
428
+ expect(subject.header['Cache-Control']).to be_nil
429
429
  end
430
430
  end
431
431
 
@@ -1,28 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ describe Grape::DSL::Logger do
4
+ subject { Class.new(dummy_logger) }
4
5
 
5
- module Grape
6
- module DSL
7
- module LoggerSpec
8
- class Dummy
9
- extend Grape::DSL::Logger
10
- end
6
+ let(:dummy_logger) do
7
+ Class.new do
8
+ extend Grape::DSL::Logger
11
9
  end
12
- describe Logger do
13
- subject { Class.new(LoggerSpec::Dummy) }
14
- let(:logger) { double(:logger) }
10
+ end
11
+
12
+ let(:logger) { instance_double(::Logger) }
15
13
 
16
- describe '.logger' do
17
- it 'sets a logger' do
18
- subject.logger logger
19
- expect(subject.logger).to eq logger
20
- end
14
+ describe '.logger' do
15
+ it 'sets a logger' do
16
+ subject.logger logger
17
+ expect(subject.logger).to eq logger
18
+ end
21
19
 
22
- it 'returns a logger' do
23
- expect(subject.logger(logger)).to eq logger
24
- end
25
- end
20
+ it 'returns a logger' do
21
+ expect(subject.logger(logger)).to eq logger
26
22
  end
27
23
  end
28
24
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module MiddlewareSpec
@@ -12,7 +10,8 @@ module Grape
12
10
 
13
11
  describe Middleware do
14
12
  subject { Class.new(MiddlewareSpec::Dummy) }
15
- let(:proc) { ->() {} }
13
+
14
+ let(:proc) { -> {} }
16
15
  let(:foo_middleware) { Class.new }
17
16
  let(:bar_middleware) { Class.new }
18
17
 
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module ParametersSpec
@@ -40,6 +38,7 @@ module Grape
40
38
 
41
39
  def extract_message_option(attrs)
42
40
  return nil unless attrs.is_a?(Array)
41
+
43
42
  opts = attrs.last.is_a?(Hash) ? attrs.pop : {}
44
43
  opts.key?(:message) && !opts[:message].nil? ? opts.delete(:message) : nil
45
44
  end
@@ -54,6 +53,7 @@ module Grape
54
53
  allow_message_expectations_on_nil
55
54
  allow(subject.api).to receive(:namespace_stackable).with(:named_params)
56
55
  end
56
+
57
57
  let(:options) { { option: 'value' } }
58
58
  let(:named_params) { { params_group: proc {} } }
59
59
 
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module RequestResponseSpec
@@ -20,6 +18,7 @@ module Grape
20
18
 
21
19
  describe RequestResponse do
22
20
  subject { Class.new(RequestResponseSpec::Dummy) }
21
+
23
22
  let(:c_type) { 'application/json' }
24
23
  let(:format) { 'txt' }
25
24
 
@@ -161,34 +160,34 @@ module Grape
161
160
 
162
161
  describe 'list of exceptions is passed' do
163
162
  it 'sets hash of exceptions as rescue handlers' do
164
- expect(subject).to receive(:namespace_reverse_stackable).with(:rescue_handlers, StandardError => nil)
163
+ expect(subject).to receive(:namespace_reverse_stackable).with(:rescue_handlers, { StandardError => nil })
165
164
  expect(subject).to receive(:namespace_stackable).with(:rescue_options, {})
166
165
  subject.rescue_from StandardError
167
166
  end
168
167
 
169
168
  it 'rescues only base handlers if rescue_subclasses: false option is passed' do
170
- expect(subject).to receive(:namespace_reverse_stackable).with(:base_only_rescue_handlers, StandardError => nil)
171
- expect(subject).to receive(:namespace_stackable).with(:rescue_options, rescue_subclasses: false)
169
+ expect(subject).to receive(:namespace_reverse_stackable).with(:base_only_rescue_handlers, { StandardError => nil })
170
+ expect(subject).to receive(:namespace_stackable).with(:rescue_options, { rescue_subclasses: false })
172
171
  subject.rescue_from StandardError, rescue_subclasses: false
173
172
  end
174
173
 
175
174
  it 'sets given proc as rescue handler for each key in hash' do
176
175
  rescue_handler_proc = proc {}
177
- expect(subject).to receive(:namespace_reverse_stackable).with(:rescue_handlers, StandardError => rescue_handler_proc)
176
+ expect(subject).to receive(:namespace_reverse_stackable).with(:rescue_handlers, { StandardError => rescue_handler_proc })
178
177
  expect(subject).to receive(:namespace_stackable).with(:rescue_options, {})
179
178
  subject.rescue_from StandardError, rescue_handler_proc
180
179
  end
181
180
 
182
181
  it 'sets given block as rescue handler for each key in hash' do
183
182
  rescue_handler_proc = proc {}
184
- expect(subject).to receive(:namespace_reverse_stackable).with(:rescue_handlers, StandardError => rescue_handler_proc)
183
+ expect(subject).to receive(:namespace_reverse_stackable).with(:rescue_handlers, { StandardError => rescue_handler_proc })
185
184
  expect(subject).to receive(:namespace_stackable).with(:rescue_options, {})
186
185
  subject.rescue_from StandardError, &rescue_handler_proc
187
186
  end
188
187
 
189
188
  it 'sets a rescue handler declared through :with option for each key in hash' do
190
189
  with_block = -> { 'hello' }
191
- expect(subject).to receive(:namespace_reverse_stackable).with(:rescue_handlers, StandardError => an_instance_of(Proc))
190
+ expect(subject).to receive(:namespace_reverse_stackable).with(:rescue_handlers, { StandardError => an_instance_of(Proc) })
192
191
  expect(subject).to receive(:namespace_stackable).with(:rescue_options, {})
193
192
  subject.rescue_from StandardError, with: with_block
194
193
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module RoutingSpec
@@ -12,7 +10,8 @@ module Grape
12
10
 
13
11
  describe Routing do
14
12
  subject { Class.new(RoutingSpec::Dummy) }
15
- let(:proc) { ->() {} }
13
+
14
+ let(:proc) { -> {} }
16
15
  let(:options) { { a: :b } }
17
16
  let(:path) { '/dummy' }
18
17
 
@@ -20,7 +19,7 @@ module Grape
20
19
  it 'sets a version for route' do
21
20
  version = 'v1'
22
21
  expect(subject).to receive(:namespace_inheritable).with(:version, [version])
23
- expect(subject).to receive(:namespace_inheritable).with(:version_options, using: :path)
22
+ expect(subject).to receive(:namespace_inheritable).with(:version_options, { using: :path })
24
23
  expect(subject.version(version)).to eq(version)
25
24
  end
26
25
  end
@@ -109,7 +108,7 @@ module Grape
109
108
  it 'does not duplicate identical endpoints' do
110
109
  subject.route(:any)
111
110
  expect { subject.route(:any) }
112
- .to_not change(subject.endpoints, :count)
111
+ .not_to change(subject.endpoints, :count)
113
112
  end
114
113
 
115
114
  it 'generates correct endpoint options' do
@@ -233,21 +232,23 @@ module Grape
233
232
  allow(subject).to receive(:prepare_routes).and_return(routes)
234
233
  subject.routes
235
234
  end
236
- it 'it does not call prepare_routes again' do
237
- expect(subject).to_not receive(:prepare_routes)
235
+
236
+ it 'does not call prepare_routes again' do
237
+ expect(subject).not_to receive(:prepare_routes)
238
238
  expect(subject.routes).to eq routes
239
239
  end
240
240
  end
241
241
  end
242
242
 
243
243
  describe '.route_param' do
244
+ let!(:options) { { requirements: regex } }
245
+ let(:regex) { /(.*)/ }
246
+
244
247
  it 'calls #namespace with given params' do
245
248
  expect(subject).to receive(:namespace).with(':foo', {}).and_yield
246
249
  subject.route_param('foo', {}, &proc {})
247
250
  end
248
251
 
249
- let(:regex) { /(.*)/ }
250
- let!(:options) { { requirements: regex } }
251
252
  it 'nests requirements option under param name' do
252
253
  expect(subject).to receive(:namespace) do |_param, options|
253
254
  expect(options[:requirements][:foo]).to eq regex
@@ -258,7 +259,7 @@ module Grape
258
259
  it 'does not modify options parameter' do
259
260
  allow(subject).to receive(:namespace)
260
261
  expect { subject.route_param('foo', options, &proc {}) }
261
- .to_not change { options }
262
+ .not_to change { options }
262
263
  end
263
264
  end
264
265
 
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module SettingsSpec
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module Grape
6
4
  module DSL
7
5
  module ValidationsSpec
@@ -38,10 +36,6 @@ module Grape
38
36
  expect(subject.namespace_stackable(:params)).to eq []
39
37
  end
40
38
 
41
- it 'resets documentation params' do
42
- expect(subject.route_setting(:description)[:params]).to be_nil
43
- end
44
-
45
39
  it 'does not reset documentation description' do
46
40
  expect(subject.route_setting(:description)[:description]).to eq 'lol'
47
41
  end
@@ -56,17 +50,6 @@ module Grape
56
50
  expect { subject.params { raise 'foo' } }.to raise_error RuntimeError, 'foo'
57
51
  end
58
52
  end
59
-
60
- describe '.document_attribute' do
61
- before do
62
- subject.document_attribute([full_name: 'xxx'], foo: 'bar')
63
- end
64
-
65
- it 'creates a param documentation' do
66
- expect(subject.namespace_stackable(:params)).to eq(['xxx' => { foo: 'bar' }])
67
- expect(subject.route_setting(:description)).to eq(params: { 'xxx' => { foo: 'bar' } })
68
- end
69
- end
70
53
  end
71
54
  end
72
55
  end