dzl 1.0.0.beta0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. data/.gitignore +6 -0
  2. data/.rspec +1 -0
  3. data/.rvmrc +1 -0
  4. data/Gemfile +9 -0
  5. data/README.md +44 -0
  6. data/Rakefile +15 -0
  7. data/config.ru +41 -0
  8. data/dzl.gemspec +21 -0
  9. data/lib/dzl/doc/endpoint_doc.rb +70 -0
  10. data/lib/dzl/doc/router_doc.rb +26 -0
  11. data/lib/dzl/doc/task.rb +5 -0
  12. data/lib/dzl/doc/templates/endpoint.erb +55 -0
  13. data/lib/dzl/doc/templates/home.erb +8 -0
  14. data/lib/dzl/doc.rb +58 -0
  15. data/lib/dzl/dsl_proxies/defaults.rb +10 -0
  16. data/lib/dzl/dsl_proxies/endpoint.rb +30 -0
  17. data/lib/dzl/dsl_proxies/parameter.rb +75 -0
  18. data/lib/dzl/dsl_proxies/parameter_block.rb +61 -0
  19. data/lib/dzl/dsl_proxies/protection.rb +6 -0
  20. data/lib/dzl/dsl_proxies/router.rb +62 -0
  21. data/lib/dzl/dsl_proxy.rb +8 -0
  22. data/lib/dzl/dsl_subject.rb +15 -0
  23. data/lib/dzl/dsl_subjects/defaults.rb +12 -0
  24. data/lib/dzl/dsl_subjects/endpoint.rb +79 -0
  25. data/lib/dzl/dsl_subjects/parameter/allowed_values.rb +60 -0
  26. data/lib/dzl/dsl_subjects/parameter/type_conversion.rb +59 -0
  27. data/lib/dzl/dsl_subjects/parameter.rb +100 -0
  28. data/lib/dzl/dsl_subjects/parameter_block.rb +64 -0
  29. data/lib/dzl/dsl_subjects/protection.rb +31 -0
  30. data/lib/dzl/dsl_subjects/router.rb +87 -0
  31. data/lib/dzl/errors.rb +33 -0
  32. data/lib/dzl/examples/base.rb +9 -0
  33. data/lib/dzl/examples/fun_with_handlers.rb +33 -0
  34. data/lib/dzl/examples/fun_with_hooks.rb +65 -0
  35. data/lib/dzl/examples/fun_with_params.rb +71 -0
  36. data/lib/dzl/examples/fun_with_requests.rb +47 -0
  37. data/lib/dzl/examples/route_profile.rb +158 -0
  38. data/lib/dzl/examples/trey.rb +97 -0
  39. data/lib/dzl/logger.rb +65 -0
  40. data/lib/dzl/rack_interface.rb +95 -0
  41. data/lib/dzl/request.rb +54 -0
  42. data/lib/dzl/response_context/request_helpers.rb +11 -0
  43. data/lib/dzl/response_context.rb +47 -0
  44. data/lib/dzl/validator.rb +10 -0
  45. data/lib/dzl/validators/size.rb +32 -0
  46. data/lib/dzl/validators/value.rb +30 -0
  47. data/lib/dzl/value_or_error.rb +32 -0
  48. data/lib/dzl/version.rb +3 -0
  49. data/lib/dzl.rb +96 -0
  50. data/spec/dsl_subject_spec.rb +14 -0
  51. data/spec/endpoint_doc_spec.rb +25 -0
  52. data/spec/fun_with_handlers_spec.rb +37 -0
  53. data/spec/fun_with_hooks_spec.rb +61 -0
  54. data/spec/fun_with_params_spec.rb +197 -0
  55. data/spec/fun_with_requests_spec.rb +101 -0
  56. data/spec/logger_spec.rb +48 -0
  57. data/spec/route_params_spec.rb +13 -0
  58. data/spec/router_doc_spec.rb +32 -0
  59. data/spec/spec_helper.rb +8 -0
  60. data/spec/trey_spec.rb +135 -0
  61. data/spec/value_or_error_spec.rb +44 -0
  62. metadata +142 -0
