dzl 1.0.1 → 1.0.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.
@@ -61,10 +61,14 @@ class Dzl::DSLProxies::ParameterBlock < Dzl::DSLProxy
61
61
  def import_pblock(*pblocks)
62
62
  pblocks.each do |pblock|
63
63
  next unless @subject.router.pblocks.has_key?(pblock)
64
- @subject.router.pblocks[pblock].params.each do |name, param|
64
+ pb = @subject.router.pblocks[pblock]
65
+ pb.params.each do |name, param|
65
66
  @subject.params[name] = param.clone
66
67
  end
68
+ pb.opts.each do |name, opt|
69
+ @subject.opts[name] = opt.clone
70
+ end
67
71
  end
68
72
  end
69
73
  alias_method :import_parameters, :import_pblock
70
- end
74
+ end
@@ -88,7 +88,11 @@ class Dzl::DSLSubjects::Router < Dzl::DSLSubject
88
88
  )
89
89
  true
90
90
  else
91
- errors[endpoint.route] = validation.error
91
+ if validation.error == :request_method_not_supported
92
+ errors[endpoint.route] ||= :request_method_not_supported
93
+ else
94
+ errors[endpoint.route] = validation.error
95
+ end
92
96
  false
93
97
  end
94
98
  end
@@ -0,0 +1,16 @@
1
+ require 'dzl/examples/base'
2
+
3
+ class Dzl::Examples::FunWithGlobalParams < Dzl::Examples::Base
4
+ defaults do
5
+ content_type 'application/json'
6
+ end
7
+
8
+ global_pblock do
9
+ protect do
10
+ api_key header: 'x_api_key', valid_keys: ['valid-key']
11
+ end
12
+ required(:number) {type Fixnum}
13
+ end
14
+
15
+ post '/globally_protected'
16
+ end
@@ -54,6 +54,19 @@ class Dzl::Examples::FunWithParams < Dzl::Examples::Base
54
54
  end
55
55
  end
56
56
 
57
+ get '/multi_endpoint_route' do
58
+ protect do
59
+ api_key header: 'x_api_key', valid_keys: ['valid-key']
60
+ end
61
+ handle{'OK'}
62
+ end
63
+
64
+ post '/multi_endpoint_route' do
65
+ required(:number) { type Fixnum }
66
+ end
67
+
68
+ put '/multi_endpoint_route'
69
+
57
70
  endpoint '/api_proc' do
58
71
  protect do
59
72
  api_key header: 'x_api_key', validate_with: lambda {|key| key.match(/valid/)}
data/lib/dzl/request.rb CHANGED
@@ -68,7 +68,7 @@ class Dzl::Request < Rack::Request
68
68
  protected
69
69
  def preformatted_params
70
70
  @preformatted_params ||= begin
71
- if content_type == "application/json"
71
+ if content_type == "application/json" && !body.blank?
72
72
  JSON.parse(body).recursively_symbolize_keys!
73
73
  else
74
74
  {}
data/lib/dzl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dzl
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'rack/test'
3
+ require 'dzl/examples/fun_with_global_params'
4
+
5
+ describe Dzl::Examples::FunWithGlobalParams do
6
+ include Rack::Test::Methods
7
+
8
+ def app; Dzl::Examples::FunWithGlobalParams; end
9
+
10
+ describe '/globally_protected' do
11
+ before(:each) {header 'Content-Type', 'application/json'}
12
+ let(:post_body) {{'number' => 23}.to_json}
13
+ let(:valid_key) {{'HTTP_X_API_KEY' => 'valid-key'}}
14
+
15
+ it 'should 401 if no api key provided' do
16
+ post '/globally_protected'
17
+ last_response.status.should == 401
18
+ end
19
+
20
+ it 'should 401 if invalid api key provided' do
21
+ post '/globally_protected', {}, {"HTTP_X_API_KEY" => 'invalid-key'}
22
+ last_response.status.should == 401
23
+ end
24
+
25
+ it 'should accept valid api key' do
26
+ post '/globally_protected', post_body, valid_key
27
+ last_response.status.should == 200
28
+ end
29
+
30
+ it 'should reject invalid required parameter' do
31
+ invalid_body = {'number' => 'string'}.to_json
32
+ post('/globally_protected', invalid_body, valid_key) do |response|
33
+ response.status.should == 404
34
+ JSON.parse(response.body)['errors']['/globally_protected'].should == {
35
+ 'number' => 'type_conversion_error'
36
+ }
37
+ end
38
+ end
39
+ end
40
+ end
@@ -29,6 +29,13 @@ describe 'handlers' do
29
29
  end
30
30
  end
31
31
 
32
+ it "should handle empty body for content-type application/json" do
33
+ get '/say_bar?baz=no&bam=nope&bar=Hello%2C%20world', '', {"CONTENT_TYPE" => "application/json"} do |response|
34
+ response.status.should == 200
35
+ response.body.should == 'Hello, world'
36
+ end
37
+ end
38
+
32
39
  it 'calls error hooks on errors' do
33
40
  Object.should_receive(:first_error_hook)
34
41
  Object.should_receive(:second_error_hook)
@@ -110,7 +110,7 @@ describe Dzl::Examples::FunWithParams do
110
110
  it 'converts :bar to time' do
111
111
  get '/foo/2012-01-01' do |response|
112
112
  response.status.should == 200
113
- JSON.parse(response.body)['params']['bar'].should == '2012-01-01T00:00:00-05:00'
113
+ Time.parse(JSON.parse(response.body)['params']['bar']).should == Time.parse('2012-01-01T00:00:00')
114
114
  end
