grape 1.3.0 → 1.5.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +119 -1
- data/LICENSE +1 -1
- data/README.md +123 -29
- data/UPGRADING.md +265 -39
- data/lib/grape/api/instance.rb +32 -31
- data/lib/grape/api.rb +5 -5
- data/lib/grape/content_types.rb +34 -0
- data/lib/grape/dsl/callbacks.rb +1 -1
- data/lib/grape/dsl/helpers.rb +2 -1
- data/lib/grape/dsl/inside_route.rb +77 -43
- data/lib/grape/dsl/parameters.rb +12 -8
- data/lib/grape/dsl/routing.rb +12 -11
- data/lib/grape/dsl/validations.rb +18 -1
- data/lib/grape/eager_load.rb +1 -1
- data/lib/grape/endpoint.rb +8 -6
- data/lib/grape/exceptions/base.rb +0 -4
- data/lib/grape/exceptions/validation.rb +1 -1
- data/lib/grape/exceptions/validation_errors.rb +12 -13
- data/lib/grape/http/headers.rb +26 -0
- data/lib/grape/middleware/auth/base.rb +3 -3
- data/lib/grape/middleware/base.rb +4 -5
- data/lib/grape/middleware/error.rb +11 -13
- data/lib/grape/middleware/formatter.rb +3 -3
- data/lib/grape/middleware/stack.rb +10 -2
- data/lib/grape/middleware/versioner/header.rb +4 -4
- data/lib/grape/middleware/versioner/parse_media_type_patch.rb +2 -1
- data/lib/grape/middleware/versioner/path.rb +1 -1
- data/lib/grape/namespace.rb +12 -2
- data/lib/grape/path.rb +13 -3
- data/lib/grape/request.rb +13 -8
- data/lib/grape/router/attribute_translator.rb +26 -5
- data/lib/grape/router/pattern.rb +17 -16
- data/lib/grape/router/route.rb +5 -24
- data/lib/grape/router.rb +26 -30
- data/lib/grape/{serve_file → serve_stream}/file_body.rb +1 -1
- data/lib/grape/{serve_file → serve_stream}/sendfile_response.rb +1 -1
- data/lib/grape/{serve_file/file_response.rb → serve_stream/stream_response.rb} +8 -8
- data/lib/grape/util/base_inheritable.rb +15 -8
- data/lib/grape/util/cache.rb +20 -0
- data/lib/grape/util/lazy_object.rb +43 -0
- data/lib/grape/util/lazy_value.rb +1 -0
- data/lib/grape/util/reverse_stackable_values.rb +2 -0
- data/lib/grape/util/stackable_values.rb +7 -20
- data/lib/grape/validations/attributes_iterator.rb +8 -0
- data/lib/grape/validations/multiple_attributes_iterator.rb +1 -1
- data/lib/grape/validations/params_scope.rb +10 -8
- data/lib/grape/validations/single_attribute_iterator.rb +1 -1
- data/lib/grape/validations/types/array_coercer.rb +14 -5
- data/lib/grape/validations/types/build_coercer.rb +5 -8
- data/lib/grape/validations/types/custom_type_coercer.rb +16 -2
- data/lib/grape/validations/types/dry_type_coercer.rb +36 -1
- data/lib/grape/validations/types/file.rb +15 -12
- data/lib/grape/validations/types/invalid_value.rb +24 -0
- data/lib/grape/validations/types/json.rb +40 -36
- data/lib/grape/validations/types/primitive_coercer.rb +15 -6
- data/lib/grape/validations/types/set_coercer.rb +6 -4
- data/lib/grape/validations/types/variant_collection_coercer.rb +1 -1
- data/lib/grape/validations/types.rb +7 -9
- data/lib/grape/validations/validator_factory.rb +1 -1
- data/lib/grape/validations/validators/as.rb +1 -1
- data/lib/grape/validations/validators/base.rb +8 -8
- data/lib/grape/validations/validators/coerce.rb +11 -15
- data/lib/grape/validations/validators/default.rb +3 -5
- data/lib/grape/validations/validators/exactly_one_of.rb +4 -2
- data/lib/grape/validations/validators/except_values.rb +1 -1
- data/lib/grape/validations/validators/multiple_params_base.rb +2 -1
- data/lib/grape/validations/validators/regexp.rb +1 -1
- data/lib/grape/validations/validators/values.rb +1 -1
- data/lib/grape/version.rb +1 -1
- data/lib/grape.rb +5 -5
- data/spec/grape/api/instance_spec.rb +50 -0
- data/spec/grape/api_remount_spec.rb +9 -4
- data/spec/grape/api_spec.rb +82 -6
- data/spec/grape/dsl/inside_route_spec.rb +182 -33
- data/spec/grape/endpoint/declared_spec.rb +601 -0
- data/spec/grape/endpoint_spec.rb +0 -521
- data/spec/grape/entity_spec.rb +7 -1
- data/spec/grape/exceptions/validation_errors_spec.rb +2 -2
- data/spec/grape/integration/rack_sendfile_spec.rb +12 -8
- data/spec/grape/middleware/auth/strategies_spec.rb +1 -1
- data/spec/grape/middleware/error_spec.rb +1 -1
- data/spec/grape/middleware/formatter_spec.rb +3 -3
- data/spec/grape/middleware/stack_spec.rb +10 -0
- data/spec/grape/path_spec.rb +4 -4
- data/spec/grape/request_spec.rb +1 -1
- data/spec/grape/validations/instance_behaivour_spec.rb +1 -1
- data/spec/grape/validations/multiple_attributes_iterator_spec.rb +13 -3
- data/spec/grape/validations/params_scope_spec.rb +26 -0
- data/spec/grape/validations/single_attribute_iterator_spec.rb +17 -6
- data/spec/grape/validations/types/array_coercer_spec.rb +35 -0
- data/spec/grape/validations/types/primitive_coercer_spec.rb +135 -0
- data/spec/grape/validations/types/set_coercer_spec.rb +34 -0
- data/spec/grape/validations/types_spec.rb +1 -1
- data/spec/grape/validations/validators/coerce_spec.rb +366 -86
- data/spec/grape/validations/validators/default_spec.rb +170 -0
- data/spec/grape/validations/validators/exactly_one_of_spec.rb +12 -12
- data/spec/grape/validations/validators/except_values_spec.rb +1 -0
- data/spec/grape/validations/validators/values_spec.rb +1 -1
- data/spec/grape/validations_spec.rb +298 -30
- data/spec/integration/eager_load/eager_load_spec.rb +15 -0
- data/spec/shared/versioning_examples.rb +20 -20
- data/spec/spec_helper.rb +3 -10
- data/spec/support/chunks.rb +14 -0
- data/spec/support/eager_load.rb +19 -0
- data/spec/support/versioned_helpers.rb +4 -6
- metadata +27 -10
- data/lib/grape/util/content_types.rb +0 -28
@@ -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
|
@@ -6,7 +6,7 @@ module Spec
|
|
6
6
|
module Helpers
|
7
7
|
# Returns the path with options[:version] prefixed if options[:using] is :path.
|
8
8
|
# Returns normal path otherwise.
|
9
|
-
def versioned_path(options
|
9
|
+
def versioned_path(**options)
|
10
10
|
case options[:using]
|
11
11
|
when :path
|
12
12
|
File.join('/', options[:prefix] || '', options[:version], options[:path])
|
@@ -43,13 +43,11 @@ module Spec
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
def versioned_get(path, version_name, version_options
|
47
|
-
path
|
46
|
+
def versioned_get(path, version_name, **version_options)
|
47
|
+
path = versioned_path(**version_options.merge(version: version_name, path: path))
|
48
48
|
headers = versioned_headers(**version_options.merge(version: version_name))
|
49
49
|
params = {}
|
50
|
-
if version_options[:using] == :param
|
51
|
-
params = { version_options[:parameter] => version_name }
|
52
|
-
end
|
50
|
+
params = { version_options[:parameter] => version_name } if version_options[:using] == :param
|
53
51
|
get path, params, headers
|
54
52
|
end
|
55
53
|
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.
|
4
|
+
version: 1.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Bleigh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -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
|
@@ -196,17 +197,18 @@ files:
|
|
196
197
|
- lib/grape/router/attribute_translator.rb
|
197
198
|
- lib/grape/router/pattern.rb
|
198
199
|
- lib/grape/router/route.rb
|
199
|
-
- lib/grape/
|
200
|
-
- lib/grape/
|
201
|
-
- lib/grape/
|
200
|
+
- lib/grape/serve_stream/file_body.rb
|
201
|
+
- lib/grape/serve_stream/sendfile_response.rb
|
202
|
+
- lib/grape/serve_stream/stream_response.rb
|
202
203
|
- lib/grape/util/base_inheritable.rb
|
203
|
-
- lib/grape/util/
|
204
|
+
- lib/grape/util/cache.rb
|
204
205
|
- lib/grape/util/endpoint_configuration.rb
|
205
206
|
- lib/grape/util/env.rb
|
206
207
|
- lib/grape/util/inheritable_setting.rb
|
207
208
|
- lib/grape/util/inheritable_values.rb
|
208
209
|
- lib/grape/util/json.rb
|
209
210
|
- lib/grape/util/lazy_block.rb
|
211
|
+
- lib/grape/util/lazy_object.rb
|
210
212
|
- lib/grape/util/lazy_value.rb
|
211
213
|
- lib/grape/util/registrable.rb
|
212
214
|
- lib/grape/util/reverse_stackable_values.rb
|
@@ -225,6 +227,7 @@ files:
|
|
225
227
|
- lib/grape/validations/types/custom_type_collection_coercer.rb
|
226
228
|
- lib/grape/validations/types/dry_type_coercer.rb
|
227
229
|
- lib/grape/validations/types/file.rb
|
230
|
+
- lib/grape/validations/types/invalid_value.rb
|
228
231
|
- lib/grape/validations/types/json.rb
|
229
232
|
- lib/grape/validations/types/multiple_type_coercer.rb
|
230
233
|
- lib/grape/validations/types/primitive_coercer.rb
|
@@ -280,6 +283,7 @@ files:
|
|
280
283
|
- spec/grape/dsl/routing_spec.rb
|
281
284
|
- spec/grape/dsl/settings_spec.rb
|
282
285
|
- spec/grape/dsl/validations_spec.rb
|
286
|
+
- spec/grape/endpoint/declared_spec.rb
|
283
287
|
- spec/grape/endpoint_spec.rb
|
284
288
|
- spec/grape/entity_spec.rb
|
285
289
|
- spec/grape/exceptions/base_spec.rb
|
@@ -330,6 +334,9 @@ files:
|
|
330
334
|
- spec/grape/validations/multiple_attributes_iterator_spec.rb
|
331
335
|
- spec/grape/validations/params_scope_spec.rb
|
332
336
|
- spec/grape/validations/single_attribute_iterator_spec.rb
|
337
|
+
- spec/grape/validations/types/array_coercer_spec.rb
|
338
|
+
- spec/grape/validations/types/primitive_coercer_spec.rb
|
339
|
+
- spec/grape/validations/types/set_coercer_spec.rb
|
333
340
|
- spec/grape/validations/types_spec.rb
|
334
341
|
- spec/grape/validations/validators/all_or_none_spec.rb
|
335
342
|
- spec/grape/validations/validators/allow_blank_spec.rb
|
@@ -345,12 +352,15 @@ files:
|
|
345
352
|
- spec/grape/validations/validators/values_spec.rb
|
346
353
|
- spec/grape/validations/validators/zh-CN.yml
|
347
354
|
- spec/grape/validations_spec.rb
|
355
|
+
- spec/integration/eager_load/eager_load_spec.rb
|
348
356
|
- spec/integration/multi_json/json_spec.rb
|
349
357
|
- spec/integration/multi_xml/xml_spec.rb
|
350
358
|
- spec/shared/versioning_examples.rb
|
351
359
|
- spec/spec_helper.rb
|
352
360
|
- spec/support/basic_auth_encode_helpers.rb
|
361
|
+
- spec/support/chunks.rb
|
353
362
|
- spec/support/content_type_helpers.rb
|
363
|
+
- spec/support/eager_load.rb
|
354
364
|
- spec/support/endpoint_faker.rb
|
355
365
|
- spec/support/file_streamer.rb
|
356
366
|
- spec/support/integer_helpers.rb
|
@@ -360,9 +370,9 @@ licenses:
|
|
360
370
|
- MIT
|
361
371
|
metadata:
|
362
372
|
bug_tracker_uri: https://github.com/ruby-grape/grape/issues
|
363
|
-
changelog_uri: https://github.com/ruby-grape/grape/blob/v1.
|
364
|
-
documentation_uri: https://www.rubydoc.info/gems/grape/1.
|
365
|
-
source_code_uri: https://github.com/ruby-grape/grape/tree/v1.
|
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
|
366
376
|
post_install_message:
|
367
377
|
rdoc_options: []
|
368
378
|
require_paths:
|
@@ -378,7 +388,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
378
388
|
- !ruby/object:Gem::Version
|
379
389
|
version: '0'
|
380
390
|
requirements: []
|
381
|
-
rubygems_version: 3.
|
391
|
+
rubygems_version: 3.1.2
|
382
392
|
signing_key:
|
383
393
|
specification_version: 4
|
384
394
|
summary: A simple Ruby framework for building REST-like APIs.
|
@@ -386,8 +396,10 @@ test_files:
|
|
386
396
|
- spec/shared/versioning_examples.rb
|
387
397
|
- spec/support/versioned_helpers.rb
|
388
398
|
- spec/support/content_type_helpers.rb
|
399
|
+
- spec/support/eager_load.rb
|
389
400
|
- spec/support/basic_auth_encode_helpers.rb
|
390
401
|
- spec/support/file_streamer.rb
|
402
|
+
- spec/support/chunks.rb
|
391
403
|
- spec/support/endpoint_faker.rb
|
392
404
|
- spec/support/integer_helpers.rb
|
393
405
|
- spec/grape/api/namespace_parameters_in_route_spec.rb
|
@@ -410,6 +422,9 @@ test_files:
|
|
410
422
|
- spec/grape/api_remount_spec.rb
|
411
423
|
- spec/grape/validations/types_spec.rb
|
412
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
|
413
428
|
- spec/grape/validations/validators/regexp_spec.rb
|
414
429
|
- spec/grape/validations/validators/default_spec.rb
|
415
430
|
- spec/grape/validations/validators/values_spec.rb
|
@@ -453,6 +468,7 @@ test_files:
|
|
453
468
|
- spec/grape/integration/rack_spec.rb
|
454
469
|
- spec/grape/integration/rack_sendfile_spec.rb
|
455
470
|
- spec/grape/integration/global_namespace_function_spec.rb
|
471
|
+
- spec/grape/endpoint/declared_spec.rb
|
456
472
|
- spec/grape/presenters/presenter_spec.rb
|
457
473
|
- spec/grape/endpoint_spec.rb
|
458
474
|
- spec/grape/api_spec.rb
|
@@ -488,6 +504,7 @@ test_files:
|
|
488
504
|
- spec/grape/named_api_spec.rb
|
489
505
|
- spec/grape/loading_spec.rb
|
490
506
|
- spec/grape/request_spec.rb
|
507
|
+
- spec/integration/eager_load/eager_load_spec.rb
|
491
508
|
- spec/integration/multi_xml/xml_spec.rb
|
492
509
|
- spec/integration/multi_json/json_spec.rb
|
493
510
|
- spec/spec_helper.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Grape
|
4
|
-
module ContentTypes
|
5
|
-
# Content types are listed in order of preference.
|
6
|
-
CONTENT_TYPES = { # rubocop:disable Style/MutableConstant
|
7
|
-
xml: 'application/xml',
|
8
|
-
serializable_hash: 'application/json',
|
9
|
-
json: 'application/json',
|
10
|
-
binary: 'application/octet-stream',
|
11
|
-
txt: 'text/plain'
|
12
|
-
}
|
13
|
-
|
14
|
-
def self.content_types_for_settings(settings)
|
15
|
-
return if settings.blank?
|
16
|
-
|
17
|
-
settings.each_with_object({}) { |value, result| result.merge!(value) }
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.content_types_for(from_settings)
|
21
|
-
if from_settings.present?
|
22
|
-
from_settings
|
23
|
-
else
|
24
|
-
Grape::ContentTypes::CONTENT_TYPES
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|