grape 1.3.2 → 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 +82 -2
- data/LICENSE +1 -1
- data/README.md +120 -24
- data/UPGRADING.md +220 -39
- data/lib/grape.rb +3 -2
- data/lib/grape/api.rb +3 -3
- data/lib/grape/api/instance.rb +22 -25
- data/lib/grape/dsl/callbacks.rb +1 -1
- data/lib/grape/dsl/helpers.rb +1 -0
- data/lib/grape/dsl/inside_route.rb +70 -37
- data/lib/grape/dsl/parameters.rb +8 -4
- data/lib/grape/dsl/routing.rb +6 -7
- 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/validation.rb +1 -1
- data/lib/grape/exceptions/validation_errors.rb +1 -1
- data/lib/grape/middleware/auth/base.rb +3 -3
- data/lib/grape/middleware/base.rb +3 -2
- data/lib/grape/middleware/error.rb +11 -13
- data/lib/grape/middleware/formatter.rb +3 -3
- data/lib/grape/middleware/stack.rb +8 -1
- data/lib/grape/request.rb +1 -1
- data/lib/grape/router.rb +25 -39
- data/lib/grape/router/attribute_translator.rb +26 -5
- data/lib/grape/router/route.rb +1 -19
- 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 +2 -2
- data/lib/grape/util/lazy_value.rb +1 -0
- 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 +9 -7
- data/lib/grape/validations/single_attribute_iterator.rb +1 -1
- data/lib/grape/validations/types.rb +1 -4
- data/lib/grape/validations/types/array_coercer.rb +14 -5
- data/lib/grape/validations/types/build_coercer.rb +1 -5
- data/lib/grape/validations/types/custom_type_coercer.rb +15 -1
- data/lib/grape/validations/types/dry_type_coercer.rb +36 -1
- data/lib/grape/validations/types/invalid_value.rb +24 -0
- data/lib/grape/validations/types/primitive_coercer.rb +9 -3
- 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/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 +8 -14
- data/lib/grape/validations/validators/default.rb +3 -5
- 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/values.rb +1 -1
- data/lib/grape/version.rb +1 -1
- data/spec/grape/api/instance_spec.rb +50 -0
- data/spec/grape/api_remount_spec.rb +9 -4
- data/spec/grape/api_spec.rb +75 -0
- 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/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 +1 -1
- data/spec/grape/middleware/stack_spec.rb +1 -0
- data/spec/grape/request_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 +65 -5
- data/spec/grape/validations/types/set_coercer_spec.rb +34 -0
- data/spec/grape/validations/validators/coerce_spec.rb +223 -25
- data/spec/grape/validations/validators/default_spec.rb +170 -0
- 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 +290 -18
- data/spec/integration/eager_load/eager_load_spec.rb +15 -0
- data/spec/shared/versioning_examples.rb +20 -20
- data/spec/spec_helper.rb +0 -10
- data/spec/support/chunks.rb +14 -0
- data/spec/support/versioned_helpers.rb +4 -6
- metadata +20 -9
@@ -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
|
@@ -7,7 +7,7 @@ shared_examples_for 'versioning' do
|
|
7
7
|
subject.get :hello do
|
8
8
|
"Version: #{request.env['api.version']}"
|
9
9
|
end
|
10
|
-
versioned_get '/hello', 'v1', macro_options
|
10
|
+
versioned_get '/hello', 'v1', **macro_options
|
11
11
|
expect(last_response.body).to eql 'Version: v1'
|
12
12
|
end
|
13
13
|
|
@@ -18,7 +18,7 @@ shared_examples_for 'versioning' do
|
|
18
18
|
subject.get :hello do
|
19
19
|
"Version: #{request.env['api.version']}"
|
20
20
|
end
|
21
|
-
versioned_get '/hello', 'v1', macro_options.merge(prefix: 'api')
|
21
|
+
versioned_get '/hello', 'v1', **macro_options.merge(prefix: 'api')
|
22
22
|
expect(last_response.body).to eql 'Version: v1'
|
23
23
|
end
|
24
24
|
|
@@ -34,14 +34,14 @@ shared_examples_for 'versioning' do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
versioned_get '/awesome', 'v1', macro_options
|
37
|
+
versioned_get '/awesome', 'v1', **macro_options
|
38
38
|
expect(last_response.status).to eql 404
|
39
39
|
|
40
|
-
versioned_get '/awesome', 'v2', macro_options
|
40
|
+
versioned_get '/awesome', 'v2', **macro_options
|
41
41
|
expect(last_response.status).to eql 200
|
42
|
-
versioned_get '/legacy', 'v1', macro_options
|
42
|
+
versioned_get '/legacy', 'v1', **macro_options
|
43
43
|
expect(last_response.status).to eql 200
|
44
|
-
versioned_get '/legacy', 'v2', macro_options
|
44
|
+
versioned_get '/legacy', 'v2', **macro_options
|
45
45
|
expect(last_response.status).to eql 404
|
46
46
|
end
|
47
47
|
|
@@ -51,11 +51,11 @@ shared_examples_for 'versioning' do
|
|
51
51
|
'I exist'
|
52
52
|
end
|
53
53
|
|
54
|
-
versioned_get '/awesome', 'v1', macro_options
|
54
|
+
versioned_get '/awesome', 'v1', **macro_options
|
55
55
|
expect(last_response.status).to eql 200
|
56
|
-
versioned_get '/awesome', 'v2', macro_options
|
56
|
+
versioned_get '/awesome', 'v2', **macro_options
|
57
57
|
expect(last_response.status).to eql 200
|
58
|
-
versioned_get '/awesome', 'v3', macro_options
|
58
|
+
versioned_get '/awesome', 'v3', **macro_options
|
59
59
|
expect(last_response.status).to eql 404
|
60
60
|
end
|
61
61
|
|
@@ -74,10 +74,10 @@ shared_examples_for 'versioning' do
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
versioned_get '/version', 'v2', macro_options
|
77
|
+
versioned_get '/version', 'v2', **macro_options
|
78
78
|
expect(last_response.status).to eq(200)
|
79
79
|
expect(last_response.body).to eq('v2')
|
80
|
-
versioned_get '/version', 'v1', macro_options
|
80
|
+
versioned_get '/version', 'v1', **macro_options
|
81
81
|
expect(last_response.status).to eq(200)
|
82
82
|
expect(last_response.body).to eq('version v1')
|
83
83
|
end
|
@@ -98,11 +98,11 @@ shared_examples_for 'versioning' do
|
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
101
|
-
versioned_get '/version', 'v1', macro_options.merge(prefix: subject.prefix)
|
101
|
+
versioned_get '/version', 'v1', **macro_options.merge(prefix: subject.prefix)
|
102
102
|
expect(last_response.status).to eq(200)
|
103
103
|
expect(last_response.body).to eq('version v1')
|
104
104
|
|
105
|
-
versioned_get '/version', 'v2', macro_options.merge(prefix: subject.prefix)
|
105
|
+
versioned_get '/version', 'v2', **macro_options.merge(prefix: subject.prefix)
|
106
106
|
expect(last_response.status).to eq(200)
|
107
107
|
expect(last_response.body).to eq('v2')
|
108
108
|
end
|
@@ -131,11 +131,11 @@ shared_examples_for 'versioning' do
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
-
versioned_get '/version', 'v1', macro_options.merge(prefix: subject.prefix)
|
134
|
+
versioned_get '/version', 'v1', **macro_options.merge(prefix: subject.prefix)
|
135
135
|
expect(last_response.status).to eq(200)
|
136
136
|
expect(last_response.body).to eq('v1-version')
|
137
137
|
|
138
|
-
versioned_get '/version', 'v2', macro_options.merge(prefix: subject.prefix)
|
138
|
+
versioned_get '/version', 'v2', **macro_options.merge(prefix: subject.prefix)
|
139
139
|
expect(last_response.status).to eq(200)
|
140
140
|
expect(last_response.body).to eq('v2-version')
|
141
141
|
end
|
@@ -148,7 +148,7 @@ shared_examples_for 'versioning' do
|
|
148
148
|
subject.get :api_version_with_version_param do
|
149
149
|
params[:version]
|
150
150
|
end
|
151
|
-
versioned_get '/api_version_with_version_param?version=1', 'v1', macro_options
|
151
|
+
versioned_get '/api_version_with_version_param?version=1', 'v1', **macro_options
|
152
152
|
expect(last_response.body).to eql '1'
|
153
153
|
end
|
154
154
|
|
@@ -183,13 +183,13 @@ shared_examples_for 'versioning' do
|
|
183
183
|
|
184
184
|
context 'v1' do
|
185
185
|
it 'finds endpoint' do
|
186
|
-
versioned_get '/version', 'v1', macro_options
|
186
|
+
versioned_get '/version', 'v1', **macro_options
|
187
187
|
expect(last_response.status).to eq(200)
|
188
188
|
expect(last_response.body).to eq('v1')
|
189
189
|
end
|
190
190
|
|
191
191
|
it 'finds catch all' do
|
192
|
-
versioned_get '/whatever', 'v1', macro_options
|
192
|
+
versioned_get '/whatever', 'v1', **macro_options
|
193
193
|
expect(last_response.status).to eq(200)
|
194
194
|
expect(last_response.body).to end_with 'whatever'
|
195
195
|
end
|
@@ -197,13 +197,13 @@ shared_examples_for 'versioning' do
|
|
197
197
|
|
198
198
|
context 'v2' do
|
199
199
|
it 'finds endpoint' do
|
200
|
-
versioned_get '/version', 'v2', macro_options
|
200
|
+
versioned_get '/version', 'v2', **macro_options
|
201
201
|
expect(last_response.status).to eq(200)
|
202
202
|
expect(last_response.body).to eq('v2')
|
203
203
|
end
|
204
204
|
|
205
205
|
it 'finds catch all' do
|
206
|
-
versioned_get '/whatever', 'v2', macro_options
|
206
|
+
versioned_get '/whatever', 'v2', **macro_options
|
207
207
|
expect(last_response.status).to eq(200)
|
208
208
|
expect(last_response.body).to end_with 'whatever'
|
209
209
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -20,17 +20,7 @@ eager_load!
|
|
20
20
|
# so it should be set to true here as well to reflect that.
|
21
21
|
I18n.enforce_available_locales = true
|
22
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
|
-
|
32
23
|
RSpec.configure do |config|
|
33
|
-
config.include Chunks
|
34
24
|
config.include Rack::Test::Methods
|
35
25
|
config.include Spec::Support::Helpers
|
36
26
|
config.raise_errors_for_deprecations!
|
@@ -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
|
@@ -197,9 +197,9 @@ 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/
|
201
|
-
- lib/grape/
|
202
|
-
- 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
|
203
203
|
- lib/grape/util/base_inheritable.rb
|
204
204
|
- lib/grape/util/cache.rb
|
205
205
|
- lib/grape/util/endpoint_configuration.rb
|
@@ -227,6 +227,7 @@ files:
|
|
227
227
|
- lib/grape/validations/types/custom_type_collection_coercer.rb
|
228
228
|
- lib/grape/validations/types/dry_type_coercer.rb
|
229
229
|
- lib/grape/validations/types/file.rb
|
230
|
+
- lib/grape/validations/types/invalid_value.rb
|
230
231
|
- lib/grape/validations/types/json.rb
|
231
232
|
- lib/grape/validations/types/multiple_type_coercer.rb
|
232
233
|
- lib/grape/validations/types/primitive_coercer.rb
|
@@ -282,6 +283,7 @@ files:
|
|
282
283
|
- spec/grape/dsl/routing_spec.rb
|
283
284
|
- spec/grape/dsl/settings_spec.rb
|
284
285
|
- spec/grape/dsl/validations_spec.rb
|
286
|
+
- spec/grape/endpoint/declared_spec.rb
|
285
287
|
- spec/grape/endpoint_spec.rb
|
286
288
|
- spec/grape/entity_spec.rb
|
287
289
|
- spec/grape/exceptions/base_spec.rb
|
@@ -332,7 +334,9 @@ files:
|
|
332
334
|
- spec/grape/validations/multiple_attributes_iterator_spec.rb
|
333
335
|
- spec/grape/validations/params_scope_spec.rb
|
334
336
|
- spec/grape/validations/single_attribute_iterator_spec.rb
|
337
|
+
- spec/grape/validations/types/array_coercer_spec.rb
|
335
338
|
- spec/grape/validations/types/primitive_coercer_spec.rb
|
339
|
+
- spec/grape/validations/types/set_coercer_spec.rb
|
336
340
|
- spec/grape/validations/types_spec.rb
|
337
341
|
- spec/grape/validations/validators/all_or_none_spec.rb
|
338
342
|
- spec/grape/validations/validators/allow_blank_spec.rb
|
@@ -348,11 +352,13 @@ files:
|
|
348
352
|
- spec/grape/validations/validators/values_spec.rb
|
349
353
|
- spec/grape/validations/validators/zh-CN.yml
|
350
354
|
- spec/grape/validations_spec.rb
|
355
|
+
- spec/integration/eager_load/eager_load_spec.rb
|
351
356
|
- spec/integration/multi_json/json_spec.rb
|
352
357
|
- spec/integration/multi_xml/xml_spec.rb
|
353
358
|
- spec/shared/versioning_examples.rb
|
354
359
|
- spec/spec_helper.rb
|
355
360
|
- spec/support/basic_auth_encode_helpers.rb
|
361
|
+
- spec/support/chunks.rb
|
356
362
|
- spec/support/content_type_helpers.rb
|
357
363
|
- spec/support/eager_load.rb
|
358
364
|
- spec/support/endpoint_faker.rb
|
@@ -364,9 +370,9 @@ licenses:
|
|
364
370
|
- MIT
|
365
371
|
metadata:
|
366
372
|
bug_tracker_uri: https://github.com/ruby-grape/grape/issues
|
367
|
-
changelog_uri: https://github.com/ruby-grape/grape/blob/v1.
|
368
|
-
documentation_uri: https://www.rubydoc.info/gems/grape/1.
|
369
|
-
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
|
370
376
|
post_install_message:
|
371
377
|
rdoc_options: []
|
372
378
|
require_paths:
|
@@ -382,7 +388,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
382
388
|
- !ruby/object:Gem::Version
|
383
389
|
version: '0'
|
384
390
|
requirements: []
|
385
|
-
rubygems_version: 3.
|
391
|
+
rubygems_version: 3.1.2
|
386
392
|
signing_key:
|
387
393
|
specification_version: 4
|
388
394
|
summary: A simple Ruby framework for building REST-like APIs.
|
@@ -393,6 +399,7 @@ test_files:
|
|
393
399
|
- spec/support/eager_load.rb
|
394
400
|
- spec/support/basic_auth_encode_helpers.rb
|
395
401
|
- spec/support/file_streamer.rb
|
402
|
+
- spec/support/chunks.rb
|
396
403
|
- spec/support/endpoint_faker.rb
|
397
404
|
- spec/support/integer_helpers.rb
|
398
405
|
- spec/grape/api/namespace_parameters_in_route_spec.rb
|
@@ -415,6 +422,8 @@ test_files:
|
|
415
422
|
- spec/grape/api_remount_spec.rb
|
416
423
|
- spec/grape/validations/types_spec.rb
|
417
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
|
418
427
|
- spec/grape/validations/types/primitive_coercer_spec.rb
|
419
428
|
- spec/grape/validations/validators/regexp_spec.rb
|
420
429
|
- spec/grape/validations/validators/default_spec.rb
|
@@ -459,6 +468,7 @@ test_files:
|
|
459
468
|
- spec/grape/integration/rack_spec.rb
|
460
469
|
- spec/grape/integration/rack_sendfile_spec.rb
|
461
470
|
- spec/grape/integration/global_namespace_function_spec.rb
|
471
|
+
- spec/grape/endpoint/declared_spec.rb
|
462
472
|
- spec/grape/presenters/presenter_spec.rb
|
463
473
|
- spec/grape/endpoint_spec.rb
|
464
474
|
- spec/grape/api_spec.rb
|
@@ -494,6 +504,7 @@ test_files:
|
|
494
504
|
- spec/grape/named_api_spec.rb
|
495
505
|
- spec/grape/loading_spec.rb
|
496
506
|
- spec/grape/request_spec.rb
|
507
|
+
- spec/integration/eager_load/eager_load_spec.rb
|
497
508
|
- spec/integration/multi_xml/xml_spec.rb
|
498
509
|
- spec/integration/multi_json/json_spec.rb
|
499
510
|
- spec/spec_helper.rb
|