sinatra-api 1.1.5 → 1.1.7

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.
@@ -37,7 +37,8 @@ module Sinatra::API
37
37
  value = hash[key]
38
38
  typename = definition[:type]
39
39
  validator = definition[:validator]
40
- validator ||= self.validators[typename]
40
+ validator = validators[validator] if validator.is_a?(Symbol)
41
+ validator ||= validators[typename]
41
42
  definition[:coerce] = true unless definition.has_key?(:coerce)
42
43
 
43
44
  if validator
@@ -51,7 +52,7 @@ module Sinatra::API
51
52
  rc = validator.validate(value, definition)
52
53
  # ?
53
54
  else
54
- raise 'Invalid ParameterValidator, must respond to #call or #validate'
55
+ raise "Invalid ParameterValidator #{validator.class}, must respond to #call or #validate"
55
56
  end
56
57
 
57
58
  if rc.is_a?(String)
@@ -178,7 +178,7 @@ module Sinatra::API
178
178
  raise ArgumentError, 'API Argument type must be either :required or :optional'
179
179
  end
180
180
 
181
- if !h.has_key?(name)
181
+ if !h || !h.has_key?(name)
182
182
  if type == :required
183
183
  halt 400, "Missing required parameter :#{name}"
184
184
  end
@@ -21,6 +21,6 @@
21
21
 
22
22
  module Sinatra
23
23
  module API
24
- VERSION = "1.1.5"
24
+ VERSION = "1.1.7"
25
25
  end
26
26
  end
@@ -1,3 +1,37 @@
1
1
  describe Sinatra::API::ParameterValidator do
2
2
  include_examples 'integration specs'
3
+
4
+ context 'defining parameters' do
5
+ it 'should define a required parameter using hash style' do
6
+ app.post '/' do
7
+ api_required!({
8
+ id: :integer
9
+ })
10
+ api_params.to_json
11
+ end
12
+
13
+ rc = api_call post '/', { id: "15" }.to_json
14
+ rc.should succeed(200)
15
+ rc.body[:id].should == 15
16
+ end
17
+
18
+ it 'should work with nested-hashes' do
19
+ pending 'nested parameter groups'
20
+
21
+ app.post '/' do
22
+ api_required!({
23
+ project: {
24
+ id: :integer
25
+ }
26
+ })
27
+ api_params.to_json
28
+ end
29
+
30
+ rc = api_call post '/', { project: { id: "15" } }.to_json
31
+ rc.should succeed(200)
32
+ puts rc.body.inspect
33
+ rc.body[:project][:id].should == 15
34
+ end
35
+
36
+ end
3
37
  end
@@ -15,6 +15,44 @@ describe Sinatra::API::Parameters do
15
15
  last_response.body.should match(/Missing required parameter :id/)
16
16
  end
17
17
 
18
+ it 'should define a required group parameter' do
19
+ pending 'nested parameter groups'
20
+
21
+ app.post '/' do
22
+ api_required!({
23
+ id: nil,
24
+ project: {
25
+ name: nil
26
+ }
27
+ })
28
+
29
+ api_params.to_json
30
+ end
31
+
32
+ rc = api_call post '/', { id: 123, project: { name: 'adooga' } }.to_json
33
+ rc.should succeed
34
+ rc.body.should == {
35
+ id: 123,
36
+ project: {
37
+ name: 'adooga'
38
+ }
39
+ }.with_indifferent_access
40
+ end
41
+
42
+ it 'should reject when missing a required group parameter' do
43
+ app.post '/' do
44
+ api_required!({
45
+ id: nil,
46
+ project: {
47
+ name: nil
48
+ }
49
+ })
50
+ end
51
+
52
+ rc = api_call post '/', { id: 123 }.to_json
53
+ rc.should fail(400, 'missing name')
54
+ end
55
+
18
56
  it 'should define required parameters using list style' do
19
57
  app.post '/' do
20
58
  api_required!([ :id, :name ])
@@ -141,4 +179,15 @@ describe Sinatra::API::Parameters do
141
179
  }.to_json
142
180
  end
143
181
 
182
+ it 'should conflict with route parameters' do
183
+ app.post '/chickens/:chicken_id' do
184
+ api_parameter! :chicken_id, type: :string
185
+ api_params.to_json
186
+ end
187
+
188
+ rc = api_call post '/chickens/12', { chicken_id: 'keeek' }.to_json
189
+ rc.should succeed(200)
190
+ rc.body[:chicken_id].should == '12'
191
+ end
192
+
144
193
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.5
4
+ version: 1.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-16 00:00:00.000000000 Z
12
+ date: 2013-11-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json