deas 0.24.0 → 0.24.1

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.
data/lib/deas/logging.rb CHANGED
@@ -102,7 +102,7 @@ module Deas
102
102
  'method' => request.request_method,
103
103
  'path' => request.path,
104
104
  'handler' => env['deas.handler_class_name'],
105
- 'params' => env['sinatra.params'],
105
+ 'params' => env['deas.params'],
106
106
  'time' => env['deas.time_taken'],
107
107
  'status' => status
108
108
  }
data/lib/deas/route.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'deas/sinatra_runner'
2
2
 
3
3
  module Deas
4
+
4
5
  class Route
5
6
 
6
7
  attr_reader :method, :path, :handler_proxy, :handler_class
@@ -15,14 +16,16 @@ module Deas
15
16
 
16
17
  # TODO: unit test this??
17
18
  def run(sinatra_call)
19
+ runner = Deas::SinatraRunner.new(self.handler_class, sinatra_call)
18
20
  sinatra_call.request.env.tap do |env|
19
- env['sinatra.params'] = sinatra_call.params
21
+ env['deas.params'] = runner.params
20
22
  env['deas.handler_class_name'] = self.handler_class.name
21
23
  env['deas.logging'].call " Handler: #{env['deas.handler_class_name']}"
22
- env['deas.logging'].call " Params: #{env['sinatra.params'].inspect}"
24
+ env['deas.logging'].call " Params: #{env['deas.params'].inspect}"
23
25
  end
24
- Deas::SinatraRunner.run(self.handler_class, sinatra_call)
26
+ runner.run
25
27
  end
26
28
 
27
29
  end
30
+
28
31
  end
data/lib/deas/runner.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'rack/utils'
2
+
1
3
  module Deas
2
4
 
3
5
  class Runner
@@ -19,6 +21,28 @@ module Deas
19
21
  def partial(*args); raise NotImplementedError; end
20
22
  def send_file(*args); raise NotImplementedError; end
21
23
 
24
+ class NormalizedParams
25
+
26
+ attr_reader :value
27
+
28
+ def initialize(value)
29
+ @value = if value.is_a?(::Array)
30
+ value.map{ |i| self.class.new(i).value }
31
+ elsif Rack::Utils.params_hash_type?(value)
32
+ value.inject({}){ |h, (k, v)| h[k.to_s] = self.class.new(v).value; h }
33
+ elsif self.file_type?(value)
34
+ value
35
+ else
36
+ value.to_s
37
+ end
38
+ end
39
+
40
+ def file_type?(value)
41
+ raise NotImplementedError
42
+ end
43
+
44
+ end
45
+
22
46
  end
23
47
 
24
48
  end
@@ -5,21 +5,17 @@ module Deas
5
5
 
6
6
  class SinatraRunner < Runner
7
7
 
8
- def self.run(*args)
9
- self.new(*args).run
10
- end
11
-
12
8
  attr_reader :app_settings
13
9
 
14
10
  def initialize(handler_class, sinatra_call)
15
11
  @sinatra_call = sinatra_call
16
12
  @app_settings = @sinatra_call.settings
17
13
 
18
- @request = @sinatra_call.request
19
- @response = @sinatra_call.response
20
- @params = normalize_params(@sinatra_call.params)
21
- @logger = @sinatra_call.settings.logger
22
- @session = @sinatra_call.session
14
+ @request = @sinatra_call.request
15
+ @response = @sinatra_call.response
16
+ @params = NormalizedParams.new(@sinatra_call.params).value
17
+ @logger = @sinatra_call.settings.logger
18
+ @session = @sinatra_call.session
23
19
 
24
20
  super(handler_class)
25
21
  end
@@ -89,19 +85,9 @@ module Deas
89
85
  File.extname(template_name)[1..-1] || 'html'
90
86
  end
91
87
 
92
- def normalize_params(params)
93
- StringifiedKeys.new(params)
94
- end
95
-
96
- module StringifiedKeys
97
- def self.new(value)
98
- if value.is_a?(::Array)
99
- value.map{ |i| StringifiedKeys.new(i) }
100
- elsif Rack::Utils.params_hash_type?(value)
101
- value.inject({}){ |h, (k, v)| h[k.to_s] = StringifiedKeys.new(v); h }
102
- else
103
- value
104
- end
88
+ class NormalizedParams < Deas::Runner::NormalizedParams
89
+ def file_type?(value)
90
+ value.kind_of?(::Tempfile)
105
91
  end
