grape 1.2.5 → 1.4.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 (262) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +97 -0
  3. data/LICENSE +1 -1
  4. data/README.md +53 -16
  5. data/UPGRADING.md +231 -23
  6. data/grape.gemspec +10 -1
  7. data/lib/grape.rb +6 -7
  8. data/lib/grape/api.rb +4 -2
  9. data/lib/grape/api/helpers.rb +2 -0
  10. data/lib/grape/api/instance.rb +36 -33
  11. data/lib/grape/config.rb +2 -0
  12. data/lib/grape/content_types.rb +34 -0
  13. data/lib/grape/cookies.rb +2 -0
  14. data/lib/grape/dsl/api.rb +2 -0
  15. data/lib/grape/dsl/callbacks.rb +2 -0
  16. data/lib/grape/dsl/configuration.rb +2 -0
  17. data/lib/grape/dsl/desc.rb +2 -0
  18. data/lib/grape/dsl/headers.rb +2 -0
  19. data/lib/grape/dsl/helpers.rb +4 -2
  20. data/lib/grape/dsl/inside_route.rb +83 -34
  21. data/lib/grape/dsl/logger.rb +2 -0
  22. data/lib/grape/dsl/middleware.rb +2 -0
  23. data/lib/grape/dsl/parameters.rb +8 -6
  24. data/lib/grape/dsl/request_response.rb +4 -2
  25. data/lib/grape/dsl/routing.rb +9 -5
  26. data/lib/grape/dsl/settings.rb +7 -1
  27. data/lib/grape/dsl/validations.rb +20 -1
  28. data/lib/grape/eager_load.rb +3 -1
  29. data/lib/grape/endpoint.rb +21 -13
  30. data/lib/grape/error_formatter.rb +3 -1
  31. data/lib/grape/error_formatter/base.rb +2 -0
  32. data/lib/grape/error_formatter/json.rb +2 -0
  33. data/lib/grape/error_formatter/txt.rb +2 -0
  34. data/lib/grape/error_formatter/xml.rb +2 -0
  35. data/lib/grape/exceptions/base.rb +11 -13
  36. data/lib/grape/exceptions/incompatible_option_values.rb +2 -0
  37. data/lib/grape/exceptions/invalid_accept_header.rb +2 -0
  38. data/lib/grape/exceptions/invalid_formatter.rb +2 -0
  39. data/lib/grape/exceptions/invalid_message_body.rb +2 -0
  40. data/lib/grape/exceptions/invalid_response.rb +2 -0
  41. data/lib/grape/exceptions/invalid_version_header.rb +2 -0
  42. data/lib/grape/exceptions/invalid_versioner_option.rb +2 -0
  43. data/lib/grape/exceptions/invalid_with_option_for_represent.rb +2 -0
  44. data/lib/grape/exceptions/method_not_allowed.rb +2 -0
  45. data/lib/grape/exceptions/missing_group_type.rb +2 -0
  46. data/lib/grape/exceptions/missing_mime_type.rb +2 -0
  47. data/lib/grape/exceptions/missing_option.rb +2 -0
  48. data/lib/grape/exceptions/missing_vendor_option.rb +2 -0
  49. data/lib/grape/exceptions/unknown_options.rb +2 -0
  50. data/lib/grape/exceptions/unknown_parameter.rb +2 -0
  51. data/lib/grape/exceptions/unknown_validator.rb +2 -0
  52. data/lib/grape/exceptions/unsupported_group_type.rb +2 -0
  53. data/lib/grape/exceptions/validation.rb +3 -1
  54. data/lib/grape/exceptions/validation_array_errors.rb +2 -0
  55. data/lib/grape/exceptions/validation_errors.rb +13 -12
  56. data/lib/grape/extensions/active_support/hash_with_indifferent_access.rb +4 -3
  57. data/lib/grape/extensions/deep_mergeable_hash.rb +2 -0
  58. data/lib/grape/extensions/deep_symbolize_hash.rb +2 -0
  59. data/lib/grape/extensions/hash.rb +2 -0
  60. data/lib/grape/extensions/hashie/mash.rb +2 -0
  61. data/lib/grape/formatter.rb +5 -3
  62. data/lib/grape/formatter/json.rb +2 -0
  63. data/lib/grape/formatter/serializable_hash.rb +2 -0
  64. data/lib/grape/formatter/txt.rb +2 -0
  65. data/lib/grape/formatter/xml.rb +2 -0
  66. data/lib/grape/http/headers.rb +50 -18
  67. data/lib/grape/middleware/auth/base.rb +2 -0
  68. data/lib/grape/middleware/auth/dsl.rb +2 -0
  69. data/lib/grape/middleware/auth/strategies.rb +2 -0
  70. data/lib/grape/middleware/auth/strategy_info.rb +2 -0
  71. data/lib/grape/middleware/base.rb +7 -7
  72. data/lib/grape/middleware/error.rb +3 -1
  73. data/lib/grape/middleware/filter.rb +2 -0
  74. data/lib/grape/middleware/formatter.rb +8 -6
  75. data/lib/grape/middleware/globals.rb +2 -0
  76. data/lib/grape/middleware/helpers.rb +2 -0
  77. data/lib/grape/middleware/stack.rb +4 -1
  78. data/lib/grape/middleware/versioner.rb +2 -0
  79. data/lib/grape/middleware/versioner/accept_version_header.rb +2 -0
  80. data/lib/grape/middleware/versioner/header.rb +6 -4
  81. data/lib/grape/middleware/versioner/param.rb +3 -1
  82. data/lib/grape/middleware/versioner/parse_media_type_patch.rb +4 -1
  83. data/lib/grape/middleware/versioner/path.rb +3 -1
  84. data/lib/grape/namespace.rb +14 -2
  85. data/lib/grape/parser.rb +3 -1
  86. data/lib/grape/parser/json.rb +2 -0
  87. data/lib/grape/parser/xml.rb +2 -0
  88. data/lib/grape/path.rb +15 -3
  89. data/lib/grape/presenters/presenter.rb +2 -0
  90. data/lib/grape/request.rb +15 -8
  91. data/lib/grape/router.rb +30 -29
  92. data/lib/grape/router/attribute_translator.rb +39 -8
  93. data/lib/grape/router/pattern.rb +20 -16
  94. data/lib/grape/router/route.rb +12 -26
  95. data/lib/grape/{serve_file → serve_stream}/file_body.rb +3 -1
  96. data/lib/grape/{serve_file → serve_stream}/sendfile_response.rb +3 -1
  97. data/lib/grape/{serve_file/file_response.rb → serve_stream/stream_response.rb} +10 -8
  98. data/lib/grape/util/base_inheritable.rb +15 -6
  99. data/lib/grape/util/cache.rb +20 -0
  100. data/lib/grape/util/endpoint_configuration.rb +2 -0
  101. data/lib/grape/util/env.rb +19 -17
  102. data/lib/grape/util/inheritable_setting.rb +2 -0
  103. data/lib/grape/util/inheritable_values.rb +2 -0
  104. data/lib/grape/util/json.rb +2 -0
  105. data/lib/grape/util/lazy_block.rb +2 -0
  106. data/lib/grape/util/lazy_object.rb +43 -0
  107. data/lib/grape/util/lazy_value.rb +2 -0
  108. data/lib/grape/util/registrable.rb +2 -0
  109. data/lib/grape/util/reverse_stackable_values.rb +4 -0
  110. data/lib/grape/util/stackable_values.rb +10 -20
  111. data/lib/grape/util/strict_hash_configuration.rb +2 -0
  112. data/lib/grape/util/xml.rb +2 -0
  113. data/lib/grape/validations.rb +2 -0
  114. data/lib/grape/validations/attributes_iterator.rb +3 -3
  115. data/lib/grape/validations/multiple_attributes_iterator.rb +2 -0
  116. data/lib/grape/validations/params_scope.rb +27 -14
  117. data/lib/grape/validations/single_attribute_iterator.rb +13 -2
  118. data/lib/grape/validations/types.rb +12 -34
  119. data/lib/grape/validations/types/array_coercer.rb +65 -0
  120. data/lib/grape/validations/types/build_coercer.rb +47 -49
  121. data/lib/grape/validations/types/custom_type_coercer.rb +15 -49
  122. data/lib/grape/validations/types/custom_type_collection_coercer.rb +10 -25
  123. data/lib/grape/validations/types/dry_type_coercer.rb +76 -0
  124. data/lib/grape/validations/types/file.rb +22 -18
  125. data/lib/grape/validations/types/json.rb +46 -39
  126. data/lib/grape/validations/types/multiple_type_coercer.rb +14 -33
  127. data/lib/grape/validations/types/primitive_coercer.rb +67 -0
  128. data/lib/grape/validations/types/set_coercer.rb +40 -0
  129. data/lib/grape/validations/types/variant_collection_coercer.rb +5 -13
  130. data/lib/grape/validations/validator_factory.rb +2 -0
  131. data/lib/grape/validations/validators/all_or_none.rb +3 -1
  132. data/lib/grape/validations/validators/allow_blank.rb +3 -1
  133. data/lib/grape/validations/validators/as.rb +2 -0
  134. data/lib/grape/validations/validators/at_least_one_of.rb +3 -1
  135. data/lib/grape/validations/validators/base.rb +8 -5
  136. data/lib/grape/validations/validators/coerce.rb +39 -29
  137. data/lib/grape/validations/validators/default.rb +2 -1
  138. data/lib/grape/validations/validators/exactly_one_of.rb +6 -2
  139. data/lib/grape/validations/validators/except_values.rb +3 -1
  140. data/lib/grape/validations/validators/multiple_params_base.rb +2 -0
  141. data/lib/grape/validations/validators/mutual_exclusion.rb +3 -1
  142. data/lib/grape/validations/validators/presence.rb +3 -1
  143. data/lib/grape/validations/validators/regexp.rb +4 -2
  144. data/lib/grape/validations/validators/same_as.rb +6 -3
  145. data/lib/grape/validations/validators/values.rb +17 -5
  146. data/lib/grape/version.rb +3 -1
  147. data/spec/grape/api/custom_validations_spec.rb +5 -3
  148. data/spec/grape/api/deeply_included_options_spec.rb +2 -0
  149. data/spec/grape/api/defines_boolean_in_params_spec.rb +5 -3
  150. data/spec/grape/api/inherited_helpers_spec.rb +2 -0
  151. data/spec/grape/api/instance_spec.rb +104 -0
  152. data/spec/grape/api/invalid_format_spec.rb +2 -0
  153. data/spec/grape/api/namespace_parameters_in_route_spec.rb +2 -0
  154. data/spec/grape/api/nested_helpers_spec.rb +2 -0
  155. data/spec/grape/api/optional_parameters_in_route_spec.rb +2 -0
  156. data/spec/grape/api/parameters_modification_spec.rb +3 -1
  157. data/spec/grape/api/patch_method_helpers_spec.rb +2 -0
  158. data/spec/grape/api/recognize_path_spec.rb +2 -0
  159. data/spec/grape/api/required_parameters_in_route_spec.rb +2 -0
  160. data/spec/grape/api/required_parameters_with_invalid_method_spec.rb +2 -0
  161. data/spec/grape/api/routes_with_requirements_spec.rb +2 -0
  162. data/spec/grape/api/shared_helpers_exactly_one_of_spec.rb +2 -0
  163. data/spec/grape/api/shared_helpers_spec.rb +2 -0
  164. data/spec/grape/api_remount_spec.rb +2 -0
  165. data/spec/grape/api_spec.rb +99 -11
  166. data/spec/grape/config_spec.rb +2 -0
  167. data/spec/grape/dsl/callbacks_spec.rb +2 -0
  168. data/spec/grape/dsl/configuration_spec.rb +2 -0
  169. data/spec/grape/dsl/desc_spec.rb +2 -0
  170. data/spec/grape/dsl/headers_spec.rb +2 -0
  171. data/spec/grape/dsl/helpers_spec.rb +4 -2
  172. data/spec/grape/dsl/inside_route_spec.rb +177 -33
  173. data/spec/grape/dsl/logger_spec.rb +2 -0
  174. data/spec/grape/dsl/middleware_spec.rb +2 -0
  175. data/spec/grape/dsl/parameters_spec.rb +2 -0
  176. data/spec/grape/dsl/request_response_spec.rb +2 -0
  177. data/spec/grape/dsl/routing_spec.rb +2 -0
  178. data/spec/grape/dsl/settings_spec.rb +2 -0
  179. data/spec/grape/dsl/validations_spec.rb +2 -0
  180. data/spec/grape/endpoint_spec.rb +21 -6
  181. data/spec/grape/entity_spec.rb +2 -0
  182. data/spec/grape/exceptions/base_spec.rb +3 -1
  183. data/spec/grape/exceptions/body_parse_errors_spec.rb +2 -0
  184. data/spec/grape/exceptions/invalid_accept_header_spec.rb +2 -0
  185. data/spec/grape/exceptions/invalid_formatter_spec.rb +2 -0
  186. data/spec/grape/exceptions/invalid_response_spec.rb +2 -0
  187. data/spec/grape/exceptions/invalid_versioner_option_spec.rb +2 -0
  188. data/spec/grape/exceptions/missing_mime_type_spec.rb +2 -0
  189. data/spec/grape/exceptions/missing_option_spec.rb +2 -0
  190. data/spec/grape/exceptions/unknown_options_spec.rb +2 -0
  191. data/spec/grape/exceptions/unknown_validator_spec.rb +2 -0
  192. data/spec/grape/exceptions/validation_errors_spec.rb +4 -2
  193. data/spec/grape/exceptions/validation_spec.rb +3 -1
  194. data/spec/grape/extensions/param_builders/hash_spec.rb +2 -0
  195. data/spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb +2 -0
  196. data/spec/grape/extensions/param_builders/hashie/mash_spec.rb +2 -0
  197. data/spec/grape/integration/global_namespace_function_spec.rb +2 -0
  198. data/spec/grape/integration/rack_sendfile_spec.rb +14 -8
  199. data/spec/grape/integration/rack_spec.rb +3 -1
  200. data/spec/grape/loading_spec.rb +2 -0
  201. data/spec/grape/middleware/auth/base_spec.rb +2 -0
  202. data/spec/grape/middleware/auth/dsl_spec.rb +2 -0
  203. data/spec/grape/middleware/auth/strategies_spec.rb +3 -1
  204. data/spec/grape/middleware/base_spec.rb +2 -0
  205. data/spec/grape/middleware/error_spec.rb +2 -0
  206. data/spec/grape/middleware/exception_spec.rb +3 -1
  207. data/spec/grape/middleware/formatter_spec.rb +19 -12
  208. data/spec/grape/middleware/globals_spec.rb +2 -0
  209. data/spec/grape/middleware/stack_spec.rb +11 -0
  210. data/spec/grape/middleware/versioner/accept_version_header_spec.rb +3 -1
  211. data/spec/grape/middleware/versioner/header_spec.rb +3 -1
  212. data/spec/grape/middleware/versioner/param_spec.rb +3 -1
  213. data/spec/grape/middleware/versioner/path_spec.rb +3 -1
  214. data/spec/grape/middleware/versioner_spec.rb +2 -0
  215. data/spec/grape/named_api_spec.rb +2 -0
  216. data/spec/grape/parser_spec.rb +7 -5
  217. data/spec/grape/path_spec.rb +6 -4
  218. data/spec/grape/presenters/presenter_spec.rb +2 -0
  219. data/spec/grape/request_spec.rb +2 -0
  220. data/spec/grape/util/inheritable_setting_spec.rb +2 -0
  221. data/spec/grape/util/inheritable_values_spec.rb +2 -0
  222. data/spec/grape/util/reverse_stackable_values_spec.rb +2 -0
  223. data/spec/grape/util/stackable_values_spec.rb +3 -1
  224. data/spec/grape/util/strict_hash_configuration_spec.rb +2 -0
  225. data/spec/grape/validations/attributes_iterator_spec.rb +2 -0
  226. data/spec/grape/validations/instance_behaivour_spec.rb +5 -3
  227. data/spec/grape/validations/multiple_attributes_iterator_spec.rb +2 -0
  228. data/spec/grape/validations/params_scope_spec.rb +3 -1
  229. data/spec/grape/validations/single_attribute_iterator_spec.rb +18 -4
  230. data/spec/grape/validations/types/array_coercer_spec.rb +35 -0
  231. data/spec/grape/validations/types/primitive_coercer_spec.rb +135 -0
  232. data/spec/grape/validations/types/set_coercer_spec.rb +34 -0
  233. data/spec/grape/validations/types_spec.rb +9 -36
  234. data/spec/grape/validations/validators/all_or_none_spec.rb +2 -0
  235. data/spec/grape/validations/validators/allow_blank_spec.rb +2 -0
  236. data/spec/grape/validations/validators/at_least_one_of_spec.rb +2 -0
  237. data/spec/grape/validations/validators/coerce_spec.rb +341 -136
  238. data/spec/grape/validations/validators/default_spec.rb +123 -0
  239. data/spec/grape/validations/validators/exactly_one_of_spec.rb +14 -12
  240. data/spec/grape/validations/validators/except_values_spec.rb +3 -1
  241. data/spec/grape/validations/validators/mutual_exclusion_spec.rb +2 -0
  242. data/spec/grape/validations/validators/presence_spec.rb +30 -0
  243. data/spec/grape/validations/validators/regexp_spec.rb +2 -0
  244. data/spec/grape/validations/validators/same_as_spec.rb +2 -0
  245. data/spec/grape/validations/validators/values_spec.rb +30 -5
  246. data/spec/grape/validations_spec.rb +91 -33
  247. data/spec/integration/eager_load/eager_load_spec.rb +15 -0
  248. data/spec/integration/multi_json/json_spec.rb +2 -0
  249. data/spec/integration/multi_xml/xml_spec.rb +2 -0
  250. data/spec/shared/versioning_examples.rb +2 -0
  251. data/spec/spec_helper.rb +18 -0
  252. data/spec/support/basic_auth_encode_helpers.rb +2 -0
  253. data/spec/support/content_type_helpers.rb +2 -0
  254. data/spec/support/eager_load.rb +19 -0
  255. data/spec/support/endpoint_faker.rb +2 -0
  256. data/spec/support/file_streamer.rb +2 -0
  257. data/spec/support/integer_helpers.rb +2 -0
  258. data/spec/support/versioned_helpers.rb +4 -2
  259. metadata +48 -28
  260. data/lib/grape/extensions/deep_hash_with_indifferent_access.rb +0 -18
  261. data/lib/grape/util/content_types.rb +0 -26
  262. data/lib/grape/validations/types/virtus_collection_patch.rb +0 -16
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
4
+ require 'grape'
5
+
6
+ describe Grape do
7
+ it 'eager_load!' do
8
+ require 'grape/eager_load'
9
+ expect { Grape.eager_load! }.to_not raise_error
10
+ end
11
+
12
+ it 'compile!' do
13
+ expect { Class.new(Grape::API).compile! }.to_not raise_error
14
+ end
15
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Grape::Json do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Grape::Xml do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  shared_examples_for 'versioning' do
2
4
  it 'sets the API version' do
