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.

Files changed (38) hide show
  1. checksums.yaml +15 -0
  2. data/.travis.yml +2 -6
  3. data/CHANGELOG.md +20 -0
  4. data/README.md +43 -11
  5. data/lib/grape.rb +6 -0
  6. data/lib/grape/api.rb +27 -14
  7. data/lib/grape/endpoint.rb +33 -34
  8. data/lib/grape/exceptions/base.rb +4 -2
  9. data/lib/grape/exceptions/validation.rb +13 -3
  10. data/lib/grape/exceptions/validation_errors.rb +42 -0
  11. data/lib/grape/http/request.rb +1 -1
  12. data/lib/grape/locale/en.yml +4 -3
  13. data/lib/grape/middleware/auth/base.rb +30 -0
  14. data/lib/grape/middleware/auth/basic.rb +2 -19
  15. data/lib/grape/middleware/auth/digest.rb +2 -19
  16. data/lib/grape/middleware/error.rb +10 -1
  17. data/lib/grape/middleware/formatter.rb +1 -1
  18. data/lib/grape/middleware/versioner/accept_version_header.rb +1 -1
  19. data/lib/grape/middleware/versioner/header.rb +2 -2
  20. data/lib/grape/path.rb +72 -0
  21. data/lib/grape/route.rb +6 -1
  22. data/lib/grape/validations.rb +25 -8
  23. data/lib/grape/validations/coerce.rb +1 -2
  24. data/lib/grape/validations/presence.rb +6 -2
  25. data/lib/grape/validations/regexp.rb +1 -2
  26. data/lib/grape/version.rb +1 -1
  27. data/spec/grape/api_spec.rb +71 -6
  28. data/spec/grape/entity_spec.rb +5 -5
  29. data/spec/grape/middleware/base_spec.rb +1 -1
  30. data/spec/grape/middleware/formatter_spec.rb +3 -3
  31. data/spec/grape/middleware/versioner/header_spec.rb +25 -0
  32. data/spec/grape/path_spec.rb +219 -0
  33. data/spec/grape/validations/coerce_spec.rb +31 -13
  34. data/spec/grape/validations/presence_spec.rb +12 -12
  35. data/spec/grape/validations/zh-CN.yml +4 -3
  36. data/spec/grape/validations_spec.rb +154 -10
  37. data/spec/support/versioned_helpers.rb +5 -2
  38. metadata +10 -45
@@ -1,9 +1,10 @@
1
1
  zh-CN:
2
2
  grape:
3
3
  errors:
4
+ format: ! '%{attribute}%{message}'
4
5
  attributes:
5
6
  age: 年龄
6
7
  messages:
7
- coerce: '%{attribute}格式不正确'
8
- presence: '请填写{attribute}'
9
- regexp: '%{attribute}格式不正确'
8
+ coerce: '格式不正确'
9
+ presence: '请填写'
10
+ regexp: '格式不正确'
@@ -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 == 'invalid parameter: a_number'
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 == 'missing parameter: key'
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 == 'missing parameter: items[key]'
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
- throw :error, :status => 400, :message => "#{attr_name}: is not custom!"
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: is not 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: is not 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: is not 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 parameter: custom'
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: is not 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: is not 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' => "application/vnd.#{options[:vendor]}-#{options[:version]}+#{options[:format]}"
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.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-06-14 00:00:00.000000000 Z
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: 1.8.25
362
+ rubygems_version: 2.0.7
399
363
  signing_key:
400
- specification_version: 3
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