deas 0.26.0 → 0.27.0
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/deas_runner.rb +34 -0
- data/lib/deas/redirect_proxy.rb +4 -0
- data/lib/deas/route.rb +16 -6
- data/lib/deas/route_proxy.rb +3 -3
- data/lib/deas/runner.rb +10 -2
- data/lib/deas/sinatra_runner.rb +15 -45
- data/lib/deas/template.rb +3 -3
- data/lib/deas/test_runner.rb +13 -20
- data/lib/deas/version.rb +1 -1
- data/lib/deas/view_handler.rb +0 -2
- data/test/support/fake_sinatra_call.rb +17 -3
- data/test/support/routes.rb +0 -9
- data/test/support/view_handlers.rb +15 -46
- data/test/system/rack_tests.rb +0 -8
- data/test/unit/deas_runner_tests.rb +97 -0
- data/test/unit/redirect_proxy_tests.rb +3 -1
- data/test/unit/route_proxy_tests.rb +12 -8
- data/test/unit/route_tests.rb +92 -8
- data/test/unit/router_tests.rb +9 -9
- data/test/unit/runner_tests.rb +22 -8
- data/test/unit/server_configuration_tests.rb +2 -2
- data/test/unit/sinatra_app_tests.rb +1 -1
- data/test/unit/sinatra_runner_tests.rb +21 -82
- data/test/unit/template_tests.rb +5 -0
- data/test/unit/test_runner_tests.rb +22 -32
- data/test/unit/view_handler_tests.rb +74 -54
- metadata +7 -4
@@ -96,7 +96,7 @@ class Deas::Server::Configuration
|
|
96
96
|
setup do
|
97
97
|
@initialized = false
|
98
98
|
@other_initialized = false
|
99
|
-
proxy = Deas::RouteProxy.new('
|
99
|
+
proxy = Deas::RouteProxy.new('EmptyViewHandler')
|
100
100
|
@route = Deas::Route.new(:get, '/something', proxy)
|
101
101
|
@router = Deas::Router.new
|
102
102
|
@router.routes = [ @route ]
|
@@ -132,7 +132,7 @@ class Deas::Server::Configuration
|
|
132
132
|
|
133
133
|
subject.validate!
|
134
134
|
|
135
|
-
assert_equal
|
135
|
+
assert_equal EmptyViewHandler, @route.handler_class
|
136
136
|
end
|
137
137
|
|
138
138
|
should "default the :erb :outvar setting in the SinatraApp it creates" do
|
@@ -12,7 +12,7 @@ module Deas::SinatraApp
|
|
12
12
|
class UnitTests < Assert::Context
|
13
13
|
desc "Deas::SinatraApp"
|
14
14
|
setup do
|
15
|
-
proxy = Deas::RouteProxy.new('
|
15
|
+
proxy = Deas::RouteProxy.new('EmptyViewHandler')
|
16
16
|
@route = Deas::Route.new(:get, '/something', proxy)
|
17
17
|
@router = Deas::Router.new
|
18
18
|
@router.routes = [ @route ]
|
@@ -1,10 +1,9 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'deas/sinatra_runner'
|
3
3
|
|
4
|
-
require 'deas/
|
4
|
+
require 'deas/deas_runner'
|
5
5
|
require 'deas/template'
|
6
6
|
require 'test/support/fake_sinatra_call'
|
7
|
-
require 'test/support/normalized_params_spy'
|
8
7
|
require 'test/support/view_handlers'
|
9
8
|
|
10
9
|
class Deas::SinatraRunner
|
@@ -16,7 +15,7 @@ class Deas::SinatraRunner
|
|
16
15
|
end
|
17
16
|
subject{ @runner_class }
|
18
17
|
|
19
|
-
should "be a
|
18
|
+
should "be a `DeasRunner`" do
|
20
19
|
assert subject < Deas::Runner
|
21
20
|
end
|
22
21
|
|
@@ -25,32 +24,15 @@ class Deas::SinatraRunner
|
|
25
24
|
class InitTests < UnitTests
|
26
25
|
desc "when init"
|
27
26
|
setup do
|
28
|
-
@params = { 'value' => '1' }
|
29
|
-
@norm_params_spy = Deas::Runner::NormalizedParamsSpy.new
|
30
|
-
Assert.stub(NormalizedParams, :new){ |p| @norm_params_spy.new(p) }
|
31
|
-
|
32
27
|
@fake_sinatra_call = FakeSinatraCall.new
|
33
|
-
@runner = @runner_class.new(
|
28
|
+
@runner = @runner_class.new(DeasRunnerViewHandler, {
|
29
|
+
:sinatra_call => @fake_sinatra_call
|
30
|
+
})
|
34
31
|
end
|
35
32
|
subject{ @runner }
|
36
33
|
|
37
|
-
should have_readers :app_settings
|
38
34
|
should have_imeths :run
|
39
35
|
|
40
|
-
should "get its settings from the sinatra call" do
|
41
|
-
assert_equal @fake_sinatra_call.request, subject.request
|
42
|
-
assert_equal @fake_sinatra_call.response, subject.response
|
43
|
-
assert_equal @fake_sinatra_call.params, subject.params
|
44
|
-
assert_equal @fake_sinatra_call.settings.logger, subject.logger
|
45
|
-
assert_equal @fake_sinatra_call.settings.router, subject.router
|
46
|
-
assert_equal @fake_sinatra_call.session, subject.session
|
47
|
-
end
|
48
|
-
|
49
|
-
should "call to normalize its params" do
|
50
|
-
assert_equal @fake_sinatra_call.params, @norm_params_spy.params
|
51
|
-
assert_true @norm_params_spy.value_called
|
52
|
-
end
|
53
|
-
|
54
36
|
should "call the sinatra_call's halt with" do
|
55
37
|
return_value = catch(:halt){ subject.halt('test') }
|
56
38
|
assert_equal [ 'test' ], return_value
|
@@ -84,8 +66,8 @@ class Deas::SinatraRunner
|
|
84
66
|
end
|
85
67
|
|
86
68
|
should "render the template with :view/:logger locals and the handler layouts" do
|
87
|
-
exp_handler =
|
88
|
-
exp_layouts =
|
69
|
+
exp_handler = DeasRunnerViewHandler.new(subject)
|
70
|
+
exp_layouts = DeasRunnerViewHandler.layouts
|
89
71
|
exp_result = Deas::Template.new(@fake_sinatra_call, 'index', {
|
90
72
|
:locals => {
|
91
73
|
:view => exp_handler,
|
@@ -93,16 +75,23 @@ class Deas::SinatraRunner
|
|
93
75
|
},
|
94
76
|
:layout => exp_layouts
|
95
77
|
}).render
|
96
|
-
|
97
78
|
assert_equal exp_result, subject.render('index')
|
98
|
-
end
|
99
79
|
|
100
|
-
|
101
|
-
|
102
|
-
|
80
|
+
exp_result = Deas::Template.new(@fake_sinatra_call, 'index', {
|
81
|
+
:locals => {
|
82
|
+
:view => 'a-view',
|
83
|
+
:some => 'thing',
|
84
|
+
:logger => @runner.logger
|
85
|
+
},
|
86
|
+
:layout => false
|
103
87
|
}).render
|
104
|
-
|
105
|
-
|
88
|
+
assert_equal exp_result, subject.render('index', {
|
89
|
+
:layout => false,
|
90
|
+
:locals => {
|
91
|
+
:view => 'a-view',
|
92
|
+
:some => 'thing'
|
93
|
+
}
|
94
|
+
})
|
106
95
|
end
|
107
96
|
|
108
97
|
should "call the sinatra_call's send_file to set the send files" do
|
@@ -115,54 +104,4 @@ class Deas::SinatraRunner
|
|
115
104
|
|
116
105
|
end
|
117
106
|
|
118
|
-
class RunTests < InitTests
|
119
|
-
desc "and run"
|
120
|
-
setup do
|
121
|
-
@return_value = @runner.run
|
122
|
-
@handler = @runner.instance_variable_get("@handler")
|
123
|
-
end
|
124
|
-
subject{ @handler }
|
125
|
-
|
126
|
-
should "run the before and after hooks" do
|
127
|
-
assert_equal true, subject.before_hook_called
|
128
|
-
assert_equal true, subject.after_hook_called
|
129
|
-
end
|
130
|
-
|
131
|
-
should "run the handler's init and run" do
|
132
|
-
assert_equal true, subject.init_bang_called
|
133
|
-
assert_equal true, subject.run_bang_called
|
134
|
-
end
|
135
|
-
|
136
|
-
should "return the handler's run! return value" do
|
137
|
-
assert_equal true, @return_value
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
141
|
-
|
142
|
-
class NormalizedParamsTests < UnitTests
|
143
|
-
desc "NormalizedParams"
|
144
|
-
setup do
|
145
|
-
@norm_params_class = Deas::SinatraRunner::NormalizedParams
|
146
|
-
end
|
147
|
-
|
148
|
-
should "be a normalized params subclass" do
|
149
|
-
assert @norm_params_class < Deas::Runner::NormalizedParams
|
150
|
-
end
|
151
|
-
|
152
|
-
should "not convert Tempfile param values to strings" do
|
153
|
-
tempfile = Class.new(::Tempfile){ def initialize; end }.new
|
154
|
-
params = normalized({
|
155
|
-
'attachment' => { :tempfile => tempfile }
|
156
|
-
})
|
157
|
-
assert_kind_of ::Tempfile, params['attachment']['tempfile']
|
158
|
-
end
|
159
|
-
|
160
|
-
private
|
161
|
-
|
162
|
-
def normalized(params)
|
163
|
-
@norm_params_class.new(params).value
|
164
|
-
end
|
165
|
-
|
166
|
-
end
|
167
|
-
|
168
107
|
end
|
data/test/unit/template_tests.rb
CHANGED
@@ -144,6 +144,11 @@ class Deas::Template
|
|
144
144
|
assert_equal :"users/index/_listing", subject.name
|
145
145
|
end
|
146
146
|
|
147
|
+
should "not add an underscore to it's template's basename if one already exists" do
|
148
|
+
partial = Deas::Template::Partial.new(@fake_sinatra_call, 'users/index/_listing')
|
149
|
+
assert_equal :"users/index/_listing", partial.name
|
150
|
+
end
|
151
|
+
|
147
152
|
should "set it's locals option" do
|
148
153
|
assert_equal({ :user => 'Joe Test' }, subject.options[:locals])
|
149
154
|
end
|
@@ -2,7 +2,6 @@ require 'assert'
|
|
2
2
|
require 'deas/test_runner'
|
3
3
|
|
4
4
|
require 'rack/test'
|
5
|
-
require 'deas/router'
|
6
5
|
require 'deas/runner'
|
7
6
|
require 'test/support/normalized_params_spy'
|
8
7
|
require 'test/support/view_handlers'
|
@@ -16,7 +15,7 @@ class Deas::TestRunner
|
|
16
15
|
end
|
17
16
|
subject{ @runner_class }
|
18
17
|
|
19
|
-
should "be a Runner" do
|
18
|
+
should "be a `Runner`" do
|
20
19
|
assert subject < Deas::Runner
|
21
20
|
end
|
22
21
|
|
@@ -26,31 +25,32 @@ class Deas::TestRunner
|
|
26
25
|
desc "when init"
|
27
26
|
setup do
|
28
27
|
@params = { 'value' => '1' }
|
28
|
+
@args = {
|
29
|
+
:request => 'a-request',
|
30
|
+
:response => 'a-response',
|
31
|
+
:params => @params,
|
32
|
+
:logger => 'a-logger',
|
33
|
+
:router => 'a-router',
|
34
|
+
:session => 'a-session'
|
35
|
+
}
|
36
|
+
|
29
37
|
@norm_params_spy = Deas::Runner::NormalizedParamsSpy.new
|
30
38
|
Assert.stub(NormalizedParams, :new){ |p| @norm_params_spy.new(p) }
|
31
|
-
|
39
|
+
|
40
|
+
@runner = @runner_class.new(TestRunnerViewHandler, @args)
|
32
41
|
end
|
33
42
|
subject{ @runner }
|
34
43
|
|
35
|
-
should have_readers :
|
44
|
+
should have_readers :return_value
|
36
45
|
should have_imeths :run
|
37
46
|
|
38
|
-
should "
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
assert_kind_of ::Hash, subject.params
|
46
|
-
assert_kind_of Deas::NullLogger, subject.logger
|
47
|
-
assert_kind_of Deas::Router, subject.router
|
48
|
-
assert_nil subject.session
|
49
|
-
end
|
50
|
-
|
51
|
-
should "default its params" do
|
52
|
-
runner = @runner_class.new(TestRunnerViewHandler)
|
53
|
-
assert_equal ::Hash.new, runner.params
|
47
|
+
should "super its standard args" do
|
48
|
+
assert_equal 'a-request', subject.request
|
49
|
+
assert_equal 'a-response', subject.response
|
50
|
+
assert_equal @params, subject.params
|
51
|
+
assert_equal 'a-logger', subject.logger
|
52
|
+
assert_equal 'a-router', subject.router
|
53
|
+
assert_equal 'a-session', subject.session
|
54
54
|
end
|
55
55
|
|
56
56
|
should "call to normalize its params" do
|
@@ -58,8 +58,8 @@ class Deas::TestRunner
|
|
58
58
|
assert_true @norm_params_spy.value_called
|
59
59
|
end
|
60
60
|
|
61
|
-
should "write any non-standard
|
62
|
-
runner =
|
61
|
+
should "write any non-standard args on the handler" do
|
62
|
+
runner = @runner_class.new(TestRunnerViewHandler, :custom_value => 42)
|
63
63
|
assert_equal 42, runner.handler.custom_value
|
64
64
|
end
|
65
65
|
|
@@ -124,16 +124,6 @@ class Deas::TestRunner
|
|
124
124
|
assert_equal 'some/template', value.template_name
|
125
125
|
end
|
126
126
|
|
127
|
-
should "build partial args if partial is called" do
|
128
|
-
value = subject.partial 'some/partial', :some => 'locals'
|
129
|
-
assert_kind_of PartialArgs, value
|
130
|
-
[:partial_name, :locals].each do |meth|
|
131
|
-
assert_respond_to meth, value
|
132
|
-
end
|
133
|
-
assert_equal 'some/partial', value.partial_name
|
134
|
-
assert_equal({:some => 'locals'}, value.locals)
|
135
|
-
end
|
136
|
-
|
137
127
|
should "build send file args if send file is called" do
|
138
128
|
value = subject.send_file 'some/file/path'
|
139
129
|
assert_kind_of SendFileArgs, value
|
@@ -10,21 +10,64 @@ module Deas::ViewHandler
|
|
10
10
|
|
11
11
|
desc "Deas::ViewHandler"
|
12
12
|
setup do
|
13
|
-
@
|
13
|
+
@handler_class = TestViewHandler
|
14
|
+
end
|
15
|
+
subject{ @handler_class }
|
16
|
+
|
17
|
+
should have_imeths :layout, :layouts
|
18
|
+
should have_imeths :before, :prepend_before, :before_callbacks
|
19
|
+
should have_imeths :after, :prepend_after, :after_callbacks
|
20
|
+
should have_imeths :before_init, :prepend_before_init, :before_init_callbacks
|
21
|
+
should have_imeths :after_init, :prepend_after_init, :after_init_callbacks
|
22
|
+
should have_imeths :before_run, :prepend_before_run, :before_run_callbacks
|
23
|
+
should have_imeths :after_run, :prepend_after_run, :after_run_callbacks
|
24
|
+
|
25
|
+
should "specify layouts" do
|
26
|
+
subject.layout 'layouts/app'
|
27
|
+
assert_equal ['layouts/app'], subject.layouts
|
28
|
+
|
29
|
+
subject.layouts 'layouts/web', 'layouts/search'
|
30
|
+
assert_equal ['layouts/app', 'layouts/web', 'layouts/search'], subject.layouts
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
class InitTests < UnitTests
|
36
|
+
desc "when init"
|
37
|
+
setup do
|
38
|
+
@handler = test_handler(@handler_class)
|
14
39
|
end
|
15
40
|
subject{ @handler }
|
16
41
|
|
17
42
|
should have_imeths :init, :init!, :run, :run!
|
18
|
-
|
19
|
-
should
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
43
|
+
|
44
|
+
should "have called `init!` and it's callbacks" do
|
45
|
+
assert_equal true, subject.before_init_called
|
46
|
+
assert_equal true, subject.second_before_init_called
|
47
|
+
assert_equal true, subject.init_bang_called
|
48
|
+
assert_equal true, subject.after_init_called
|
49
|
+
end
|
50
|
+
|
51
|
+
should "not have called `run!` or it's callbacks when initialized" do
|
52
|
+
assert_nil subject.before_run_called
|
53
|
+
assert_nil subject.run_bang_called
|
54
|
+
assert_nil subject.after_run_called
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
class RunTests < InitTests
|
60
|
+
desc "and run"
|
61
|
+
|
62
|
+
should "call `run!` and it's callbacks" do
|
63
|
+
subject.run
|
64
|
+
assert_equal true, subject.before_run_called
|
65
|
+
assert_equal true, subject.run_bang_called
|
66
|
+
assert_equal true, subject.after_run_called
|
67
|
+
end
|
25
68
|
|
26
69
|
should "complain if run! is not overwritten" do
|
27
|
-
assert_raises(NotImplementedError){
|
70
|
+
assert_raises(NotImplementedError){ test_runner(EmptyViewHandler).run }
|
28
71
|
end
|
29
72
|
|
30
73
|
should "render templates" do
|
@@ -33,32 +76,15 @@ module Deas::ViewHandler
|
|
33
76
|
assert_equal({ :some => :option }, render_args.options)
|
34
77
|
end
|
35
78
|
|
36
|
-
should "render partial templates" do
|
37
|
-
partial_args = test_runner(PartialViewHandler).run
|
38
|
-
assert_equal "my_partial", partial_args.partial_name
|
39
|
-
assert_equal({:some => 'locals'}, partial_args.locals)
|
40
|
-
end
|
41
|
-
|
42
79
|
should "send files" do
|
43
80
|
send_file_args = test_runner(SendFileViewHandler).run
|
44
81
|
assert_equal "my_file.txt", send_file_args.file_path
|
45
82
|
assert_equal({ :some => :option }, send_file_args.options)
|
46
83
|
end
|
47
84
|
|
48
|
-
should "allow specifying the layouts using #layout or #layouts" do
|
49
|
-
handler_class = Class.new{ include Deas::ViewHandler }
|
50
|
-
|
51
|
-
handler_class.layout 'layouts/app'
|
52
|
-
assert_equal ['layouts/app'], handler_class.layouts
|
53
|
-
|
54
|
-
handler_class.layouts 'layouts/web', 'layouts/search'
|
55
|
-
assert_equal ['layouts/app', 'layouts/web', 'layouts/search'], handler_class.layouts
|
56
|
-
end
|
57
|
-
|
58
85
|
end
|
59
86
|
|
60
87
|
class CallbackTests < UnitTests
|
61
|
-
desc "callbacks"
|
62
88
|
setup do
|
63
89
|
@proc1 = proc{ '1' }
|
64
90
|
@proc2 = proc{ '2' }
|
@@ -139,34 +165,6 @@ module Deas::ViewHandler
|
|
139
165
|
|
140
166
|
end
|
141
167
|
|
142
|
-
class WithMethodFlagsTests < UnitTests
|
143
|
-
setup do
|
144
|
-
@handler = test_handler(FlagViewHandler)
|
145
|
-
end
|
146
|
-
|
147
|
-
should "have called `init!` and it's callbacks" do
|
148
|
-
assert_equal true, subject.before_init_called
|
149
|
-
assert_equal true, subject.second_before_init_called
|
150
|
-
assert_equal true, subject.init_bang_called
|
151
|
-
assert_equal true, subject.after_init_called
|
152
|
-
end
|
153
|
-
|
154
|
-
should "not have called `run!` or it's callbacks when initialized" do
|
155
|
-
assert_nil subject.before_run_called
|
156
|
-
assert_nil subject.run_bang_called
|
157
|
-
assert_nil subject.after_run_called
|
158
|
-
end
|
159
|
-
|
160
|
-
should "call `run!` and it's callbacks when it's `run`" do
|
161
|
-
subject.run
|
162
|
-
|
163
|
-
assert_equal true, subject.before_run_called
|
164
|
-
assert_equal true, subject.run_bang_called
|
165
|
-
assert_equal true, subject.after_run_called
|
166
|
-
end
|
167
|
-
|
168
|
-
end
|
169
|
-
|
170
168
|
class HaltTests < UnitTests
|
171
169
|
desc "halt"
|
172
170
|
|
@@ -226,4 +224,26 @@ module Deas::ViewHandler
|
|
226
224
|
|
227
225
|
end
|
228
226
|
|
227
|
+
class TestViewHandler
|
228
|
+
include Deas::ViewHandler
|
229
|
+
|
230
|
+
attr_reader :before_called, :after_called
|
231
|
+
attr_reader :before_init_called, :second_before_init_called
|
232
|
+
attr_reader :init_bang_called, :after_init_called
|
233
|
+
attr_reader :before_run_called, :run_bang_called, :after_run_called
|
234
|
+
|
235
|
+
before{ @before_called = true }
|
236
|
+
after{ @after_called = true }
|
237
|
+
|
238
|
+
before_init{ @before_init_called = true }
|
239
|
+
before_init{ @second_before_init_called = true }
|
240
|
+
after_init{ @after_init_called = true }
|
241
|
+
before_run{ @before_run_called = true }
|
242
|
+
after_run{ @after_run_called = true }
|
243
|
+
|
244
|
+
def init!; @init_bang_called = true; end
|
245
|
+
def run!; @run_bang_called = true; end
|
246
|
+
|
247
|
+
end
|
248
|
+
|
229
249
|
end
|