3
5
  subject.format :txt
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
4
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
5
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
@@ -12,17 +14,33 @@ Dir["#{File.dirname(__FILE__)}/support/*.rb"].each do |file|
12
14
  require file
13
15
  end
14
16
 
17
+ eager_load!
18
+
15
19
  # The default value for this setting is true in a standard Rails app,
16
20
  # so it should be set to true here as well to reflect that.
17
21
  I18n.enforce_available_locales = true
18
22
 
23
+ module Chunks
24
+ def read_chunks(body)
25
+ buffer = []
26
+ body.each { |chunk| buffer << chunk }
27
+
28
+ buffer
29
+ end
30
+ end
31
+
19
32
  RSpec.configure do |config|
33
+ config.include Chunks
20
34
  config.include Rack::Test::Methods
21
35
  config.include Spec::Support::Helpers
22
36
  config.raise_errors_for_deprecations!
23
37
  config.filter_run_when_matching :focus
38
+ config.warnings = true
24
39
 
25
40
  config.before(:each) { Grape::Util::InheritableSetting.reset_global! }
41
+
42
+ # Enable flags like --only-failures and --next-failure
43
+ config.example_status_persistence_file_path = '.rspec_status'
26
44
  end
27
45
 
28
46
  require 'coveralls'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Spec