106
92
  end
107
93
 
@@ -12,11 +12,11 @@ module Deas
12
12
  args = (args || {}).dup
13
13
  @app_settings = OpenStruct.new(args.delete(:app_settings))
14
14
 
15
- @request = args.delete(:request)
16
- @response = args.delete(:response)
17
- @params = normalize_params(args.delete(:params) || {})
18
- @logger = args.delete(:logger) || Deas::NullLogger.new
19
- @session = args.delete(:session)
15
+ @request = args.delete(:request)
16
+ @response = args.delete(:response)
17
+ @params = NormalizedParams.new(args.delete(:params) || {}).value
18
+ @logger = args.delete(:logger) || Deas::NullLogger.new
19
+ @session = args.delete(:session)
20
20
 
21
21
  super(handler_class)
22
22
  args.each{|key, value| @handler.send("#{key}=", value) }
@@ -82,26 +82,9 @@ module Deas
82
82
  end
83
83
  SendFileArgs = Struct.new(:file_path, :options, :block)
84
84
 
85
- private
86
-
87
- def normalize_params(params)
88
- Stringify.new(params)
89
- end
90
-
91
- module Stringify
92
- def self.new(value)
93
- if value.is_a?(::Array)
94
- value.map{ |i| Stringify.new(i) }
95
- elsif Rack::Utils.params_hash_type?(value)
96
- value.inject({}){ |h, (k, v)| h[k.to_s] = Stringify.new(v); h }
97
- elsif self.file_type?(value)
98
- value
99
- else
100
- value.to_s
101
- end
102
- end
103
-
104
- def self.file_type?(value)
85
+ class NormalizedParams < Deas::Runner::NormalizedParams
86
+ def file_type?(value)
87
+ value.kind_of?(::Tempfile) ||
105
88
  value.kind_of?(::File) ||
106
89
  value.kind_of?(::Rack::Multipart::UploadedFile) ||
107
90
  (defined?(::Rack::Test::UploadedFile) && value.kind_of?(::Rack::Test::UploadedFile))
data/lib/deas/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Deas
2
- VERSION = "0.24.0"
2
+ VERSION = "0.24.1"
3
3
  end
@@ -0,0 +1,24 @@
1
+ module Deas; end
2
+ class Deas::Runner
3
+
4
+ class NormalizedParamsSpy
5
+ attr_reader :params, :value_called
6
+
7
+ def initialize
8
+ @params = nil
9
+ @value_called = false
10
+ end
11
+
12
+ def new(params)
13
+ @params = params
14
+ self
15
+ end
16
+
17
+ def value
18
+ @value_called = true
19
+ @params
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -5,7 +5,7 @@ require 'deas/route'
5
5
 
6
6
  class Deas::Route
7
7
 
8
- class BaseTests < Assert::Context
8
+ class UnitTests < Assert::Context
9
9
  desc "Deas::Route"
10
10
  setup do
11
11
  @handler_proxy = Deas::RouteProxy.new('TestViewHandler')
@@ -5,7 +5,7 @@ require 'test/support/view_handlers'
5
5
 
6
6
  class Deas::Runner
7
7
 
8
- class BaseTests < Assert::Context
8
+ class UnitTests < Assert::Context
9
9
  desc "Deas::Runner"
10
10
  setup do
11
11
  @runner = Deas::Runner.new(TestViewHandler)
@@ -43,4 +43,69 @@ class Deas::Runner
43
43
 
44
44
  end
45
45
 