data/spec/trey_spec.rb ADDED
@@ -0,0 +1,135 @@
1
+ require 'spec_helper'
2
+ require 'rack/test'
3
+ require 'dzl/examples/trey'
4
+
5
+ describe 'trey support' do
6
+ include Rack::Test::Methods
7
+
8
+ def app; Dzl::Examples::Trey; end
9
+
10
+ describe '/page_insights' do
11
+ req_params = {
12
+ page_ids: [1, 2, 3].join(' '),
13
+ metrics: ['m1', 'm2'].join(' '),
14
+ since: '2012-01-01',
15
+ until: '2012-02-01'
16
+ }
17
+
18
+ opt_params = {
19
+ interval: 'week'
20
+ }
21
+
22
+ bad_params = {
23
+ post_ids: [4, 5, 6].join(' '),
24
+ limit: 100,
25
+ sort: 'these',
26
+ order: 'descending'
27
+ }
28
+
29
+ it "responds 404 to a request with no parameters" do
30
+ get '/page_insights' do |response|
31
+ response.status.should == 404
32
+ errors = JSON.parse(response.body)['errors']['/page_insights']
33
+ errors.size.should == 4 # required params
34
+ errors.values.each {|v| v.should == 'missing_required_param'}
35
+ end
36
+ end
37
+
38
+ it "responds 404 with only optional parameters" do
39
+ get('/page_insights', opt_params) do |response|
40
+ response.status.should == 404
41
+ errors = JSON.parse(response.body)['errors']['/page_insights']
42
+ errors.size.should == 4 # required params
43
+ errors.values.each {|v| v.should == 'missing_required_param'}
44
+ end
45
+ end
46
+
47
+ it "responds 404 if extra, unknown parameters are provided" do
48
+ get('/page_insights', req_params.merge(foo: 'bar')) do |response|
49
+ JSON.parse(response.body).has_key?('params').should == false
50
+ response.status.should == 404
51
+ end
52
+ end
53
+
54
+ it "responds 200 to a request with required parameters provided" do
55
+ get('/page_insights', req_params) do |response|
56
+ response.status.should == 200
57
+ end
58
+ end
59
+
60
+ it "allows optional parameters in addition to the required params" do
61
+ get('/page_insights', req_params.merge(opt_params)) do |response|
62
+ response.status.should == 200
63
+ end
64
+ end
65
+
66
+ it "sets omitted optional parameters to their default values" do
67
+ get('/page_insights', req_params) do |response|
68
+ JSON.parse(response.body)['params']['interval'].should == 'day'
69
+ end
70
+ end
71
+
72
+ it "understands array parameters" do
73
+ get('/page_insights', req_params) do |response|
74
+ response.status.should == 200
75
+ JSON.parse(response.body)['params']['page_ids'].should == ['1', '2', '3']
76
+ end
77
+ end
78
+
79
+ it "understands date parameters" do
80
+ get('/page_insights', req_params) do |response|
81
+ response.status.should == 200
82
+ JSON.parse(response.body)['params']['since'].should == '2012-01-01'
83
+ end
84
+ end
85
+
86
+ it "understands time parameters" do
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",
90
+ })) do |response|
91
+ response.status.should == 200
92
+ JSON.parse(response.body)['params']['since'].should == '2012-01-01'
93
+ end
94
+ end
95
+
96
+ it "responds 404 to a request with required parameters improperly formatted" do
97
+ get('/page_insights', req_params.merge(since: 'not a date')) do |response|
98
+ response.status.should == 404
99
+ errors = JSON.parse(response.body)['errors']['/page_insights']
100
+ errors.size.should == 1
101
+ errors.values.each {|v| v.should == 'type_conversion_error'}
102
+ end
103
+ end
104
+
105
+ it "checks array length conditions" do
106
+ get('/page_insights', req_params.merge(page_ids: [1, 2, 3, 4, 5, 6].join(' '))) do |response|
107
+ response.status.should == 404
108
+ errors = JSON.parse(response.body)['errors']['/page_insights']
109
+ errors.size.should == 1
110
+ errors.values.each {|v| v.should == 'size_validation_failed'}
111
+ end
112
+ end
113
+
114
+ it "validates that only allowed parameters are accepted" do
115
+ get('/page_insights', req_params.merge(metrics:['not_allowed'])) do |response|
116
+ response.status.should == 404
117
+ errors = JSON.parse(response.body)['errors']['/page_insights']
118
+ errors.size.should == 1
119
+ errors.values.each {|v| v.should == 'allowed_values_failed'}
120
+ end
121
+ end
122
+
123
+ it "transforms params prior to validation" do
124
+ get('/posts', req_params.merge(sort:'m1', order:'ASC')) do |response|
125
+ response.status.should == 200
126
+ JSON.parse(response.body)['params']['order'].should == 'asc'
127
+ end
128
+ end
129
+ end
130
+
131
+ it "knows the rack environment" do
132
+ Dzl.env.should == 'test'
133
+ Dzl.test?.should == true
134
+ end
135
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dzl::ValueOrError do
4
+ it 'can be initialized with value or error but not both' do
5
+ expect {
6
+ Dzl::ValueOrError.new(value: 1)
7
+
8
+ Dzl::ValueOrError.new(error: 2)
9
+ }.to_not raise_exception
10
+
11
+ expect {
12
+ Dzl::ValueOrError.new(value: 3, error: 4)
13
+ }.to raise_exception
14
+ end
15
+
16
+ it "knows whether it's a value or an error" do
17
+ v = Dzl::ValueOrError.new(value: 5)
18
+ e = Dzl::ValueOrError.new(error: 6)
19
+
20
+ (e.error? && v.value?).should == true
21
+ (v.error? && e.value?).should == false
22
+
23
+ v.value.should == 5
24
+ e.error.should == 6
25
+
26
+ e.value.should == nil
27
+ v.error.should == nil
28
+ end
29
+
30
+ it 'allows v: and e: shortcuts in initializer hash' do
31
+ e = Dzl::ValueOrError.new(e: 7)
32
+ e.error.should == 7
33
+
34
+ v = Dzl::ValueOrError.new(v: 8)
35
+ v.value.should == 8
36
+ end
37
+
38
+ it 'accepts nil as a valid value' do
39
+ v = Dzl::ValueOrError.new(v: nil)
40
+
41
+ v.value?.should == true
42
+ v.value.should == nil
43
+ end
44
+ end
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dzl
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.beta0
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Kyle Brett
9
+ - Paul Bergeron
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-03-15 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rack
17
+ requirement: &70134974768260 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *70134974768260
26
+ - !ruby/object:Gem::Dependency
27
+ name: activesupport
28
+ requirement: &70134974767320 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *70134974767320
37
+ description: Dzl zones live!
38
+ email:
39
+ - kyle@vitrue.com
40
+ - pbergeron@vitrue.com
41
+ executables: []
42
+ extensions: []
43
+ extra_rdoc_files: []
44
+ files:
45
+ - .gitignore
46
+ - .rspec
47
+ - .rvmrc
48
+ - Gemfile
49
+ - README.md
50
+ - Rakefile
51
+ - config.ru
52
+ - dzl.gemspec
53
+ - lib/dzl.rb
54
+ - lib/dzl/doc.rb
55
+ - lib/dzl/doc/endpoint_doc.rb
56
+ - lib/dzl/doc/router_doc.rb
57
+ - lib/dzl/doc/task.rb
58
+ - lib/dzl/doc/templates/endpoint.erb
59
+ - lib/dzl/doc/templates/home.erb
60
+ - lib/dzl/dsl_proxies/defaults.rb
61
+ - lib/dzl/dsl_proxies/endpoint.rb
62
+ - lib/dzl/dsl_proxies/parameter.rb
63
+ - lib/dzl/dsl_proxies/parameter_block.rb
64
+ - lib/dzl/dsl_proxies/protection.rb
65
+ - lib/dzl/dsl_proxies/router.rb
66
+ - lib/dzl/dsl_proxy.rb
67
+ - lib/dzl/dsl_subject.rb
68
+ - lib/dzl/dsl_subjects/defaults.rb
69
+ - lib/dzl/dsl_subjects/endpoint.rb
70
+ - lib/dzl/dsl_subjects/parameter.rb
71
+ - lib/dzl/dsl_subjects/parameter/allowed_values.rb
72
+ - lib/dzl/dsl_subjects/parameter/type_conversion.rb
73
+ - lib/dzl/dsl_subjects/parameter_block.rb
74
+ - lib/dzl/dsl_subjects/protection.rb
75
+ - lib/dzl/dsl_subjects/router.rb
76
+ - lib/dzl/errors.rb
77
+ - lib/dzl/examples/base.rb
78
+ - lib/dzl/examples/fun_with_handlers.rb
79
+ - lib/dzl/examples/fun_with_hooks.rb
80
+ - lib/dzl/examples/fun_with_params.rb
81
+ - lib/dzl/examples/fun_with_requests.rb
82
+ - lib/dzl/examples/route_profile.rb
83
+ - lib/dzl/examples/trey.rb
84
+ - lib/dzl/logger.rb
85
+ - lib/dzl/rack_interface.rb
86
+ - lib/dzl/request.rb
87
+ - lib/dzl/response_context.rb
88
+ - lib/dzl/response_context/request_helpers.rb
89
+ - lib/dzl/validator.rb
90
+ - lib/dzl/validators/size.rb
91
+ - lib/dzl/validators/value.rb
92
+ - lib/dzl/value_or_error.rb
93
+ - lib/dzl/version.rb
94
+ - spec/dsl_subject_spec.rb
95
+ - spec/endpoint_doc_spec.rb
96
+ - spec/fun_with_handlers_spec.rb
97
+ - spec/fun_with_hooks_spec.rb
98
+ - spec/fun_with_params_spec.rb
99
+ - spec/fun_with_requests_spec.rb
100
+ - spec/logger_spec.rb
101
+ - spec/route_params_spec.rb
102
+ - spec/router_doc_spec.rb
103
+ - spec/spec_helper.rb
104
+ - spec/trey_spec.rb
105
+ - spec/value_or_error_spec.rb
106
+ homepage: http://github.com/vitrue/dzl
107
+ licenses: []
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ! '>'
122
+ - !ruby/object:Gem::Version
123
+ version: 1.3.1
124
+ requirements: []
125
+ rubyforge_project:
126
+ rubygems_version: 1.8.15
127
+ signing_key:
128
+ specification_version: 3
129
+ summary: Parameter validation and request routing DSL & framework
130
+ test_files:
131
+ - spec/dsl_subject_spec.rb
132
+ - spec/endpoint_doc_spec.rb
133
+ - spec/fun_with_handlers_spec.rb
134
+ - spec/fun_with_hooks_spec.rb
135
+ - spec/fun_with_params_spec.rb
136
+ - spec/fun_with_requests_spec.rb
137
+ - spec/logger_spec.rb
138
+ - spec/route_params_spec.rb
139
+ - spec/router_doc_spec.rb
140
+ - spec/spec_helper.rb
141
+ - spec/trey_spec.rb
142
+ - spec/value_or_error_spec.rb