2
4
  module Support
3
5
  module Helpers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Spec
2
4
  module Support
3
5
  module Helpers
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Grape uses autoload https://api.rubyonrails.org/classes/ActiveSupport/Autoload.html.
4
+ # When a class/module get added to the list, ActiveSupport doesn't check whether it really exists.
5
+ # This method loads all classes/modules defined via autoload to be sure only existing
6
+ # classes/modules were listed.
7
+ def eager_load!(scope = Grape)
8
+ # get modules
9
+ scope.constants.each do |const_name|
10
+ const = scope.const_get(const_name)
11
+
12
+ next unless const.respond_to?(:eager_load!)
13
+
14
+ const.eager_load!
15
+
16
+ # check its modules, they might need to be loaded as well.
17
+ eager_load!(const)
18
+ end
19
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Spec
2
4
  module Support
3
5
  class EndpointFaker
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class FileStreamer
2
4
  def initialize(file_path)
3
5
  @file_path = file_path
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Spec
2
4
  module Support
3
5
  module Helpers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Versioning
2
4
  module Spec
3
5
  module Support
@@ -19,7 +21,7 @@ module Spec
19
21
  end
20
22
  end
21
23
 
22
- def versioned_headers(options)
24
+ def versioned_headers(**options)
23
25
  case options[:using]