46
+ class NormalizedParamsTests < UnitTests
47
+ desc "NormalizedParams"
48
+
49
+ should "convert any non-Array or non-Hash values to strings" do
50
+ exp_params = {
51
+ 'nil' => '',
52
+ 'int' => '42',
53
+ 'str' => 'string'
54
+ }
55
+ assert_equal exp_params, normalized({
56
+ 'nil' => nil,
57
+ 'int' => 42,
58
+ 'str' => 'string'
59
+ })
60
+ end
61
+
62
+ should "recursively convert array values to strings" do
63
+ exp_params = {
64
+ 'array' => ['', '42', 'string']
65
+ }
66
+ assert_equal exp_params, normalized({
67
+ 'array' => [nil, 42, 'string']
68
+ })
69
+ end
70
+
71
+ should "recursively convert hash values to strings" do
72
+ exp_params = {
73
+ 'values' => {
74
+ 'nil' => '',
75
+ 'int' => '42',
76
+ 'str' => 'string'
77
+ }
78
+ }
79
+ assert_equal exp_params, normalized({
80
+ 'values' => {
81
+ 'nil' => nil,
82
+ 'int' => 42,
83
+ 'str' => 'string'
84
+ }
85
+ })
86
+ end
87
+
88
+ should "convert any non-string hash keys to string keys" do
89
+ exp_params = {
90
+ 'nil' => '',
91
+ 'vals' => { '42' => 'int', 'str' => 'string' }
92
+ }
93
+ assert_equal exp_params, normalized({
94
+ 'nil' => '',
95
+ :vals => { 42 => :int, 'str' => 'string' }
96
+ })
97
+ end
98
+
99
+ private
100
+
101
+ def normalized(params)
102
+ TestNormalizedParams.new(params).value
103
+ end
104
+
105
+ class TestNormalizedParams < Deas::Runner::NormalizedParams
106
+ def file_type?(value); false; end
107
+ end
108
+
109
+ end
110
+
46
111
  end
@@ -1,17 +1,35 @@
1
1
  require 'assert'
2
2
  require 'deas/sinatra_runner'
3
3
 
4
+ require 'deas/runner'
5
+ require 'deas/template'
4
6
  require 'test/support/fake_sinatra_call'
5
7
  require 'test/support/view_handlers'
6
- require 'deas/template'
7
8
 
8
9
  class Deas::SinatraRunner
9
10
 
10
11
  class UnitTests < Assert::Context
11
12
  desc "Deas::SinatraRunner"
12
13
  setup do
14
+ @runner_class = Deas::SinatraRunner
15
+ end
16
+ subject{ @runner_class }
17
+
18
+ should "be a Runner" do
19
+ assert subject < Deas::Runner
20
+ end
21
+
22
+ end
23
+
24
+ class InitTests < UnitTests
25
+ desc "when init"
26
+ setup do
27
+ @params = { 'value' => '1' }
28
+ @norm_params_spy = Deas::Runner::NormalizedParamsSpy.new
29
+ Assert.stub(NormalizedParams, :new){ |p| @norm_params_spy.new(p) }
30
+
13
31
  @fake_sinatra_call = FakeSinatraCall.new
14
- @runner = Deas::SinatraRunner.new(FlagViewHandler, @fake_sinatra_call)
32
+ @runner = @runner_class.new(FlagViewHandler, @fake_sinatra_call)
15
33
  end
16
34
  subject{ @runner }
17
35
 
@@ -26,6 +44,11 @@ class Deas::SinatraRunner
26
44
  assert_equal @fake_sinatra_call.session, subject.session
27
45
  end
28
46
 
47
+ should "call to normalize its params" do
48
+ assert_equal @fake_sinatra_call.params, @norm_params_spy.params
49
+ assert_true @norm_params_spy.value_called
50
+ end
51
+
29
52
  should "call the sinatra_call's halt with" do
30
53
  return_value = catch(:halt){ subject.halt('test') }
31
54
  assert_equal [ 'test' ], return_value
@@ -87,8 +110,8 @@ class Deas::SinatraRunner
87
110
 
88
111
  end
89
112
 
90
- class RunTests < UnitTests
91
- desc "run"
113
+ class RunTests < InitTests
114
+ desc "and run"
92
115
  setup do
93
116
  @return_value = @runner.run
94
117
  @handler = @runner.instance_variable_get("@handler")
@@ -111,41 +134,28 @@ class Deas::SinatraRunner
111
134
 
112
135
  end
113
136
 