115
115
  end
116
116
  end
@@ -189,6 +189,52 @@ describe Dzl::Examples::FunWithParams do
189
189
  end
190
190
  end
191
191
 
192
+ describe 'get /multi_endpoint_route' do
193
+ it 'should 401 if no api key provided' do
194
+ get '/multi_endpoint_route'
195
+ last_response.status.should == 401
196
+ end
197
+
198
+ it 'should 401 if invalid api key provided' do
199
+ get '/multi_endpoint_route', {}, {"HTTP_X_API_KEY" => 'invalid-key'}
200
+ last_response.status.should == 401
201
+ end
202
+
203
+ it 'should accept valid api key' do
204
+ get '/multi_endpoint_route', {}, {"HTTP_X_API_KEY" => 'valid-key'}
205
+ last_response.status.should == 200
206
+ end
207
+ end
208
+
209
+ describe 'post /multi_endpoint_route' do
210
+ it 'should not allow a request with no parameters in the body' do
211
+ header 'Content-Type', 'application/json'
212
+ post('/multi_endpoint_route', {}.to_json) do |response|
213
+ response.status.should == 404
214
+ JSON.parse(response.body)['errors']['/multi_endpoint_route'].should == {
215
+ 'number' => 'missing_required_param'
216
+ }
217
+ end
218
+ end
219
+
220
+ it 'should not allow string instead of number' do
221
+ header 'Content-Type', 'application/json'
222
+ post('/multi_endpoint_route', {'number' => 'string'}.to_json) do |response|
223
+ response.status.should == 404
224
+ JSON.parse(response.body)['errors']['/multi_endpoint_route'].should == {
225
+ 'number' => 'type_conversion_error'
226
+ }
227
+ end
228
+ end
229
+ end
230
+
231
+ describe 'put /multi_endpoint_route' do
232
+ it 'should return a valid response' do
233
+ put '/multi_endpoint_route', {}
234
+ last_response.status.should == 200
235
+ end
236
+ end
237
+
192
238
  describe '/api_proc' do
193
239
  it 'should 401 if no api key provided' do
194
240
  get '/api_proc'
data/spec/trey_spec.rb CHANGED
@@ -85,11 +85,11 @@ describe 'trey support' do
85
85
 
86
86
  it "understands time parameters" do
87
87
  get('/page_insights', req_params.merge({
88
- since:"#{req_params[:since]}T00:00:00-05:00",
89
- until:"#{req_params[:until]}T00:00:00-05:00",
88
+ since: Time.parse(req_params[:since]),
89
+ until: Time.parse(req_params[:until]),
90
90
  })) do |response|
91
91
  response.status.should == 200
92
- JSON.parse(response.body)['params']['since'].should == '2012-01-01'
92
+ Time.parse(JSON.parse(response.body)['params']['since']).should == Time.parse('2012-01-01')
93
93
  end
94
94
  end
95
95
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dzl
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-04 00:00:00.000000000 Z
13
+ date: 2012-07-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
17
- requirement: &70301799221440 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: 1.4.1
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70301799221440
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 1.4.1
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: activesupport
28
- requirement: &70301799219580 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ~>
@@ -33,7 +38,12 @@ dependencies:
33
38
  version: 3.2.2
34
39
  type: :runtime
35
40
  prerelease: false
36
- version_requirements: *70301799219580
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 3.2.2
37
47
  description: Small, fast racktivesupport web framework with handy DSL and explicit
38
48
  parameter validation.
39
49
  email:
@@ -78,6 +88,7 @@ files:
78
88
  - lib/dzl/dsl_subjects/scope.rb
79
89
  - lib/dzl/errors.rb
80
90
  - lib/dzl/examples/base.rb
91
+ - lib/dzl/examples/fun_with_global_params.rb
81
92
  - lib/dzl/examples/fun_with_handlers.rb
82
93
  - lib/dzl/examples/fun_with_hashes.rb
83
94
  - lib/dzl/examples/fun_with_hooks.rb
@@ -105,6 +116,7 @@ files:
105
116
  - lib/hash_validator/hash_validator.rb
106
117
  - spec/dsl_subject_spec.rb
107
118
  - spec/endpoint_doc_spec.rb
119
+ - spec/fun_with_global_params_spec.rb
108
120
  - spec/fun_with_handlers_spec.rb
109
121
  - spec/fun_with_hashes_spec.rb
110
122
  - spec/fun_with_hooks_spec.rb
@@ -133,21 +145,28 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
145
  - - ! '>='
134
146
  - !ruby/object:Gem::Version
135
147
  version: '0'
148
+ segments:
149
+ - 0
150
+ hash: -426579451222087061
136
151
  required_rubygems_version: !ruby/object:Gem::Requirement
137
152
  none: false
138
153
  requirements:
139
154
  - - ! '>='
140
155
  - !ruby/object:Gem::Version
141
156
  version: '0'
157
+ segments:
158
+ - 0
159
+ hash: -426579451222087061
142
160
  requirements: []
143
161
  rubyforge_project:
144
- rubygems_version: 1.8.15
162
+ rubygems_version: 1.8.24
145
163
  signing_key:
146
164
  specification_version: 3
147
165
  summary: Parameter validation and request routing DSL & web framework
148
166
  test_files:
149
167
  - spec/dsl_subject_spec.rb
150
168
  - spec/endpoint_doc_spec.rb
169
+ - spec/fun_with_global_params_spec.rb
151
170
  - spec/fun_with_handlers_spec.rb
152
171
  - spec/fun_with_hashes_spec.rb
153
172
  - spec/fun_with_hooks_spec.rb