24
26
  when :path
25
27
  {} # no-op
@@ -43,7 +45,7 @@ module Spec
43
45
 
44
46
  def versioned_get(path, version_name, version_options = {})
45
47
  path = versioned_path(version_options.merge(version: version_name, path: path))
46
- headers = versioned_headers(version_options.merge(version: version_name))
48
+ headers = versioned_headers(**version_options.merge(version: version_name))
47
49
  params = {}
48
50
  if version_options[:using] == :param
49
51
  params = { version_options[:parameter] => version_name }
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.2.5
4
+ version: 1.4.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: 2019-12-01 00:00:00.000000000 Z
11
+ date: 2020-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dry-types
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: mustermann-grape
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -80,20 +94,6 @@ dependencies:
80
94
  - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: virtus
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: 1.0.0
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: 1.0.0
97
97
  description: A Ruby framework for rapid API development with great conventions.
98
98
  email:
99
99
  - michael@intridea.com
@@ -113,6 +113,7 @@ files:
113
113
  - lib/grape/api/helpers.rb
114
114
  - lib/grape/api/instance.rb
115
115
  - lib/grape/config.rb
116
+ - lib/grape/content_types.rb
116
117
  - lib/grape/cookies.rb
117
118
  - lib/grape/dsl/api.rb
118
119
  - lib/grape/dsl/callbacks.rb