114
- class ParamsTests < UnitTests
115
- desc "normalizing params"
116
-
117
- should "convert any non-string hash keys to string keys" do
118
- exp_params = {
119
- 'a' => 'aye',
120
- 'b' => 'bee',
121
- 'attachment' => {
122
- 'tempfile' => 'a-file',
123
- 'content_type' => 'whatever'
124
- },
125
- 'attachments' => [
126
- { 'tempfile' => 'a-file' },
127
- { 'tempfile' => 'b-file' }
128
- ]
129
- }
130
- assert_equal exp_params, runner_params({
131
- :a => 'aye',
132
- 'b' => 'bee',
133
- 'attachment' => {
134
- :tempfile => 'a-file',
135
- :content_type => 'whatever'
136
- },
137
- 'attachments' => [
138
- { :tempfile => 'a-file' },
139
- { 'tempfile' => 'b-file' }
140
- ]
137
+ class NormalizedParamsTests < UnitTests
138
+ desc "NormalizedParams"
139
+ setup do
140
+ @norm_params_class = Deas::SinatraRunner::NormalizedParams
141
+ end
142
+
143
+ should "be a normalized params subclass" do
144
+ assert @norm_params_class < Deas::Runner::NormalizedParams
145
+ end
146
+
147
+ should "not convert Tempfile param values to strings" do
148
+ tempfile = Class.new(::Tempfile){ def initialize; end }.new
149
+ params = normalized({
150
+ 'attachment' => { :tempfile => tempfile }
141
151
  })
152
+ assert_kind_of ::Tempfile, params['attachment']['tempfile']
142
153
  end
143
154
 
144
155
  private
145
156
 
146
- def runner_params(params)
147
- @fake_sinatra_call.params = params
148
- Deas::SinatraRunner.new(FlagViewHandler, @fake_sinatra_call).params
157
+ def normalized(params)
158
+ @norm_params_class.new(params).value
149
159
  end
150
160
 
151
161
  end
@@ -3,6 +3,7 @@ require 'deas/test_runner'
3
3
 
4
4
  require 'rack/test'
5
5
  require 'deas/runner'
6
+ require 'test/support/normalized_params_spy'
6
7
  require 'test/support/view_handlers'
7
8
 
8
9
  class Deas::TestRunner
@@ -10,17 +11,29 @@ class Deas::TestRunner
10
11
  class UnitTests < Assert::Context
11
12
  desc "Deas::TestRunner"
12
13
  setup do
13
- @runner = Deas::TestRunner.new(TestRunnerViewHandler)
14
+ @runner_class = Deas::TestRunner
15
+ end
16
+ subject{ @runner_class }
17
+
18
+ should "be a Runner" do
19
+ assert subject < Deas::Runner
20
+ end
21
+
22
+ end
23
+
24
+ class InitTests < UnitTests
25
+ desc "when init"
26
+ setup do
27
+ @params = { 'value' => '1' }
28
+ @norm_params_spy = Deas::Runner::NormalizedParamsSpy.new
29
+ Assert.stub(NormalizedParams, :new){ |p| @norm_params_spy.new(p) }
30
+ @runner = @runner_class.new(TestRunnerViewHandler, :params => @params)
14
31
  end
15
32
  subject{ @runner }
16
33
 
17
34
  should have_readers :app_settings, :return_value
18
35
  should have_imeths :run
19
36
 
20
- should "be a Runner" do
21
- assert subject.class < Deas::Runner
22
- end
23
-
24
37
  should "know its app_settings" do
25
38
  assert_kind_of OpenStruct, subject.app_settings
26
39
  end
@@ -28,11 +41,21 @@ class Deas::TestRunner
28
41
  should "default its settings" do
29
42
  assert_nil subject.request
30
43
  assert_nil subject.response
31
- assert_equal Hash.new, subject.params
44
+ assert_kind_of ::Hash, subject.params
32
45
  assert_kind_of Deas::NullLogger, subject.logger
33
46
  assert_nil subject.session
34
47
  end
35
48
 
49
+ should "default its params" do
50
+ runner = @runner_class.new(TestRunnerViewHandler)
51
+ assert_equal ::Hash.new, runner.params
52
+ end
53
+
54
+ should "call to normalize its params" do
55
+ assert_equal @params, @norm_params_spy.params
56
+ assert_true @norm_params_spy.value_called
57
+ end
58
+
36
59
  should "write any non-standard settings on the handler" do
37
60
  runner = Deas::TestRunner.new(TestRunnerViewHandler, :custom_value => 42)
38
61
  assert_equal 42, runner.handler.custom_value
@@ -120,70 +143,35 @@ class Deas::TestRunner
120
143
 
121
144
  end
122
145
 
123
- class ParamsTests < UnitTests
124
- desc "normalizing params"
125
-
126
- should "convert any non-Array or non-Hash values to strings" do
127
- exp_params = {
128
- 'nil' => '',
129
- 'int' => '42',
130
- 'str' => 'string'
131
- }
132
- assert_equal exp_params, runner_params({
133
- 'nil' => nil,
134
- 'int' => 42,
135
- 'str' => 'string'
136
- })
137
- end
138
-
139
- should "recursively convert array values to strings" do
140
- exp_params = {
141
- 'array' => ['', '42', 'string']
142
- }
143
- assert_equal exp_params, runner_params({
144
- 'array' => [nil, 42, 'string']
145
- })
146
+ class NormalizedParamsTests < UnitTests
147
+ desc "NormalizedParams"
148
+ setup do
149
+ @norm_params_class = Deas::TestRunner::NormalizedParams
146
150
  end
147
151
 
148
- should "recursively convert hash values to strings" do
149
- exp_params = {
150
- 'values' => {
151
- 'nil' => '',
152
- 'int' => '42',
153
- 'str' => 'string'
154
- }
155
- }
156
- assert_equal exp_params, runner_params({
157
- 'values' => {
158
- 'nil' => nil,
159
- 'int' => 42,
160
- 'str' => 'string'
161
- }
162
- })
152
+ should "be a normalized params subclass" do
153
+ assert @norm_params_class < Deas::Runner::NormalizedParams
163
154
  end
164
155
 
165
- should "convert any non-string hash keys to string keys" do
166
- exp_params = {
167
- 'nil' => '',
168
- 'vals' => { '42' => 'int', 'str' => 'string' }
169
- }
170
- assert_equal exp_params, runner_params({
171
- 'nil' => '',
172
- :vals => { 42 => :int, 'str' => 'string' }
156
+ should "not convert Tempfile param values to strings" do
157
+ tempfile = Class.new(::Tempfile){ def initialize; end }.new
158
+ params = normalized({
159
+ 'attachment' => { :tempfile => tempfile }
173
160
  })
161
+ assert_kind_of ::Tempfile, params['attachment']['tempfile']
174
162
  end
175
163
 
176
164
  should "not convert File param values to strings" do
177
165
  tempfile = File.new(TEST_SUPPORT_ROOT.join('routes.rb'))
178
- params = runner_params({
166
+ params = normalized({
179
167
  'attachment' => { :tempfile => tempfile }
180
168
  })
181
- assert_kind_of File, params['attachment']['tempfile']
169
+ assert_kind_of ::File, params['attachment']['tempfile']
182
170
  end
183
171
 
184
172
  should "not convert Rack::Multipart::UploadedFile param values to strings" do
185
173
  tempfile = Rack::Multipart::UploadedFile.new(TEST_SUPPORT_ROOT.join('routes.rb'))
186
- params = runner_params({
174
+ params = normalized({
187
175
  'attachment' => { :tempfile => tempfile }
188
176
  })
189
177
  assert_kind_of Rack::Multipart::UploadedFile, params['attachment']['tempfile']
@@ -191,7 +179,7 @@ class Deas::TestRunner
191
179
 
192
180
  should "not convert Rack::Test::UploadedFile param values to strings" do
193
181
  tempfile = Rack::Test::UploadedFile.new(TEST_SUPPORT_ROOT.join('routes.rb'))
194
- params = runner_params({
182
+ params = normalized({
195
183
  'attachment' => { :tempfile => tempfile }
196
184
  })
197
185
  assert_kind_of Rack::Test::UploadedFile, params['attachment']['tempfile']
@@ -199,8 +187,8 @@ class Deas::TestRunner
199
187
 
200
188
  private
201
189
 
202
- def runner_params(params)
203
- Deas::TestRunner.new(TestRunnerViewHandler, :params => params).params
190
+ def normalized(params)
191
+ @norm_params_class.new(params).value
204
192
  end
205
193
 
206
194
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deas
3
3
  version: !ruby/object:Gem::Version
4
- hash: 127
4
+ hash: 125
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 24
9
- - 0
10
- version: 0.24.0
9
+ - 1
10
+ version: 0.24.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kelly Redding
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2014-06-24 00:00:00 Z
19
+ date: 2014-06-26 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  requirement: &id001 !ruby/object:Gem::Requirement
@@ -169,6 +169,7 @@ files:
169
169
  - log/.gitkeep
170
170
  - test/helper.rb
171
171
  - test/support/fake_sinatra_call.rb
172
+ - test/support/normalized_params_spy.rb
172
173
  - test/support/routes.rb
173
174
  - test/support/view_handlers.rb
174
175
  - test/support/views/_info.erb
@@ -241,6 +242,7 @@ summary: Handler-based web framework powered by Sinatra
241
242
  test_files:
242
243
  - test/helper.rb
243
244
  - test/support/fake_sinatra_call.rb
245
+ - test/support/normalized_params_spy.rb
244
246
  - test/support/routes.rb
245
247
  - test/support/view_handlers.rb
246
248
  - test/support/views/_info.erb