grape 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +51 -2
- data/README.md +43 -10
- data/UPGRADING.md +91 -0
- data/grape.gemspec +5 -5
- data/lib/grape/api/instance.rb +13 -17
- data/lib/grape/api.rb +7 -14
- data/lib/grape/cookies.rb +2 -0
- data/lib/grape/dsl/callbacks.rb +1 -1
- data/lib/grape/dsl/desc.rb +3 -5
- data/lib/grape/dsl/helpers.rb +6 -4
- data/lib/grape/dsl/inside_route.rb +18 -9
- data/lib/grape/dsl/middleware.rb +4 -4
- data/lib/grape/dsl/parameters.rb +11 -7
- data/lib/grape/dsl/request_response.rb +9 -6
- data/lib/grape/dsl/routing.rb +7 -6
- data/lib/grape/dsl/settings.rb +5 -5
- data/lib/grape/endpoint.rb +21 -36
- data/lib/grape/error_formatter/json.rb +2 -6
- data/lib/grape/error_formatter/xml.rb +2 -6
- data/lib/grape/exceptions/empty_message_body.rb +11 -0
- data/lib/grape/exceptions/validation.rb +2 -3
- data/lib/grape/exceptions/validation_errors.rb +1 -1
- data/lib/grape/formatter/json.rb +1 -0
- data/lib/grape/formatter/serializable_hash.rb +2 -1
- data/lib/grape/formatter/xml.rb +1 -0
- data/lib/grape/locale/en.yml +1 -1
- data/lib/grape/middleware/auth/base.rb +3 -3
- data/lib/grape/middleware/base.rb +4 -2
- data/lib/grape/middleware/error.rb +1 -1
- data/lib/grape/middleware/formatter.rb +4 -4
- data/lib/grape/middleware/stack.rb +10 -16
- data/lib/grape/middleware/versioner/accept_version_header.rb +3 -5
- data/lib/grape/middleware/versioner/header.rb +6 -4
- data/lib/grape/middleware/versioner/param.rb +1 -0
- data/lib/grape/middleware/versioner/parse_media_type_patch.rb +2 -1
- data/lib/grape/middleware/versioner/path.rb +2 -0
- data/lib/grape/parser/json.rb +1 -1
- data/lib/grape/parser/xml.rb +1 -1
- data/lib/grape/path.rb +1 -0
- data/lib/grape/request.rb +3 -0
- data/lib/grape/router/attribute_translator.rb +1 -1
- data/lib/grape/router/pattern.rb +1 -1
- data/lib/grape/router/route.rb +2 -2
- data/lib/grape/router.rb +6 -0
- data/lib/grape/util/inheritable_setting.rb +1 -3
- data/lib/grape/util/lazy_value.rb +3 -2
- 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 +92 -58
- data/lib/grape/validations/single_attribute_iterator.rb +1 -1
- data/lib/grape/validations/types/custom_type_coercer.rb +3 -2
- data/lib/grape/validations/types/dry_type_coercer.rb +1 -1
- data/lib/grape/validations/types/invalid_value.rb +24 -0
- data/lib/grape/validations/types/json.rb +2 -1
- data/lib/grape/validations/types/primitive_coercer.rb +3 -3
- data/lib/grape/validations/types.rb +1 -4
- data/lib/grape/validations/validator_factory.rb +1 -1
- data/lib/grape/validations/validators/all_or_none.rb +1 -0
- data/lib/grape/validations/validators/as.rb +4 -8
- data/lib/grape/validations/validators/at_least_one_of.rb +1 -0
- data/lib/grape/validations/validators/base.rb +12 -7
- data/lib/grape/validations/validators/coerce.rb +8 -9
- data/lib/grape/validations/validators/default.rb +1 -0
- data/lib/grape/validations/validators/exactly_one_of.rb +1 -0
- data/lib/grape/validations/validators/multiple_params_base.rb +5 -2
- data/lib/grape/validations/validators/mutual_exclusion.rb +1 -0
- data/lib/grape/validations/validators/presence.rb +1 -0
- data/lib/grape/validations/validators/regexp.rb +1 -0
- data/lib/grape/validations/validators/same_as.rb +1 -0
- data/lib/grape/validations/validators/values.rb +3 -0
- data/lib/grape/version.rb +1 -1
- data/lib/grape.rb +3 -1
- data/spec/grape/api/custom_validations_spec.rb +1 -0
- data/spec/grape/api/routes_with_requirements_spec.rb +8 -8
- data/spec/grape/api_remount_spec.rb +9 -4
- data/spec/grape/api_spec.rb +203 -37
- data/spec/grape/dsl/callbacks_spec.rb +1 -1
- data/spec/grape/dsl/middleware_spec.rb +1 -1
- data/spec/grape/dsl/parameters_spec.rb +1 -0
- data/spec/grape/dsl/routing_spec.rb +1 -1
- data/spec/grape/endpoint/declared_spec.rb +259 -1
- data/spec/grape/endpoint_spec.rb +18 -5
- data/spec/grape/entity_spec.rb +10 -10
- data/spec/grape/middleware/auth/dsl_spec.rb +1 -1
- data/spec/grape/middleware/error_spec.rb +1 -2
- data/spec/grape/middleware/formatter_spec.rb +2 -2
- data/spec/grape/middleware/stack_spec.rb +4 -3
- 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 +37 -3
- data/spec/grape/validations/single_attribute_iterator_spec.rb +17 -6
- data/spec/grape/validations/types/primitive_coercer_spec.rb +2 -2
- data/spec/grape/validations/validators/coerce_spec.rb +129 -22
- data/spec/grape/validations/validators/except_values_spec.rb +2 -2
- data/spec/grape/validations/validators/values_spec.rb +15 -11
- data/spec/grape/validations_spec.rb +280 -0
- data/spec/shared/versioning_examples.rb +22 -22
- data/spec/spec_helper.rb +1 -1
- data/spec/support/basic_auth_encode_helpers.rb +1 -1
- data/spec/support/versioned_helpers.rb +1 -1
- metadata +8 -6
@@ -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
|
|
@@ -70,14 +70,14 @@ shared_examples_for 'versioning' do
|
|
70
70
|
|
71
71
|
subject.version 'v1', macro_options do
|
72
72
|
get 'version' do
|
73
|
-
|
73
|
+
"version #{request.env['api.version']}"
|
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
|
@@ -94,15 +94,15 @@ shared_examples_for 'versioning' do
|
|
94
94
|
|
95
95
|
subject.version 'v1', macro_options do
|
96
96
|
get 'version' do
|
97
|
-
|
97
|
+
"version #{request.env['api.version']}"
|
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
@@ -44,7 +44,7 @@ module Spec
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def versioned_get(path, version_name, **version_options)
|
47
|
-
path
|
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
50
|
params = { version_options[:parameter] => version_name } if version_options[:using] == :param
|
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.6.0
|
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-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -137,6 +137,7 @@ files:
|
|
137
137
|
- lib/grape/error_formatter/txt.rb
|
138
138
|
- lib/grape/error_formatter/xml.rb
|
139
139
|
- lib/grape/exceptions/base.rb
|
140
|
+
- lib/grape/exceptions/empty_message_body.rb
|
140
141
|
- lib/grape/exceptions/incompatible_option_values.rb
|
141
142
|
- lib/grape/exceptions/invalid_accept_header.rb
|
142
143
|
- lib/grape/exceptions/invalid_formatter.rb
|
@@ -227,6 +228,7 @@ files:
|
|
227
228
|
- lib/grape/validations/types/custom_type_collection_coercer.rb
|
228
229
|
- lib/grape/validations/types/dry_type_coercer.rb
|
229
230
|
- lib/grape/validations/types/file.rb
|
231
|
+
- lib/grape/validations/types/invalid_value.rb
|
230
232
|
- lib/grape/validations/types/json.rb
|
231
233
|
- lib/grape/validations/types/multiple_type_coercer.rb
|
232
234
|
- lib/grape/validations/types/primitive_coercer.rb
|
@@ -369,9 +371,9 @@ licenses:
|
|
369
371
|
- MIT
|
370
372
|
metadata:
|
371
373
|
bug_tracker_uri: https://github.com/ruby-grape/grape/issues
|
372
|
-
changelog_uri: https://github.com/ruby-grape/grape/blob/v1.
|
373
|
-
documentation_uri: https://www.rubydoc.info/gems/grape/1.
|
374
|
-
source_code_uri: https://github.com/ruby-grape/grape/tree/v1.
|
374
|
+
changelog_uri: https://github.com/ruby-grape/grape/blob/v1.6.0/CHANGELOG.md
|
375
|
+
documentation_uri: https://www.rubydoc.info/gems/grape/1.6.0
|
376
|
+
source_code_uri: https://github.com/ruby-grape/grape/tree/v1.6.0
|
375
377
|
post_install_message:
|
376
378
|
rdoc_options: []
|
377
379
|
require_paths:
|
@@ -380,7 +382,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
380
382
|
requirements:
|
381
383
|
- - ">="
|
382
384
|
- !ruby/object:Gem::Version
|
383
|
-
version: 2.
|
385
|
+
version: 2.5.0
|
384
386
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
385
387
|
requirements:
|
386
388
|
- - ">="
|