@@ -157,7 +158,6 @@ files:
157
158
  - lib/grape/exceptions/validation_array_errors.rb
158
159
  - lib/grape/exceptions/validation_errors.rb
159
160
  - lib/grape/extensions/active_support/hash_with_indifferent_access.rb
160
- - lib/grape/extensions/deep_hash_with_indifferent_access.rb
161
161
  - lib/grape/extensions/deep_mergeable_hash.rb
162
162
  - lib/grape/extensions/deep_symbolize_hash.rb
163
163
  - lib/grape/extensions/hash.rb
@@ -197,17 +197,18 @@ files:
197
197
  - lib/grape/router/attribute_translator.rb
198
198
  - lib/grape/router/pattern.rb
199
199
  - lib/grape/router/route.rb
200
- - lib/grape/serve_file/file_body.rb
201
- - lib/grape/serve_file/file_response.rb
202
- - lib/grape/serve_file/sendfile_response.rb
200
+ - lib/grape/serve_stream/file_body.rb
201
+ - lib/grape/serve_stream/sendfile_response.rb
202
+ - lib/grape/serve_stream/stream_response.rb
203
203
  - lib/grape/util/base_inheritable.rb
204
- - lib/grape/util/content_types.rb
204
+ - lib/grape/util/cache.rb
205
205
  - lib/grape/util/endpoint_configuration.rb
