grape 1.5.2 → 1.7.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 (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
@@ -35,14 +35,14 @@ shared_examples_for 'versioning' do
35
35
  end
36
36
 
37
37
  versioned_get '/awesome', 'v1', **macro_options
38
- expect(last_response.status).to eql 404
38
+ expect(last_response.status).to be 404
39
39
 
40
40
  versioned_get '/awesome', 'v2', **macro_options
41
- expect(last_response.status).to eql 200
41
+ expect(last_response.status).to be 200
42
42
  versioned_get '/legacy', 'v1', **macro_options
43
- expect(last_response.status).to eql 200
43
+ expect(last_response.status).to be 200
44
44
  versioned_get '/legacy', 'v2', **macro_options
45
- expect(last_response.status).to eql 404
45
+ expect(last_response.status).to be 404
46
46
  end
47
47
 
48
48
  it 'is able to specify multiple versions' do
@@ -52,11 +52,11 @@ shared_examples_for 'versioning' do
52
52
  end
53
53
 
54
54
  versioned_get '/awesome', 'v1', **macro_options
55
- expect(last_response.status).to eql 200
55
+ expect(last_response.status).to be 200
56
56
  versioned_get '/awesome', 'v2', **macro_options
57
- expect(last_response.status).to eql 200
57
+ expect(last_response.status).to be 200
58
58
  versioned_get '/awesome', 'v3', **macro_options
59
- expect(last_response.status).to eql 404
59
+ expect(last_response.status).to be 404
60
60
  end
61
61
 
62
62
  context 'with different versions for the same endpoint' do
@@ -70,7 +70,7 @@ shared_examples_for 'versioning' do
70
70
 
71
71
  subject.version 'v1', macro_options do
72
72
  get 'version' do
73
- 'version ' + request.env['api.version']
73
+ "version #{request.env['api.version']}"
74
74
  end
75
75
  end
76
76
 
@@ -94,7 +94,7 @@ shared_examples_for 'versioning' do
94
94
 
95
95
  subject.version 'v1', macro_options do
96
96
  get 'version' do
97
- 'version ' + request.env['api.version']
97
+ "version #{request.env['api.version']}"
98
98
  end
99
99
  end
100
100
 
@@ -117,6 +117,7 @@ shared_examples_for 'versioning' do
117
117
  before do
118
118
  @output ||= 'v2-'
119
119
  end
120
+
120
121
  get 'version' do
121
122
  @output += 'version'
122
123
  end
@@ -126,6 +127,7 @@ shared_examples_for 'versioning' do
126
127
  before do
127
128
  @output ||= 'v1-'
128
129
  end
130
+
129
131
  get 'version' do
130
132
  @output += 'version'
131
133
  end
@@ -170,6 +172,7 @@ shared_examples_for 'versioning' do
170
172
  end
171
173
  klass
172
174
  end
175
+
173
176
  before do
174
177
  subject.format :txt
175
178
 
data/spec/spec_helper.rb CHANGED
@@ -5,17 +5,24 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
5
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
6
6
 
7
7
  require 'grape'
8
+ require 'test_prof/recipes/rspec/let_it_be'
9
+
10
+ class NullAdapter
11
+ def begin_transaction; end
12
+
13
+ def rollback_transaction; end
14
+ end
15
+
16
+ TestProf::BeforeAll.adapter = NullAdapter.new
8
17
 
9
18
  require 'rubygems'
10
19
  require 'bundler'
11
20
  Bundler.require :default, :test
12
21
 
13
- Dir["#{File.dirname(__FILE__)}/support/*.rb"].each do |file|
22
+ Dir["#{File.dirname(__FILE__)}/support/*.rb"].sort.each do |file|
14
23
  require file
15
24
  end
16
25
 
17
- eager_load!
18
-
19
26
  # The default value for this setting is true in a standard Rails app,
20
27
  # so it should be set to true here as well to reflect that.
21
28
  I18n.enforce_available_locales = true
@@ -27,11 +34,19 @@ RSpec.configure do |config|
27
34
  config.filter_run_when_matching :focus
28
35
  config.warnings = true
29
36
 
30
- config.before(:each) { Grape::Util::InheritableSetting.reset_global! }
37
+ config.before(:all) { Grape::Util::InheritableSetting.reset_global! }
38
+ config.before { Grape::Util::InheritableSetting.reset_global! }
31
39
 
32
40
  # Enable flags like --only-failures and --next-failure
33
41
  config.example_status_persistence_file_path = '.rspec_status'
34
42
  end
35
43
 
36
- require 'coveralls'
37
- Coveralls.wear!
44
+ require 'simplecov'
45
+ require 'simplecov-lcov'
46
+ SimpleCov::Formatter::LcovFormatter.config do |c|
47
+ c.report_with_single_file = true
48
+ c.single_report_path = 'coverage/lcov.info'
49
+ end
50
+
51
+ SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
52
+ SimpleCov.start
@@ -4,7 +4,7 @@ module Spec
4
4
  module Support
5
5
  module Helpers
6
6
  def encode_basic_auth(username, password)
7
- 'Basic ' + Base64.encode64("#{username}:#{password}")
7
+ "Basic #{Base64.encode64("#{username}:#{password}")}"
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-06 00:00:00.000000000 Z
11
+ date: 2022-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -115,6 +115,7 @@ files:
115
115
  - lib/grape/config.rb
116
116
  - lib/grape/content_types.rb
117
117
  - lib/grape/cookies.rb
118
+ - lib/grape/dry_types.rb
118
119
  - lib/grape/dsl/api.rb
119
120
  - lib/grape/dsl/callbacks.rb
120
121
  - lib/grape/dsl/configuration.rb
@@ -137,6 +138,7 @@ files:
137
138
  - lib/grape/error_formatter/txt.rb
138
139
  - lib/grape/error_formatter/xml.rb
139
140
  - lib/grape/exceptions/base.rb
141
+ - lib/grape/exceptions/empty_message_body.rb
140
142
  - lib/grape/exceptions/incompatible_option_values.rb
141
143
  - lib/grape/exceptions/invalid_accept_header.rb
142
144
  - lib/grape/exceptions/invalid_formatter.rb
@@ -150,6 +152,7 @@ files:
150
152
  - lib/grape/exceptions/missing_mime_type.rb
151
153
  - lib/grape/exceptions/missing_option.rb
152
154
  - lib/grape/exceptions/missing_vendor_option.rb
155
+ - lib/grape/exceptions/too_many_multipart_files.rb
153
156
  - lib/grape/exceptions/unknown_options.rb
154
157
  - lib/grape/exceptions/unknown_parameter.rb
155
158
  - lib/grape/exceptions/unknown_validator.rb
@@ -216,6 +219,7 @@ files:
216
219
  - lib/grape/util/strict_hash_configuration.rb
217
220
  - lib/grape/util/xml.rb
218
221
  - lib/grape/validations.rb
222
+ - lib/grape/validations/attributes_doc.rb
219
223
  - lib/grape/validations/attributes_iterator.rb
220
224
  - lib/grape/validations/multiple_attributes_iterator.rb
221
225
  - lib/grape/validations/params_scope.rb
@@ -234,25 +238,26 @@ files:
234
238
  - lib/grape/validations/types/set_coercer.rb
235
239
  - lib/grape/validations/types/variant_collection_coercer.rb
236
240
  - lib/grape/validations/validator_factory.rb
237
- - lib/grape/validations/validators/all_or_none.rb
238
- - lib/grape/validations/validators/allow_blank.rb
239
- - lib/grape/validations/validators/as.rb
240
- - lib/grape/validations/validators/at_least_one_of.rb
241
+ - lib/grape/validations/validators/all_or_none_of_validator.rb
242
+ - lib/grape/validations/validators/allow_blank_validator.rb
243
+ - lib/grape/validations/validators/as_validator.rb
244
+ - lib/grape/validations/validators/at_least_one_of_validator.rb
241
245
  - lib/grape/validations/validators/base.rb
242
- - lib/grape/validations/validators/coerce.rb
243
- - lib/grape/validations/validators/default.rb
244
- - lib/grape/validations/validators/exactly_one_of.rb
245
- - lib/grape/validations/validators/except_values.rb
246
+ - lib/grape/validations/validators/coerce_validator.rb
247
+ - lib/grape/validations/validators/default_validator.rb
248
+ - lib/grape/validations/validators/exactly_one_of_validator.rb
249
+ - lib/grape/validations/validators/except_values_validator.rb
246
250
  - lib/grape/validations/validators/multiple_params_base.rb
247
- - lib/grape/validations/validators/mutual_exclusion.rb
248
- - lib/grape/validations/validators/presence.rb
249
- - lib/grape/validations/validators/regexp.rb
250
- - lib/grape/validations/validators/same_as.rb
251
- - lib/grape/validations/validators/values.rb
251
+ - lib/grape/validations/validators/mutual_exclusion_validator.rb
252
+ - lib/grape/validations/validators/presence_validator.rb
253
+ - lib/grape/validations/validators/regexp_validator.rb
254
+ - lib/grape/validations/validators/same_as_validator.rb
255
+ - lib/grape/validations/validators/values_validator.rb
252
256
  - lib/grape/version.rb
253
257
  - spec/grape/api/custom_validations_spec.rb
254
258
  - spec/grape/api/deeply_included_options_spec.rb
255
259
  - spec/grape/api/defines_boolean_in_params_spec.rb
260
+ - spec/grape/api/documentation_spec.rb
256
261
  - spec/grape/api/inherited_helpers_spec.rb
257
262
  - spec/grape/api/instance_spec.rb
258
263
  - spec/grape/api/invalid_format_spec.rb
@@ -292,10 +297,12 @@ files:
292
297
  - spec/grape/exceptions/invalid_formatter_spec.rb
293
298
  - spec/grape/exceptions/invalid_response_spec.rb
294
299
  - spec/grape/exceptions/invalid_versioner_option_spec.rb
300
+ - spec/grape/exceptions/missing_group_type_spec.rb
295
301
  - spec/grape/exceptions/missing_mime_type_spec.rb
296
302
  - spec/grape/exceptions/missing_option_spec.rb
297
303
  - spec/grape/exceptions/unknown_options_spec.rb
298
304
  - spec/grape/exceptions/unknown_validator_spec.rb
305
+ - spec/grape/exceptions/unsupported_group_type_spec.rb
299
306
  - spec/grape/exceptions/validation_errors_spec.rb
300
307
  - spec/grape/exceptions/validation_spec.rb
301
308
  - spec/grape/extensions/param_builders/hash_spec.rb
@@ -329,6 +336,7 @@ files:
329
336
  - spec/grape/util/reverse_stackable_values_spec.rb
330
337
  - spec/grape/util/stackable_values_spec.rb
331
338
  - spec/grape/util/strict_hash_configuration_spec.rb
339
+ - spec/grape/validations/attributes_doc_spec.rb
332
340
  - spec/grape/validations/attributes_iterator_spec.rb
333
341
  - spec/grape/validations/instance_behaivour_spec.rb
334
342
  - spec/grape/validations/multiple_attributes_iterator_spec.rb
@@ -360,7 +368,6 @@ files:
360
368
  - spec/support/basic_auth_encode_helpers.rb
361
369
  - spec/support/chunks.rb
362
370
  - spec/support/content_type_helpers.rb
363
- - spec/support/eager_load.rb
364
371
  - spec/support/endpoint_faker.rb
365
372
  - spec/support/file_streamer.rb
366
373
  - spec/support/integer_helpers.rb
@@ -370,10 +377,10 @@ licenses:
370
377
  - MIT
371
378
  metadata:
372
379
  bug_tracker_uri: https://github.com/ruby-grape/grape/issues
373
- changelog_uri: https://github.com/ruby-grape/grape/blob/v1.5.2/CHANGELOG.md
374
- documentation_uri: https://www.rubydoc.info/gems/grape/1.5.2
375
- source_code_uri: https://github.com/ruby-grape/grape/tree/v1.5.2
376
- post_install_message:
380
+ changelog_uri: https://github.com/ruby-grape/grape/blob/v1.7.0/CHANGELOG.md
381
+ documentation_uri: https://www.rubydoc.info/gems/grape/1.7.0
382
+ source_code_uri: https://github.com/ruby-grape/grape/tree/v1.7.0
383
+ post_install_message:
377
384
  rdoc_options: []
378
385
  require_paths:
379
386
  - lib
@@ -381,130 +388,133 @@ required_ruby_version: !ruby/object:Gem::Requirement
381
388
  requirements:
382
389
  - - ">="
383
390
  - !ruby/object:Gem::Version
384
- version: 2.4.0
391
+ version: 2.5.0
385
392
  required_rubygems_version: !ruby/object:Gem::Requirement
386
393
  requirements:
387
394
  - - ">="
388
395
  - !ruby/object:Gem::Version
389
396
  version: '0'
390
397
  requirements: []
391
- rubygems_version: 3.1.2
392
- signing_key:
398
+ rubygems_version: 3.3.7
399
+ signing_key:
393
400
  specification_version: 4
394
401
  summary: A simple Ruby framework for building REST-like APIs.
395
402
  test_files:
396
- - spec/shared/versioning_examples.rb
397
- - spec/support/versioned_helpers.rb
398
- - spec/support/content_type_helpers.rb
399
- - spec/support/eager_load.rb
400
- - spec/support/basic_auth_encode_helpers.rb
401
- - spec/support/file_streamer.rb
402
- - spec/support/chunks.rb
403
- - spec/support/endpoint_faker.rb
404
- - spec/support/integer_helpers.rb
405
- - spec/grape/api/namespace_parameters_in_route_spec.rb
406
- - spec/grape/api/routes_with_requirements_spec.rb
407
- - spec/grape/api/nested_helpers_spec.rb
408
- - spec/grape/api/required_parameters_in_route_spec.rb
409
- - spec/grape/api/shared_helpers_exactly_one_of_spec.rb
410
- - spec/grape/api/parameters_modification_spec.rb
411
- - spec/grape/api/optional_parameters_in_route_spec.rb
412
- - spec/grape/api/inherited_helpers_spec.rb
413
- - spec/grape/api/required_parameters_with_invalid_method_spec.rb
414
403
  - spec/grape/api/custom_validations_spec.rb
415
- - spec/grape/api/defines_boolean_in_params_spec.rb
416
- - spec/grape/api/shared_helpers_spec.rb
417
- - spec/grape/api/invalid_format_spec.rb
418
404
  - spec/grape/api/deeply_included_options_spec.rb
405
+ - spec/grape/api/defines_boolean_in_params_spec.rb
406
+ - spec/grape/api/documentation_spec.rb
407
+ - spec/grape/api/inherited_helpers_spec.rb
419
408
  - spec/grape/api/instance_spec.rb
409
+ - spec/grape/api/invalid_format_spec.rb
410
+ - spec/grape/api/namespace_parameters_in_route_spec.rb
411
+ - spec/grape/api/nested_helpers_spec.rb
412
+ - spec/grape/api/optional_parameters_in_route_spec.rb
413
+ - spec/grape/api/parameters_modification_spec.rb
420
414
  - spec/grape/api/patch_method_helpers_spec.rb
421
415
  - spec/grape/api/recognize_path_spec.rb
416
+ - spec/grape/api/required_parameters_in_route_spec.rb
417
+ - spec/grape/api/required_parameters_with_invalid_method_spec.rb
418
+ - spec/grape/api/routes_with_requirements_spec.rb
419
+ - spec/grape/api/shared_helpers_exactly_one_of_spec.rb
420
+ - spec/grape/api/shared_helpers_spec.rb
422
421
  - spec/grape/api_remount_spec.rb
423
- - spec/grape/validations/types_spec.rb
424
- - spec/grape/validations/attributes_iterator_spec.rb
425
- - spec/grape/validations/types/array_coercer_spec.rb
426
- - spec/grape/validations/types/set_coercer_spec.rb
427
- - spec/grape/validations/types/primitive_coercer_spec.rb
428
- - spec/grape/validations/validators/regexp_spec.rb
429
- - spec/grape/validations/validators/default_spec.rb
430
- - spec/grape/validations/validators/values_spec.rb
431
- - spec/grape/validations/validators/same_as_spec.rb
432
- - spec/grape/validations/validators/mutual_exclusion_spec.rb
433
- - spec/grape/validations/validators/except_values_spec.rb
434
- - spec/grape/validations/validators/exactly_one_of_spec.rb
435
- - spec/grape/validations/validators/allow_blank_spec.rb
436
- - spec/grape/validations/validators/coerce_spec.rb
437
- - spec/grape/validations/validators/presence_spec.rb
438
- - spec/grape/validations/validators/at_least_one_of_spec.rb
439
- - spec/grape/validations/validators/zh-CN.yml
440
- - spec/grape/validations/validators/all_or_none_spec.rb
441
- - spec/grape/validations/params_scope_spec.rb
442
- - spec/grape/validations/multiple_attributes_iterator_spec.rb
443
- - spec/grape/validations/instance_behaivour_spec.rb
444
- - spec/grape/validations/single_attribute_iterator_spec.rb
422
+ - spec/grape/api_spec.rb
445
423
  - spec/grape/config_spec.rb
446
- - spec/grape/parser_spec.rb
424
+ - spec/grape/dsl/callbacks_spec.rb
425
+ - spec/grape/dsl/configuration_spec.rb
426
+ - spec/grape/dsl/desc_spec.rb
427
+ - spec/grape/dsl/headers_spec.rb
428
+ - spec/grape/dsl/helpers_spec.rb
429
+ - spec/grape/dsl/inside_route_spec.rb
430
+ - spec/grape/dsl/logger_spec.rb
431
+ - spec/grape/dsl/middleware_spec.rb
432
+ - spec/grape/dsl/parameters_spec.rb
433
+ - spec/grape/dsl/request_response_spec.rb
434
+ - spec/grape/dsl/routing_spec.rb
435
+ - spec/grape/dsl/settings_spec.rb
436
+ - spec/grape/dsl/validations_spec.rb
437
+ - spec/grape/endpoint/declared_spec.rb
438
+ - spec/grape/endpoint_spec.rb
439
+ - spec/grape/entity_spec.rb
440
+ - spec/grape/exceptions/base_spec.rb
447
441
  - spec/grape/exceptions/body_parse_errors_spec.rb
448
- - spec/grape/exceptions/missing_option_spec.rb
449
442
  - spec/grape/exceptions/invalid_accept_header_spec.rb
450
- - spec/grape/exceptions/validation_spec.rb
451
- - spec/grape/exceptions/unknown_validator_spec.rb
452
- - spec/grape/exceptions/validation_errors_spec.rb
453
- - spec/grape/exceptions/invalid_response_spec.rb
454
- - spec/grape/exceptions/unknown_options_spec.rb
455
443
  - spec/grape/exceptions/invalid_formatter_spec.rb
444
+ - spec/grape/exceptions/invalid_response_spec.rb
456
445
  - spec/grape/exceptions/invalid_versioner_option_spec.rb
446
+ - spec/grape/exceptions/missing_group_type_spec.rb
457
447
  - spec/grape/exceptions/missing_mime_type_spec.rb
458
- - spec/grape/exceptions/base_spec.rb
459
- - spec/grape/path_spec.rb
460
- - spec/grape/util/stackable_values_spec.rb
461
- - spec/grape/util/strict_hash_configuration_spec.rb
462
- - spec/grape/util/inheritable_setting_spec.rb
463
- - spec/grape/util/reverse_stackable_values_spec.rb
464
- - spec/grape/util/inheritable_values_spec.rb
465
- - spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb
448
+ - spec/grape/exceptions/missing_option_spec.rb
449
+ - spec/grape/exceptions/unknown_options_spec.rb
450
+ - spec/grape/exceptions/unknown_validator_spec.rb
451
+ - spec/grape/exceptions/unsupported_group_type_spec.rb
452
+ - spec/grape/exceptions/validation_errors_spec.rb
453
+ - spec/grape/exceptions/validation_spec.rb
466
454
  - spec/grape/extensions/param_builders/hash_spec.rb
455
+ - spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb
467
456
  - spec/grape/extensions/param_builders/hashie/mash_spec.rb
468
- - spec/grape/integration/rack_spec.rb
469
- - spec/grape/integration/rack_sendfile_spec.rb
470
457
  - spec/grape/integration/global_namespace_function_spec.rb
471
- - spec/grape/endpoint/declared_spec.rb
472
- - spec/grape/presenters/presenter_spec.rb
473
- - spec/grape/endpoint_spec.rb
474
- - spec/grape/api_spec.rb
458
+ - spec/grape/integration/rack_sendfile_spec.rb
459
+ - spec/grape/integration/rack_spec.rb
460
+ - spec/grape/loading_spec.rb
461
+ - spec/grape/middleware/auth/base_spec.rb
462
+ - spec/grape/middleware/auth/dsl_spec.rb
463
+ - spec/grape/middleware/auth/strategies_spec.rb
464
+ - spec/grape/middleware/base_spec.rb
465
+ - spec/grape/middleware/error_spec.rb
475
466
  - spec/grape/middleware/exception_spec.rb
476
- - spec/grape/middleware/versioner/param_spec.rb
477
- - spec/grape/middleware/versioner/header_spec.rb
478
- - spec/grape/middleware/versioner/path_spec.rb
479
- - spec/grape/middleware/versioner/accept_version_header_spec.rb
467
+ - spec/grape/middleware/formatter_spec.rb
480
468
  - spec/grape/middleware/globals_spec.rb
481
469
  - spec/grape/middleware/stack_spec.rb
482
- - spec/grape/middleware/formatter_spec.rb
483
- - spec/grape/middleware/error_spec.rb
484
- - spec/grape/middleware/auth/dsl_spec.rb
485
- - spec/grape/middleware/auth/strategies_spec.rb
486
- - spec/grape/middleware/auth/base_spec.rb
470
+ - spec/grape/middleware/versioner/accept_version_header_spec.rb
471
+ - spec/grape/middleware/versioner/header_spec.rb
472
+ - spec/grape/middleware/versioner/param_spec.rb
473
+ - spec/grape/middleware/versioner/path_spec.rb
487
474
  - spec/grape/middleware/versioner_spec.rb
488
- - spec/grape/middleware/base_spec.rb
489
- - spec/grape/entity_spec.rb
490
- - spec/grape/dsl/settings_spec.rb
491
- - spec/grape/dsl/callbacks_spec.rb
492
- - spec/grape/dsl/middleware_spec.rb
493
- - spec/grape/dsl/inside_route_spec.rb
494
- - spec/grape/dsl/configuration_spec.rb
495
- - spec/grape/dsl/parameters_spec.rb
496
- - spec/grape/dsl/logger_spec.rb
497
- - spec/grape/dsl/helpers_spec.rb
498
- - spec/grape/dsl/request_response_spec.rb
499
- - spec/grape/dsl/routing_spec.rb
500
- - spec/grape/dsl/headers_spec.rb
501
- - spec/grape/dsl/validations_spec.rb
502
- - spec/grape/dsl/desc_spec.rb
503
- - spec/grape/validations_spec.rb
504
475
  - spec/grape/named_api_spec.rb
505
- - spec/grape/loading_spec.rb
476
+ - spec/grape/parser_spec.rb
477
+ - spec/grape/path_spec.rb
478
+ - spec/grape/presenters/presenter_spec.rb
506
479
  - spec/grape/request_spec.rb
480
+ - spec/grape/util/inheritable_setting_spec.rb
481
+ - spec/grape/util/inheritable_values_spec.rb
482
+ - spec/grape/util/reverse_stackable_values_spec.rb
483
+ - spec/grape/util/stackable_values_spec.rb
484
+ - spec/grape/util/strict_hash_configuration_spec.rb
485
+ - spec/grape/validations/attributes_doc_spec.rb
486
+ - spec/grape/validations/attributes_iterator_spec.rb
487
+ - spec/grape/validations/instance_behaivour_spec.rb
488
+ - spec/grape/validations/multiple_attributes_iterator_spec.rb
489
+ - spec/grape/validations/params_scope_spec.rb
490
+ - spec/grape/validations/single_attribute_iterator_spec.rb
491
+ - spec/grape/validations/types/array_coercer_spec.rb
492
+ - spec/grape/validations/types/primitive_coercer_spec.rb
493
+ - spec/grape/validations/types/set_coercer_spec.rb
494
+ - spec/grape/validations/types_spec.rb
495
+ - spec/grape/validations/validators/all_or_none_spec.rb
496
+ - spec/grape/validations/validators/allow_blank_spec.rb
497
+ - spec/grape/validations/validators/at_least_one_of_spec.rb
498
+ - spec/grape/validations/validators/coerce_spec.rb
499
+ - spec/grape/validations/validators/default_spec.rb
500
+ - spec/grape/validations/validators/exactly_one_of_spec.rb
501
+ - spec/grape/validations/validators/except_values_spec.rb
502
+ - spec/grape/validations/validators/mutual_exclusion_spec.rb
503
+ - spec/grape/validations/validators/presence_spec.rb
504
+ - spec/grape/validations/validators/regexp_spec.rb
505
+ - spec/grape/validations/validators/same_as_spec.rb
506
+ - spec/grape/validations/validators/values_spec.rb
507
+ - spec/grape/validations/validators/zh-CN.yml
508
+ - spec/grape/validations_spec.rb
507
509
  - spec/integration/eager_load/eager_load_spec.rb
508
- - spec/integration/multi_xml/xml_spec.rb
509
510
  - spec/integration/multi_json/json_spec.rb
511
+ - spec/integration/multi_xml/xml_spec.rb
512
+ - spec/shared/versioning_examples.rb
510
513
  - spec/spec_helper.rb
514
+ - spec/support/basic_auth_encode_helpers.rb
515
+ - spec/support/chunks.rb
516
+ - spec/support/content_type_helpers.rb
517
+ - spec/support/endpoint_faker.rb
518
+ - spec/support/file_streamer.rb
519
+ - spec/support/integer_helpers.rb
520
+ - spec/support/versioned_helpers.rb
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'grape/validations/validators/multiple_params_base'
4
-
5
- module Grape
6
- module Validations
7
- class AllOrNoneOfValidator < MultipleParamsBase
8
- def validate_params!(params)
9
- keys = keys_in_common(params)
10
- return if keys.empty? || keys.length == all_keys.length
11
- raise Grape::Exceptions::Validation.new(params: all_keys, message: message(:all_or_none))
12
- end
13
- end
14
- end
15
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module Validations
5
- class AllowBlankValidator < Base
6
- def validate_param!(attr_name, params)
7
- return if (options_key?(:value) ? @option[:value] : @option) || !params.is_a?(Hash)
8
-
9
- value = params[attr_name]
10
- value = value.strip if value.respond_to?(:strip)
11
-
12
- return if value == false || value.present?
13
-
14
- raise Grape::Exceptions::Validation.new(params: [@scope.full_name(attr_name)], message: message(:blank))
15
- end
16
- end
17
- end
18
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module Validations
5
- class AsValidator < Base
6
- def initialize(attrs, options, required, scope, **opts)
7
- @renamed_options = options
8
- super
9
- end
10
-
11
- def validate_param!(attr_name, params)
12
- params[@renamed_options] = params[attr_name]
13
- end
14
- end
15
- end
16
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'grape/validations/validators/multiple_params_base'
4
-
5
- module Grape
6
- module Validations
7
- class AtLeastOneOfValidator < MultipleParamsBase
8
- def validate_params!(params)
9
- return unless keys_in_common(params).empty?
10
- raise Grape::Exceptions::Validation.new(params: all_keys, message: message(:at_least_one))
11
- end
12
- end
13
- end
14
- end
@@ -1,91 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- class API
5
- class Boolean
6
- def self.build(val)
7
- return nil if val != true && val != false
8
-
9
- new
10
- end
11
- end
12
-
13
- class Instance
14
- Boolean = Grape::API::Boolean
15
- end
16
- end
17
-
18
- module Validations
19
- class CoerceValidator < Base
20
- def initialize(attrs, options, required, scope, **opts)
21
- super
22
-
23
- @converter = if type.is_a?(Grape::Validations::Types::VariantCollectionCoercer)
24
- type
25
- else
26
- Types.build_coercer(type, method: @option[:method])
27
- end
28
- end
29
-
30
- def validate(request)
31
- super
32
- end
33
-
34
- def validate_param!(attr_name, params)
35
- raise validation_exception(attr_name) unless params.is_a? Hash
36
-
37
- new_value = coerce_value(params[attr_name])
38
-
39
- raise validation_exception(attr_name, new_value.message) unless valid_type?(new_value)
40
-
41
- # Don't assign a value if it is identical. It fixes a problem with Hashie::Mash
42
- # which looses wrappers for hashes and arrays after reassigning values
43
- #
44
- # h = Hashie::Mash.new(list: [1, 2, 3, 4])
45
- # => #<Hashie::Mash list=#<Hashie::Array [1, 2, 3, 4]>>
46
- # list = h.list
47
- # h[:list] = list
48
- # h
49
- # => #<Hashie::Mash list=[1, 2, 3, 4]>
50
- return if params[attr_name].class == new_value.class && params[attr_name] == new_value
51
-
52
- params[attr_name] = new_value
53
- end
54
-
55
- private
56
-
57
- # @!attribute [r] converter
58
- # Object that will be used for parameter coercion and type checking.
59
- #
60
- # See {Types.build_coercer}
61
- #
62
- # @return [Object]
63
- attr_reader :converter
64
-
65
- def valid_type?(val)
66
- !val.is_a?(Types::InvalidValue)
67
- end
68
-
69
- def coerce_value(val)
70
- converter.call(val)
71
- # Some custom types might fail, so it should be treated as an invalid value
72
- rescue StandardError
73
- Types::InvalidValue.new
74
- end
75
-
76
- # Type to which the parameter will be coerced.
77
- #
78
- # @return [Class]
79
- def type
80
- @option[:type].is_a?(Hash) ? @option[:type][:value] : @option[:type]
81
- end
82
-
83
- def validation_exception(attr_name, custom_msg = nil)
84
- Grape::Exceptions::Validation.new(
85
- params: [@scope.full_name(attr_name)],
86
- message: custom_msg || message(:coerce)
87
- )
88
- end
89
- end
90
- end
91
- end