grape 1.5.3 → 1.7.1

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 (211) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +92 -0
  3. data/CONTRIBUTING.md +32 -1
  4. data/README.md +176 -25
  5. data/UPGRADING.md +61 -4
  6. data/grape.gemspec +6 -6
  7. data/lib/grape/api/instance.rb +14 -18
  8. data/lib/grape/api.rb +17 -12
  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 +4 -20
  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 +13 -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 +22 -37
  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 +3 -2
  28. data/lib/grape/exceptions/missing_group_type.rb +8 -1
  29. data/lib/grape/exceptions/too_many_multipart_files.rb +11 -0
  30. data/lib/grape/exceptions/unsupported_group_type.rb +8 -1
  31. data/lib/grape/exceptions/validation.rb +1 -6
  32. data/lib/grape/formatter/json.rb +1 -0
  33. data/lib/grape/formatter/serializable_hash.rb +2 -1
  34. data/lib/grape/formatter/xml.rb +1 -0
  35. data/lib/grape/locale/en.yml +9 -8
  36. data/lib/grape/middleware/auth/dsl.rb +7 -2
  37. data/lib/grape/middleware/base.rb +3 -1
  38. data/lib/grape/middleware/error.rb +2 -2
  39. data/lib/grape/middleware/formatter.rb +4 -4
  40. data/lib/grape/middleware/stack.rb +3 -3
  41. data/lib/grape/middleware/versioner/accept_version_header.rb +3 -5
  42. data/lib/grape/middleware/versioner/header.rb +6 -4
  43. data/lib/grape/middleware/versioner/param.rb +1 -0
  44. data/lib/grape/middleware/versioner/parse_media_type_patch.rb +2 -1
  45. data/lib/grape/middleware/versioner/path.rb +2 -0
  46. data/lib/grape/path.rb +1 -0
  47. data/lib/grape/request.rb +4 -1
  48. data/lib/grape/router/attribute_translator.rb +1 -1
  49. data/lib/grape/router/pattern.rb +1 -1
  50. data/lib/grape/router/route.rb +2 -2
  51. data/lib/grape/router.rb +6 -0
  52. data/lib/grape/types/invalid_value.rb +8 -0
  53. data/lib/grape/util/cache.rb +1 -1
  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 +138 -79
  60. data/lib/grape/validations/types/array_coercer.rb +0 -2
  61. data/lib/grape/validations/types/custom_type_coercer.rb +1 -0
  62. data/lib/grape/validations/types/dry_type_coercer.rb +4 -8
  63. data/lib/grape/validations/types/invalid_value.rb +0 -7
  64. data/lib/grape/validations/types/json.rb +2 -1
  65. data/lib/grape/validations/types/primitive_coercer.rb +16 -8
  66. data/lib/grape/validations/types/set_coercer.rb +0 -2
  67. data/lib/grape/validations/types.rb +98 -30
  68. data/lib/grape/validations/validators/all_or_none_of_validator.rb +16 -0
  69. data/lib/grape/validations/validators/allow_blank_validator.rb +20 -0
  70. data/lib/grape/validations/validators/as_validator.rb +14 -0
  71. data/lib/grape/validations/validators/at_least_one_of_validator.rb +15 -0
  72. data/lib/grape/validations/validators/base.rb +82 -70
  73. data/lib/grape/validations/validators/coerce_validator.rb +75 -0
  74. data/lib/grape/validations/validators/default_validator.rb +51 -0
  75. data/lib/grape/validations/validators/exactly_one_of_validator.rb +17 -0
  76. data/lib/grape/validations/validators/except_values_validator.rb +24 -0
  77. data/lib/grape/validations/validators/multiple_params_base.rb +24 -20
  78. data/lib/grape/validations/validators/mutual_exclusion_validator.rb +16 -0
  79. data/lib/grape/validations/validators/presence_validator.rb +15 -0
  80. data/lib/grape/validations/validators/regexp_validator.rb +16 -0
  81. data/lib/grape/validations/validators/same_as_validator.rb +29 -0
  82. data/lib/grape/validations/validators/values_validator.rb +88 -0
  83. data/lib/grape/validations.rb +16 -6
  84. data/lib/grape/version.rb +1 -1
  85. data/lib/grape.rb +77 -29
  86. data/spec/grape/api/custom_validations_spec.rb +116 -45
  87. data/spec/grape/api/deeply_included_options_spec.rb +3 -5
  88. data/spec/grape/api/defines_boolean_in_params_spec.rb +2 -3
  89. data/spec/grape/api/documentation_spec.rb +59 -0
  90. data/spec/grape/api/inherited_helpers_spec.rb +0 -2
  91. data/spec/grape/api/instance_spec.rb +0 -1
  92. data/spec/grape/api/invalid_format_spec.rb +2 -2
  93. data/spec/grape/api/namespace_parameters_in_route_spec.rb +0 -2
  94. data/spec/grape/api/nested_helpers_spec.rb +0 -2
  95. data/spec/grape/api/optional_parameters_in_route_spec.rb +0 -2
  96. data/spec/grape/api/parameters_modification_spec.rb +0 -2
  97. data/spec/grape/api/patch_method_helpers_spec.rb +0 -2
  98. data/spec/grape/api/recognize_path_spec.rb +1 -3
  99. data/spec/grape/api/required_parameters_in_route_spec.rb +0 -2
  100. data/spec/grape/api/required_parameters_with_invalid_method_spec.rb +0 -2
  101. data/spec/grape/api/routes_with_requirements_spec.rb +8 -10
  102. data/spec/grape/api/shared_helpers_exactly_one_of_spec.rb +9 -17
  103. data/spec/grape/api/shared_helpers_spec.rb +0 -2
  104. data/spec/grape/api_remount_spec.rb +16 -16
  105. data/spec/grape/api_spec.rb +462 -251
  106. data/spec/grape/config_spec.rb +0 -2
  107. data/spec/grape/dsl/callbacks_spec.rb +2 -3
  108. data/spec/grape/dsl/desc_spec.rb +2 -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 +88 -59
  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 +64 -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 +6 -7
  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 +28 -19
  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 +33 -14
  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/instance_behaivour_spec.rb +9 -12
  169. data/spec/grape/validations/multiple_attributes_iterator_spec.rb +1 -2
  170. data/spec/grape/validations/params_scope_spec.rb +361 -96
  171. data/spec/grape/validations/single_attribute_iterator_spec.rb +2 -3
  172. data/spec/grape/validations/types/array_coercer_spec.rb +0 -2
  173. data/spec/grape/validations/types/primitive_coercer_spec.rb +24 -9
  174. data/spec/grape/validations/types/set_coercer_spec.rb +0 -2
  175. data/spec/grape/validations/types_spec.rb +36 -10
  176. data/spec/grape/validations/validators/all_or_none_spec.rb +50 -58
  177. data/spec/grape/validations/validators/allow_blank_spec.rb +135 -141
  178. data/spec/grape/validations/validators/at_least_one_of_spec.rb +50 -58
  179. data/spec/grape/validations/validators/coerce_spec.rb +23 -24
  180. data/spec/grape/validations/validators/default_spec.rb +72 -80
  181. data/spec/grape/validations/validators/exactly_one_of_spec.rb +71 -79
  182. data/spec/grape/validations/validators/except_values_spec.rb +3 -5
  183. data/spec/grape/validations/validators/mutual_exclusion_spec.rb +71 -79
  184. data/spec/grape/validations/validators/presence_spec.rb +16 -3
  185. data/spec/grape/validations/validators/regexp_spec.rb +25 -33
  186. data/spec/grape/validations/validators/same_as_spec.rb +14 -22
  187. data/spec/grape/validations/validators/values_spec.rb +201 -179
  188. data/spec/grape/validations_spec.rb +171 -79
  189. data/spec/integration/eager_load/eager_load_spec.rb +2 -2
  190. data/spec/integration/multi_json/json_spec.rb +1 -3
  191. data/spec/integration/multi_xml/xml_spec.rb +1 -3
  192. data/spec/shared/versioning_examples.rb +12 -9
  193. data/spec/spec_helper.rb +21 -6
  194. data/spec/support/basic_auth_encode_helpers.rb +1 -1
  195. metadata +41 -29
  196. data/lib/grape/validations/validators/all_or_none.rb +0 -15
  197. data/lib/grape/validations/validators/allow_blank.rb +0 -18
  198. data/lib/grape/validations/validators/as.rb +0 -16
  199. data/lib/grape/validations/validators/at_least_one_of.rb +0 -14
  200. data/lib/grape/validations/validators/coerce.rb +0 -91
  201. data/lib/grape/validations/validators/default.rb +0 -48
  202. data/lib/grape/validations/validators/exactly_one_of.rb +0 -16
  203. data/lib/grape/validations/validators/except_values.rb +0 -22
  204. data/lib/grape/validations/validators/mutual_exclusion.rb +0 -15
  205. data/lib/grape/validations/validators/presence.rb +0 -12
  206. data/lib/grape/validations/validators/regexp.rb +0 -13
  207. data/lib/grape/validations/validators/same_as.rb +0 -26
  208. data/lib/grape/validations/validators/values.rb +0 -83
  209. data/spec/grape/dsl/configuration_spec.rb +0 -16
  210. data/spec/grape/validations/attributes_iterator_spec.rb +0 -6
  211. 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 DescSpec
@@ -28,6 +26,7 @@ module Grape
28
26
  detail: 'more details',
29
27
  params: { first: :param },
30
28
  entity: Object,
29
+ default: { code: 400, message: 'Invalid' },
31
30
  http_codes: [[401, 'Unauthorized', 'Entities::Error']],
32
31
  named: 'My named route',
33
32
  body_name: 'My body name',
@@ -56,6 +55,7 @@ module Grape
56
55
  detail 'more details'
57
56
  params(first: :param)
58
57
  success Object
58
+ default code: 400, message: 'Invalid'
59
59
  failure [[401, 'Unauthorized', 'Entities::Error']]
60
60
  named 'My named route'
61
61
  body_name 'My body name'
@@ -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