206
206
  - lib/grape/util/env.rb
207
207
  - lib/grape/util/inheritable_setting.rb
208
208
  - lib/grape/util/inheritable_values.rb
209
209
  - lib/grape/util/json.rb
210
210
  - lib/grape/util/lazy_block.rb
211
+ - lib/grape/util/lazy_object.rb
211
212
  - lib/grape/util/lazy_value.rb
212
213
  - lib/grape/util/registrable.rb
213
214
  - lib/grape/util/reverse_stackable_values.rb
@@ -220,14 +221,17 @@ files:
220
221
  - lib/grape/validations/params_scope.rb
221
222
  - lib/grape/validations/single_attribute_iterator.rb
222
223
  - lib/grape/validations/types.rb
224
+ - lib/grape/validations/types/array_coercer.rb
223
225
  - lib/grape/validations/types/build_coercer.rb
224
226
  - lib/grape/validations/types/custom_type_coercer.rb
225
227
  - lib/grape/validations/types/custom_type_collection_coercer.rb
228
+ - lib/grape/validations/types/dry_type_coercer.rb
226
229
  - lib/grape/validations/types/file.rb
227
230
  - lib/grape/validations/types/json.rb
228
231
  - lib/grape/validations/types/multiple_type_coercer.rb
232
+ - lib/grape/validations/types/primitive_coercer.rb
233
+ - lib/grape/validations/types/set_coercer.rb
229
234
  - lib/grape/validations/types/variant_collection_coercer.rb
