grape 0.5.0 → 0.6.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.
Potentially problematic release.
This version of grape might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/.travis.yml +2 -6
- data/CHANGELOG.md +20 -0
- data/README.md +43 -11
- data/lib/grape.rb +6 -0
- data/lib/grape/api.rb +27 -14
- data/lib/grape/endpoint.rb +33 -34
- data/lib/grape/exceptions/base.rb +4 -2
- data/lib/grape/exceptions/validation.rb +13 -3
- data/lib/grape/exceptions/validation_errors.rb +42 -0
- data/lib/grape/http/request.rb +1 -1
- data/lib/grape/locale/en.yml +4 -3
- data/lib/grape/middleware/auth/base.rb +30 -0
- data/lib/grape/middleware/auth/basic.rb +2 -19
- data/lib/grape/middleware/auth/digest.rb +2 -19
- data/lib/grape/middleware/error.rb +10 -1
- data/lib/grape/middleware/formatter.rb +1 -1
- data/lib/grape/middleware/versioner/accept_version_header.rb +1 -1
- data/lib/grape/middleware/versioner/header.rb +2 -2
- data/lib/grape/path.rb +72 -0
- data/lib/grape/route.rb +6 -1
- data/lib/grape/validations.rb +25 -8
- data/lib/grape/validations/coerce.rb +1 -2
- data/lib/grape/validations/presence.rb +6 -2
- data/lib/grape/validations/regexp.rb +1 -2
- data/lib/grape/version.rb +1 -1
- data/spec/grape/api_spec.rb +71 -6
- data/spec/grape/entity_spec.rb +5 -5
- data/spec/grape/middleware/base_spec.rb +1 -1
- data/spec/grape/middleware/formatter_spec.rb +3 -3
- data/spec/grape/middleware/versioner/header_spec.rb +25 -0
- data/spec/grape/path_spec.rb +219 -0
- data/spec/grape/validations/coerce_spec.rb +31 -13
- data/spec/grape/validations/presence_spec.rb +12 -12
- data/spec/grape/validations/zh-CN.yml +4 -3
- data/spec/grape/validations_spec.rb +154 -10
- data/spec/support/versioned_helpers.rb +5 -2
- metadata +10 -45
@@ -12,7 +12,7 @@ describe Grape::Validations do
|
|
12
12
|
|
13
13
|
get '/optional', { :a_number => 'string' }
|
14
14
|
last_response.status.should == 400
|
15
|
-
last_response.body.should == '
|
15
|
+
last_response.body.should == 'a_number is invalid'
|
16
16
|
|
17
17
|
get '/optional', { :a_number => 45 }
|
18
18
|
last_response.status.should == 200
|
@@ -43,7 +43,7 @@ describe Grape::Validations do
|
|
43
43
|
it 'errors when param not present' do
|
44
44
|
get '/required'
|
45
45
|
last_response.status.should == 400
|
46
|
-
last_response.body.should == '
|
46
|
+
last_response.body.should == 'key is missing'
|
47
47
|
end
|
48
48
|
|
49
49
|
it "doesn't throw a missing param when param is present" do
|
@@ -58,6 +58,48 @@ describe Grape::Validations do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
context 'required with a block' do
|
62
|
+
before do
|
63
|
+
subject.params {
|
64
|
+
requires :items do
|
65
|
+
requires :key
|
66
|
+
end
|
67
|
+
}
|
68
|
+
subject.get '/required' do 'required works'; end
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'errors when param not present' do
|
72
|
+
get '/required'
|
73
|
+
last_response.status.should == 400
|
74
|
+
last_response.body.should == 'items[key] is missing'
|
75
|
+
end
|
76
|
+
|
77
|
+
it "doesn't throw a missing param when param is present" do
|
78
|
+
get '/required', { :items => [:key => 'hello', :key => 'world'] }
|
79
|
+
last_response.status.should == 200
|
80
|
+
last_response.body.should == 'required works'
|
81
|
+
end
|
82
|
+
|
83
|
+
it "doesn't allow more than one parameter" do
|
84
|
+
expect {
|
85
|
+
subject.params {
|
86
|
+
requires(:items, desc: 'Foo') do
|
87
|
+
requires :key
|
88
|
+
end
|
89
|
+
}
|
90
|
+
}.to raise_error ArgumentError
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'adds to declared parameters' do
|
94
|
+
subject.params {
|
95
|
+
requires :items do
|
96
|
+
requires :key
|
97
|
+
end
|
98
|
+
}
|
99
|
+
subject.settings[:declared_params].should == [:items => [:key]]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
61
103
|
context 'group' do
|
62
104
|
before do
|
63
105
|
subject.params {
|
@@ -71,7 +113,7 @@ describe Grape::Validations do
|
|
71
113
|
it 'errors when param not present' do
|
72
114
|
get '/required'
|
73
115
|
last_response.status.should == 400
|
74
|
-
last_response.body.should == '
|
116
|
+
last_response.body.should == 'items[key] is missing'
|
75
117
|
end
|
76
118
|
|
77
119
|
it "doesn't throw a missing param when param is present" do
|
@@ -90,12 +132,114 @@ describe Grape::Validations do
|
|
90
132
|
end
|
91
133
|
end
|
92
134
|
|
135
|
+
context 'optional with a block' do
|
136
|
+
before do
|
137
|
+
subject.params {
|
138
|
+
optional :items do
|
139
|
+
requires :key
|
140
|
+
end
|
141
|
+
}
|
142
|
+
subject.get '/optional_group' do 'optional group works'; end
|
143
|
+
end
|
144
|
+
|
145
|
+
it "doesn't throw a missing param when the group isn't present" do
|
146
|
+
get '/optional_group'
|
147
|
+
last_response.status.should == 200
|
148
|
+
last_response.body.should == 'optional group works'
|
149
|
+
end
|
150
|
+
|
151
|
+
it "doesn't throw a missing param when both group and param are given" do
|
152
|
+
get '/optional_group', { :items => {:key => 'foo'} }
|
153
|
+
last_response.status.should == 200
|
154
|
+
last_response.body.should == 'optional group works'
|
155
|
+
end
|
156
|
+
|
157
|
+
it "errors when group is present, but required param is not" do
|
158
|
+
get '/optional_group', { :items => {:NOT_key => 'foo'} }
|
159
|
+
last_response.status.should == 400
|
160
|
+
last_response.body.should == 'items[key] is missing'
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'adds to declared parameters' do
|
164
|
+
subject.params {
|
165
|
+
optional :items do
|
166
|
+
requires :key
|
167
|
+
end
|
168
|
+
}
|
169
|
+
subject.settings[:declared_params].should == [:items => [:key]]
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
context 'nested optional blocks' do
|
174
|
+
before do
|
175
|
+
subject.params {
|
176
|
+
optional :items do
|
177
|
+
requires :key
|
178
|
+
optional(:optional_subitems) { requires :value }
|
179
|
+
requires(:required_subitems) { requires :value }
|
180
|
+
end
|
181
|
+
}
|
182
|
+
subject.get('/nested_optional_group') { 'nested optional group works' }
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'does no internal validations if the outer group is blank' do
|
186
|
+
get '/nested_optional_group'
|
187
|
+
last_response.status.should == 200
|
188
|
+
last_response.body.should == 'nested optional group works'
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'does internal validations if the outer group is present' do
|
192
|
+
get '/nested_optional_group', { :items => {:key => 'foo' }}
|
193
|
+
last_response.status.should == 400
|
194
|
+
last_response.body.should == 'items[required_subitems][value] is missing'
|
195
|
+
|
196
|
+
get '/nested_optional_group', { :items => { :key => 'foo', :required_subitems => {:value => 'bar'}}}
|
197
|
+
last_response.status.should == 200
|
198
|
+
last_response.body.should == 'nested optional group works'
|
199
|
+
end
|
200
|
+
|
201
|
+
it 'handles deep nesting' do
|
202
|
+
get '/nested_optional_group', { :items => { :key => 'foo', :required_subitems => {:value => 'bar'}, :optional_subitems => {:NOT_value => 'baz'}}}
|
203
|
+
last_response.status.should == 400
|
204
|
+
last_response.body.should == 'items[optional_subitems][value] is missing'
|
205
|
+
|
206
|
+
get '/nested_optional_group', { :items => { :key => 'foo', :required_subitems => {:value => 'bar'}, :optional_subitems => {:value => 'baz'}}}
|
207
|
+
last_response.status.should == 200
|
208
|
+
last_response.body.should == 'nested optional group works'
|
209
|
+
end
|
210
|
+
|
211
|
+
it 'adds to declared parameters' do
|
212
|
+
subject.params {
|
213
|
+
optional :items do
|
214
|
+
requires :key
|
215
|
+
optional(:optional_subitems) { requires :value }
|
216
|
+
requires(:required_subitems) { requires :value }
|
217
|
+
end
|
218
|
+
}
|
219
|
+
subject.settings[:declared_params].should == [:items => [:key, {:optional_subitems => [:value]}, {:required_subitems => [:value]}]]
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
context 'multiple validation errors' do
|
224
|
+
before do
|
225
|
+
subject.params { requires :yolo; requires :swag }
|
226
|
+
subject.get '/two_required' do 'two required works'; end
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'throws the validation errors' do
|
230
|
+
get '/two_required'
|
231
|
+
last_response.status.should == 400
|
232
|
+
last_response.body.should =~ /yolo is missing/
|
233
|
+
last_response.body.should =~ /swag is missing/
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
93
237
|
context 'custom validation' do
|
94
238
|
module CustomValidations
|
95
239
|
class Customvalidator < Grape::Validations::Validator
|
96
240
|
def validate_param!(attr_name, params)
|
97
241
|
unless params[attr_name] == 'im custom'
|
98
|
-
|
242
|
+
raise Grape::Exceptions::Validation, :param => @scope.full_name(attr_name), :message => "is not custom!"
|
99
243
|
end
|
100
244
|
end
|
101
245
|
end
|
@@ -114,7 +258,7 @@ describe Grape::Validations do
|
|
114
258
|
|
115
259
|
get '/optional_custom', { :custom => 'im wrong' }
|
116
260
|
last_response.status.should == 400
|
117
|
-
last_response.body.should == 'custom
|
261
|
+
last_response.body.should == 'custom is not custom!'
|
118
262
|
end
|
119
263
|
|
120
264
|
it "skips validation when parameter isn't present" do
|
@@ -128,7 +272,7 @@ describe Grape::Validations do
|
|
128
272
|
|
129
273
|
get '/optional_custom', { :custom => 123 }
|
130
274
|
last_response.status.should == 400
|
131
|
-
last_response.body.should == 'custom
|
275
|
+
last_response.body.should == 'custom is not custom!'
|
132
276
|
end
|
133
277
|
end
|
134
278
|
|
@@ -141,7 +285,7 @@ describe Grape::Validations do
|
|
141
285
|
it 'validates when param is present' do
|
142
286
|
get '/required_custom', { :custom => 'im wrong, validate me' }
|
143
287
|
last_response.status.should == 400
|
144
|
-
last_response.body.should == 'custom
|
288
|
+
last_response.body.should == 'custom is not custom!'
|
145
289
|
|
146
290
|
get '/required_custom', { :custom => 'im custom' }
|
147
291
|
last_response.status.should == 200
|
@@ -151,7 +295,7 @@ describe Grape::Validations do
|
|
151
295
|
it 'validates when param is not present' do
|
152
296
|
get '/required_custom'
|
153
297
|
last_response.status.should == 400
|
154
|
-
last_response.body.should == 'missing
|
298
|
+
last_response.body.should == 'custom is missing, custom is not custom!'
|
155
299
|
end
|
156
300
|
|
157
301
|
context 'nested namespaces' do
|
@@ -183,13 +327,13 @@ describe Grape::Validations do
|
|
183
327
|
specify 'the parent namespace uses the validator' do
|
184
328
|
get '/nested/one', { :custom => 'im wrong, validate me'}
|
185
329
|
last_response.status.should == 400
|
186
|
-
last_response.body.should == 'custom
|
330
|
+
last_response.body.should == 'custom is not custom!'
|
187
331
|
end
|
188
332
|
|
189
333
|
specify 'the nested namesapce inherits the custom validator' do
|
190
334
|
get '/nested/nested/two', { :custom => 'im wrong, validate me'}
|
191
335
|
last_response.status.should == 400
|
192
|
-
last_response.body.should == 'custom
|
336
|
+
last_response.body.should == 'custom is not custom!'
|
193
337
|
end
|
194
338
|
|
195
339
|
specify 'peer namesapces does not have the validator' do
|
@@ -25,7 +25,10 @@ def versioned_headers(options)
|
|
25
25
|
{} # no-op
|
26
26
|
when :header
|
27
27
|
{
|
28
|
-
'HTTP_ACCEPT' =>
|
28
|
+
'HTTP_ACCEPT' => [
|
29
|
+
"application/vnd.#{options[:vendor]}-#{options[:version]}",
|
30
|
+
options[:format]
|
31
|
+
].compact.join("+")
|
29
32
|
}
|
30
33
|
when :accept_version_header
|
31
34
|
{
|
@@ -41,7 +44,7 @@ def versioned_get(path, version_name, version_options = {})
|
|
41
44
|
headers = versioned_headers(version_options.merge(:version => version_name))
|
42
45
|
params = {}
|
43
46
|
if version_options[:using] == :param
|
44
|
-
params = { version_options[:parameter] => version_name }
|
47
|
+
params = { version_options[:parameter] => version_name }
|
45
48
|
end
|
46
49
|
get path, params, headers
|
47
50
|
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.6.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Michael Bleigh
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-09-16 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rack
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ! '>='
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rack-mount
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rack-accept
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: activesupport
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: multi_json
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,7 +83,6 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: multi_xml
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ! '>='
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,7 +90,6 @@ dependencies:
|
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ! '>='
|
108
95
|
- !ruby/object:Gem::Version
|
@@ -110,7 +97,6 @@ dependencies:
|
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: hashie
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
101
|
- - ! '>='
|
116
102
|
- !ruby/object:Gem::Version
|
@@ -118,7 +104,6 @@ dependencies:
|
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
108
|
- - ! '>='
|
124
109
|
- !ruby/object:Gem::Version
|
@@ -126,7 +111,6 @@ dependencies:
|
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: virtus
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
115
|
- - ! '>='
|
132
116
|
- !ruby/object:Gem::Version
|
@@ -134,7 +118,6 @@ dependencies:
|
|
134
118
|
type: :runtime
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
122
|
- - ! '>='
|
140
123
|
- !ruby/object:Gem::Version
|
@@ -142,7 +125,6 @@ dependencies:
|
|
142
125
|
- !ruby/object:Gem::Dependency
|
143
126
|
name: builder
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
128
|
requirements:
|
147
129
|
- - ! '>='
|
148
130
|
- !ruby/object:Gem::Version
|
@@ -150,7 +132,6 @@ dependencies:
|
|
150
132
|
type: :runtime
|
151
133
|
prerelease: false
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
135
|
requirements:
|
155
136
|
- - ! '>='
|
156
137
|
- !ruby/object:Gem::Version
|
@@ -158,7 +139,6 @@ dependencies:
|
|
158
139
|
- !ruby/object:Gem::Dependency
|
159
140
|
name: grape-entity
|
160
141
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
142
|
requirements:
|
163
143
|
- - ! '>='
|
164
144
|
- !ruby/object:Gem::Version
|
@@ -166,7 +146,6 @@ dependencies:
|
|
166
146
|
type: :development
|
167
147
|
prerelease: false
|
168
148
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
149
|
requirements:
|
171
150
|
- - ! '>='
|
172
151
|
- !ruby/object:Gem::Version
|
@@ -174,7 +153,6 @@ dependencies:
|
|
174
153
|
- !ruby/object:Gem::Dependency
|
175
154
|
name: rake
|
176
155
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
156
|
requirements:
|
179
157
|
- - ! '>='
|
180
158
|
- !ruby/object:Gem::Version
|
@@ -182,7 +160,6 @@ dependencies:
|
|
182
160
|
type: :development
|
183
161
|
prerelease: false
|
184
162
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
163
|
requirements:
|
187
164
|
- - ! '>='
|
188
165
|
- !ruby/object:Gem::Version
|
@@ -190,7 +167,6 @@ dependencies:
|
|
190
167
|
- !ruby/object:Gem::Dependency
|
191
168
|
name: maruku
|
192
169
|
requirement: !ruby/object:Gem::Requirement
|
193
|
-
none: false
|
194
170
|
requirements:
|
195
171
|
- - ! '>='
|
196
172
|
- !ruby/object:Gem::Version
|
@@ -198,7 +174,6 @@ dependencies:
|
|
198
174
|
type: :development
|
199
175
|
prerelease: false
|
200
176
|
version_requirements: !ruby/object:Gem::Requirement
|
201
|
-
none: false
|
202
177
|
requirements:
|
203
178
|
- - ! '>='
|
204
179
|
- !ruby/object:Gem::Version
|
@@ -206,7 +181,6 @@ dependencies:
|
|
206
181
|
- !ruby/object:Gem::Dependency
|
207
182
|
name: yard
|
208
183
|
requirement: !ruby/object:Gem::Requirement
|
209
|
-
none: false
|
210
184
|
requirements:
|
211
185
|
- - ! '>='
|
212
186
|
- !ruby/object:Gem::Version
|
@@ -214,7 +188,6 @@ dependencies:
|
|
214
188
|
type: :development
|
215
189
|
prerelease: false
|
216
190
|
version_requirements: !ruby/object:Gem::Requirement
|
217
|
-
none: false
|
218
191
|
requirements:
|
219
192
|
- - ! '>='
|
220
193
|
- !ruby/object:Gem::Version
|
@@ -222,7 +195,6 @@ dependencies:
|
|
222
195
|
- !ruby/object:Gem::Dependency
|
223
196
|
name: rack-test
|
224
197
|
requirement: !ruby/object:Gem::Requirement
|
225
|
-
none: false
|
226
198
|
requirements:
|
227
199
|
- - ! '>='
|
228
200
|
- !ruby/object:Gem::Version
|
@@ -230,7 +202,6 @@ dependencies:
|
|
230
202
|
type: :development
|
231
203
|
prerelease: false
|
232
204
|
version_requirements: !ruby/object:Gem::Requirement
|
233
|
-
none: false
|
234
205
|
requirements:
|
235
206
|
- - ! '>='
|
236
207
|
- !ruby/object:Gem::Version
|
@@ -238,7 +209,6 @@ dependencies:
|
|
238
209
|
- !ruby/object:Gem::Dependency
|
239
210
|
name: rspec
|
240
211
|
requirement: !ruby/object:Gem::Requirement
|
241
|
-
none: false
|
242
212
|
requirements:
|
243
213
|
- - ~>
|
244
214
|
- !ruby/object:Gem::Version
|
@@ -246,7 +216,6 @@ dependencies:
|
|
246
216
|
type: :development
|
247
217
|
prerelease: false
|
248
218
|
version_requirements: !ruby/object:Gem::Requirement
|
249
|
-
none: false
|
250
219
|
requirements:
|
251
220
|
- - ~>
|
252
221
|
- !ruby/object:Gem::Version
|
@@ -254,7 +223,6 @@ dependencies:
|
|
254
223
|
- !ruby/object:Gem::Dependency
|
255
224
|
name: bundler
|
256
225
|
requirement: !ruby/object:Gem::Requirement
|
257
|
-
none: false
|
258
226
|
requirements:
|
259
227
|
- - ! '>='
|
260
228
|
- !ruby/object:Gem::Version
|
@@ -262,7 +230,6 @@ dependencies:
|
|
262
230
|
type: :development
|
263
231
|
prerelease: false
|
264
232
|
version_requirements: !ruby/object:Gem::Requirement
|
265
|
-
none: false
|
266
233
|
requirements:
|
267
234
|
- - ! '>='
|
268
235
|
- !ruby/object:Gem::Version
|
@@ -303,6 +270,7 @@ files:
|
|
303
270
|
- lib/grape/exceptions/unknown_options.rb
|
304
271
|
- lib/grape/exceptions/unknown_validator.rb
|
305
272
|
- lib/grape/exceptions/validation.rb
|
273
|
+
- lib/grape/exceptions/validation_errors.rb
|
306
274
|
- lib/grape/formatter/base.rb
|
307
275
|
- lib/grape/formatter/json.rb
|
308
276
|
- lib/grape/formatter/serializable_hash.rb
|
@@ -310,6 +278,7 @@ files:
|
|
310
278
|
- lib/grape/formatter/xml.rb
|
311
279
|
- lib/grape/http/request.rb
|
312
280
|
- lib/grape/locale/en.yml
|
281
|
+
- lib/grape/middleware/auth/base.rb
|
313
282
|
- lib/grape/middleware/auth/basic.rb
|
314
283
|
- lib/grape/middleware/auth/digest.rb
|
315
284
|
- lib/grape/middleware/auth/oauth2.rb
|
@@ -326,6 +295,7 @@ files:
|
|
326
295
|
- lib/grape/parser/base.rb
|
327
296
|
- lib/grape/parser/json.rb
|
328
297
|
- lib/grape/parser/xml.rb
|
298
|
+
- lib/grape/path.rb
|
329
299
|
- lib/grape/route.rb
|
330
300
|
- lib/grape/util/content_types.rb
|
331
301
|
- lib/grape/util/deep_merge.rb
|
@@ -357,6 +327,7 @@ files:
|
|
357
327
|
- spec/grape/middleware/versioner/param_spec.rb
|
358
328
|
- spec/grape/middleware/versioner/path_spec.rb
|
359
329
|
- spec/grape/middleware/versioner_spec.rb
|
330
|
+
- spec/grape/path_spec.rb
|
360
331
|
- spec/grape/util/hash_stack_spec.rb
|
361
332
|
- spec/grape/validations/coerce_spec.rb
|
362
333
|
- spec/grape/validations/default_spec.rb
|
@@ -371,33 +342,26 @@ files:
|
|
371
342
|
homepage: https://github.com/intridea/grape
|
372
343
|
licenses:
|
373
344
|
- MIT
|
345
|
+
metadata: {}
|
374
346
|
post_install_message:
|
375
347
|
rdoc_options: []
|
376
348
|
require_paths:
|
377
349
|
- lib
|
378
350
|
required_ruby_version: !ruby/object:Gem::Requirement
|
379
|
-
none: false
|
380
351
|
requirements:
|
381
352
|
- - ! '>='
|
382
353
|
- !ruby/object:Gem::Version
|
383
354
|
version: '0'
|
384
|
-
segments:
|
385
|
-
- 0
|
386
|
-
hash: -683082835591277946
|
387
355
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
388
|
-
none: false
|
389
356
|
requirements:
|
390
357
|
- - ! '>='
|
391
358
|
- !ruby/object:Gem::Version
|
392
359
|
version: '0'
|
393
|
-
segments:
|
394
|
-
- 0
|
395
|
-
hash: -683082835591277946
|
396
360
|
requirements: []
|
397
361
|
rubyforge_project: grape
|
398
|
-
rubygems_version:
|
362
|
+
rubygems_version: 2.0.7
|
399
363
|
signing_key:
|
400
|
-
specification_version:
|
364
|
+
specification_version: 4
|
401
365
|
summary: A simple Ruby framework for building REST-like APIs.
|
402
366
|
test_files:
|
403
367
|
- spec/grape/api_spec.rb
|
@@ -421,6 +385,7 @@ test_files:
|
|
421
385
|
- spec/grape/middleware/versioner/param_spec.rb
|
422
386
|
- spec/grape/middleware/versioner/path_spec.rb
|
423
387
|
- spec/grape/middleware/versioner_spec.rb
|
388
|
+
- spec/grape/path_spec.rb
|
424
389
|
- spec/grape/util/hash_stack_spec.rb
|
425
390
|
- spec/grape/validations/coerce_spec.rb
|
426
391
|
- spec/grape/validations/default_spec.rb
|