dzl 1.0.0.beta0

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.
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