230
- - lib/grape/validations/types/virtus_collection_patch.rb
231
235
  - lib/grape/validations/validator_factory.rb
232
236
  - lib/grape/validations/validators/all_or_none.rb
233
237
  - lib/grape/validations/validators/allow_blank.rb
@@ -249,6 +253,7 @@ files:
249
253
  - spec/grape/api/deeply_included_options_spec.rb
250
254
  - spec/grape/api/defines_boolean_in_params_spec.rb
251
255
  - spec/grape/api/inherited_helpers_spec.rb
256
+ - spec/grape/api/instance_spec.rb
252
257
  - spec/grape/api/invalid_format_spec.rb
253
258
  - spec/grape/api/namespace_parameters_in_route_spec.rb
254
259
  - spec/grape/api/nested_helpers_spec.rb
@@ -327,6 +332,9 @@ files:
327
332
  - spec/grape/validations/multiple_attributes_iterator_spec.rb
328
333
  - spec/grape/validations/params_scope_spec.rb
329
334
  - spec/grape/validations/single_attribute_iterator_spec.rb
335
+ - spec/grape/validations/types/array_coercer_spec.rb
336
+ - spec/grape/validations/types/primitive_coercer_spec.rb
337
+ - spec/grape/validations/types/set_coercer_spec.rb
330
338
  - spec/grape/validations/types_spec.rb
331
339
  - spec/grape/validations/validators/all_or_none_spec.rb
332
340
  - spec/grape/validations/validators/allow_blank_spec.rb
@@ -342,12 +350,14 @@ files:
342
350
  - spec/grape/validations/validators/values_spec.rb
343
351
  - spec/grape/validations/validators/zh-CN.yml
344
352
  - spec/grape/validations_spec.rb
353
+ - spec/integration/eager_load/eager_load_spec.rb
345
354
  - spec/integration/multi_json/json_spec.rb
346
355
  - spec/integration/multi_xml/xml_spec.rb
347
356
  - spec/shared/versioning_examples.rb
348
357
  - spec/spec_helper.rb
349
358
  - spec/support/basic_auth_encode_helpers.rb
350
359
  - spec/support/content_type_helpers.rb
360
+ - spec/support/eager_load.rb
351
361
  - spec/support/endpoint_faker.rb
352
362
  - spec/support/file_streamer.rb
353
363
  - spec/support/integer_helpers.rb
@@ -355,8 +365,12 @@ files:
355
365
  homepage: https://github.com/ruby-grape/grape
356
366
  licenses:
357
367
  - MIT
358
- metadata: {}
359
- post_install_message:
368
+ metadata:
369
+ bug_tracker_uri: https://github.com/ruby-grape/grape/issues
370
+ changelog_uri: https://github.com/ruby-grape/grape/blob/v1.4.0/CHANGELOG.md
371
+ documentation_uri: https://www.rubydoc.info/gems/grape/1.4.0
372
+ source_code_uri: https://github.com/ruby-grape/grape/tree/v1.4.0
373
+ post_install_message:
360
374
  rdoc_options: []
361
375
  require_paths:
362
376
  - lib
@@ -364,19 +378,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
364
378
  requirements:
365
379
  - - ">="
366
380
  - !ruby/object:Gem::Version
367
- version: '0'
381
+ version: 2.4.0
368
382
  required_rubygems_version: !ruby/object:Gem::Requirement
369
383
  requirements:
370
384
  - - ">="
371
385
  - !ruby/object:Gem::Version
372
386
  version: '0'
373
387
  requirements: []
374
- rubygems_version: 3.0.3
375
- signing_key:
388
+ rubygems_version: 3.1.3
389
+ signing_key:
376
390
  specification_version: 4
377
391
  summary: A simple Ruby framework for building REST-like APIs.
378
392
  test_files:
379
393
  - spec/spec_helper.rb
394
+ - spec/integration/eager_load/eager_load_spec.rb
380
395
  - spec/integration/multi_xml/xml_spec.rb
381
396
  - spec/integration/multi_json/json_spec.rb
382
397
  - spec/shared/versioning_examples.rb
@@ -385,6 +400,7 @@ test_files:
385
400
  - spec/support/file_streamer.rb
386
401
  - spec/support/versioned_helpers.rb
387
402
  - spec/support/content_type_helpers.rb
403
+ - spec/support/eager_load.rb
388
404
  - spec/support/integer_helpers.rb
389
405
  - spec/grape/middleware/error_spec.rb
390
406
  - spec/grape/middleware/globals_spec.rb
@@ -429,6 +445,9 @@ test_files:
429
445
  - spec/grape/presenters/presenter_spec.rb
430
446
  - spec/grape/validations/single_attribute_iterator_spec.rb
431
447
  - spec/grape/validations/attributes_iterator_spec.rb
448
+ - spec/grape/validations/types/primitive_coercer_spec.rb
449
+ - spec/grape/validations/types/set_coercer_spec.rb
450
+ - spec/grape/validations/types/array_coercer_spec.rb
432
451
  - spec/grape/validations/params_scope_spec.rb
433
452
  - spec/grape/validations/instance_behaivour_spec.rb
434
453
  - spec/grape/validations/multiple_attributes_iterator_spec.rb
@@ -458,6 +477,7 @@ test_files:
458
477
  - spec/grape/api/defines_boolean_in_params_spec.rb
459
478
  - spec/grape/api/invalid_format_spec.rb
460
479
  - spec/grape/api/required_parameters_in_route_spec.rb
480
+ - spec/grape/api/instance_spec.rb
461
481
  - spec/grape/api/namespace_parameters_in_route_spec.rb
462
482
  - spec/grape/api/recognize_path_spec.rb
463
483
  - spec/grape/api/shared_helpers_exactly_one_of_spec.rb
@@ -1,18 +0,0 @@
1
- module Grape
2
- module Extensions
3
- module DeepHashWithIndifferentAccess
4
- def self.deep_hash_with_indifferent_access(object)
5
- case object
6
- when ::Hash
7
- object.inject(::ActiveSupport::HashWithIndifferentAccess.new) do |new_hash, (key, value)|
8
- new_hash.merge!(key => deep_hash_with_indifferent_access(value))
9
- end
10
- when ::Array
11
- object.map { |element| deep_hash_with_indifferent_access(element) }
12
- else
13
- object
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,26 +0,0 @@
1
- module Grape
2
- module ContentTypes
3
- # Content types are listed in order of preference.
4
- CONTENT_TYPES = { # rubocop:disable Style/MutableConstant
5
- xml: 'application/xml',
6
- serializable_hash: 'application/json',
7
- json: 'application/json',
8
- binary: 'application/octet-stream',
9
- txt: 'text/plain'
10
- }
11
-
12
- def self.content_types_for_settings(settings)
13
- return if settings.blank?
14
-
15
- settings.each_with_object({}) { |value, result| result.merge!(value) }
16
- end
17
-
18
- def self.content_types_for(from_settings)
19
- if from_settings.present?
20
- from_settings
21
- else
22
- Grape::ContentTypes::CONTENT_TYPES
23
- end
24
- end
25
- end
26
- end
@@ -1,16 +0,0 @@
1
- require 'virtus/attribute/collection'
2
-
3
- # See https://github.com/solnic/virtus/pull/343
4
- # This monkey-patch fixes type validation for collections,
5
- # ensuring that type assertions are applied to collection
6
- # members.
7
- #
8
- # This patch duplicates the code in the above pull request.
9
- # Once the request, or equivalent functionality, has been
10
- # published into the +virtus+ gem this file should be deleted.
11
- Virtus::Attribute::Collection.class_eval do
12
- # @api public
13
- def value_coerced?(value)
14
- super && value.all? { |item| member_type.value_coerced? item }
15
- end
16
- end