deas 0.9.0 → 0.10.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/logging.rb +1 -1
- data/lib/deas/redirect_handler.rb +34 -0
- data/lib/deas/route.rb +5 -5
- data/lib/deas/runner.rb +0 -4
- data/lib/deas/server.rb +9 -0
- data/lib/deas/sinatra_runner.rb +2 -6
- data/lib/deas/test_runner.rb +14 -2
- data/lib/deas/version.rb +1 -1
- data/lib/deas/view_handler.rb +2 -3
- data/test/support/fake_app.rb +0 -4
- data/test/support/routes.rb +4 -11
- data/test/system/rack_tests.rb +10 -1
- data/test/unit/redirect_handler_tests.rb +59 -0
- data/test/unit/route_tests.rb +7 -0
- data/test/unit/runner_tests.rb +0 -4
- data/test/unit/server_tests.rb +12 -1
- data/test/unit/sinatra_runner_tests.rb +2 -9
- data/test/unit/view_handler_tests.rb +3 -3
- metadata +26 -23
data/lib/deas/logging.rb
CHANGED
@@ -96,7 +96,7 @@ module Deas
|
|
96
96
|
log SummaryLine.new({
|
97
97
|
'method' => request.request_method,
|
98
98
|
'path' => request.path,
|
99
|
-
'handler' => env['deas.
|
99
|
+
'handler' => env['deas.handler_class_name'],
|
100
100
|
'params' => env['sinatra.params'],
|
101
101
|
'time' => env['deas.time_taken'],
|
102
102
|
'status' => status
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'deas/view_handler'
|
2
|
+
|
3
|
+
module Deas
|
4
|
+
|
5
|
+
module RedirectHandler
|
6
|
+
|
7
|
+
def self.new(path = nil, &block)
|
8
|
+
handler_class = Class.new do
|
9
|
+
include Deas::ViewHandler
|
10
|
+
include InstanceMethods
|
11
|
+
extend ClassMethods
|
12
|
+
end
|
13
|
+
handler_class.redirect_path = path ? proc{ path } : block
|
14
|
+
handler_class
|
15
|
+
end
|
16
|
+
|
17
|
+
module InstanceMethods
|
18
|
+
|
19
|
+
def run!
|
20
|
+
path = self.instance_eval(&self.class.redirect_path)
|
21
|
+
redirect path
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
module ClassMethods
|
27
|
+
|
28
|
+
attr_accessor :redirect_path
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
data/lib/deas/route.rb
CHANGED
@@ -5,11 +5,11 @@ module Deas
|
|
5
5
|
class Route
|
6
6
|
attr_reader :method, :path, :handler_class_name, :handler_class
|
7
7
|
|
8
|
-
def initialize(method, path, handler_class_name)
|
8
|
+
def initialize(method, path, handler_class_name, handler_class = nil)
|
9
9
|
@method = method
|
10
10
|
@path = path
|
11
11
|
@handler_class_name = handler_class_name
|
12
|
-
@handler_class =
|
12
|
+
@handler_class = handler_class
|
13
13
|
end
|
14
14
|
|
15
15
|
def constantize!
|
@@ -19,9 +19,9 @@ module Deas
|
|
19
19
|
|
20
20
|
def run(sinatra_call)
|
21
21
|
sinatra_call.request.env.tap do |env|
|
22
|
-
env['sinatra.params']
|
23
|
-
env['deas.
|
24
|
-
env['deas.logging'].call " Handler: #{env['deas.
|
22
|
+
env['sinatra.params'] = sinatra_call.params
|
23
|
+
env['deas.handler_class_name'] = @handler_class_name
|
24
|
+
env['deas.logging'].call " Handler: #{env['deas.handler_class_name']}"
|
25
25
|
env['deas.logging'].call " Params: #{env['sinatra.params'].inspect}"
|
26
26
|
end
|
27
27
|
Deas::SinatraRunner.run(@handler_class, sinatra_call)
|
data/lib/deas/runner.rb
CHANGED
data/lib/deas/server.rb
CHANGED
@@ -2,6 +2,7 @@ require 'ns-options'
|
|
2
2
|
require 'ns-options/boolean'
|
3
3
|
require 'pathname'
|
4
4
|
require 'deas/template'
|
5
|
+
require 'deas/redirect_handler'
|
5
6
|
require 'deas/route'
|
6
7
|
require 'deas/sinatra_app'
|
7
8
|
|
@@ -172,6 +173,14 @@ module Deas::Server
|
|
172
173
|
self.route(:delete, path, handler_class_name)
|
173
174
|
end
|
174
175
|
|
176
|
+
def redirect(http_method, path, to_path = nil, &block)
|
177
|
+
name = 'Deas::RedirectHandler'
|
178
|
+
handler_class = Deas::RedirectHandler.new(to_path, &block)
|
179
|
+
Deas::Route.new(http_method, path, name, handler_class).tap do |route|
|
180
|
+
self.configuration.routes.push(route)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
175
184
|
def route(http_method, path, handler_class_name)
|
176
185
|
if self.view_handler_ns && !(handler_class_name =~ /^::/)
|
177
186
|
handler_class_name = "#{self.view_handler_ns}::#{handler_class_name}"
|
data/lib/deas/sinatra_runner.rb
CHANGED
@@ -34,21 +34,17 @@ module Deas
|
|
34
34
|
@sinatra_call.halt(*args)
|
35
35
|
end
|
36
36
|
|
37
|
-
def render(
|
37
|
+
def render(template_name, options = nil, &block)
|
38
38
|
options ||= {}
|
39
39
|
options[:locals] = { :view => @handler }.merge(options[:locals] || {})
|
40
40
|
options[:layout] ||= @handler_class.layouts
|
41
|
-
Deas::Template.new(@sinatra_call,
|
41
|
+
Deas::Template.new(@sinatra_call, template_name, options).render(&block)
|
42
42
|
end
|
43
43
|
|
44
44
|
def redirect(*args)
|
45
45
|
@sinatra_call.redirect(*args)
|
46
46
|
end
|
47
47
|
|
48
|
-
def redirect_to(path, *args)
|
49
|
-
@sinatra_call.redirect(@sinatra_call.to(path), *args)
|
50
|
-
end
|
51
|
-
|
52
48
|
private
|
53
49
|
|
54
50
|
def run_callbacks(callbacks)
|
data/lib/deas/test_runner.rb
CHANGED
@@ -32,8 +32,20 @@ module Deas
|
|
32
32
|
throw(:halt, args)
|
33
33
|
end
|
34
34
|
|
35
|
-
def render(
|
36
|
-
|
35
|
+
def render(template_name, options = nil, &block)
|
36
|
+
RenderArgs.new(template_name, options, block)
|
37
|
+
end
|
38
|
+
|
39
|
+
def redirect(path, *halt_args)
|
40
|
+
RedirectArgs.new(path, halt_args)
|
41
|
+
end
|
42
|
+
|
43
|
+
RenderArgs = Struct.new(:template_name, :options, :block)
|
44
|
+
|
45
|
+
class RedirectArgs < Struct.new(:path, :halt_args)
|
46
|
+
def redirect?
|
47
|
+
true
|
48
|
+
end
|
37
49
|
end
|
38
50
|
|
39
51
|
end
|
data/lib/deas/version.rb
CHANGED
data/lib/deas/view_handler.rb
CHANGED
@@ -47,9 +47,8 @@ module Deas
|
|
47
47
|
|
48
48
|
# Helpers
|
49
49
|
|
50
|
-
def halt(*args);
|
51
|
-
def redirect(*args);
|
52
|
-
def redirect_to(*args); @deas_runner.redirect_to(*args); end
|
50
|
+
def halt(*args); @deas_runner.halt(*args); end
|
51
|
+
def redirect(*args); @deas_runner.redirect(*args); end
|
53
52
|
|
54
53
|
def render(*args, &block)
|
55
54
|
@deas_runner.render(*args, &block)
|
data/test/support/fake_app.rb
CHANGED
data/test/support/routes.rb
CHANGED
@@ -25,12 +25,14 @@ class DeasTestServer
|
|
25
25
|
get '/with_layout', 'WithLayoutHandler'
|
26
26
|
get '/alt_with_layout', 'AlternateWithLayoutHandler'
|
27
27
|
get '/redirect', 'RedirectHandler'
|
28
|
-
get '/redirect_to', 'RedirectToHandler'
|
29
28
|
post '/session', 'SetSessionHandler'
|
30
29
|
get '/session', 'UseSessionHandler'
|
31
30
|
|
32
31
|
get '/handler/tests.json', 'HandlerTestsHandler'
|
33
32
|
|
33
|
+
redirect :get, '/route_redirect', '/somewhere'
|
34
|
+
redirect(:get, '/:prefix/redirect'){ "/#{params['prefix']}/somewhere" }
|
35
|
+
|
34
36
|
end
|
35
37
|
|
36
38
|
class ShowHandler
|
@@ -100,21 +102,12 @@ class RedirectHandler
|
|
100
102
|
|
101
103
|
end
|
102
104
|
|
103
|
-
class RedirectToHandler
|
104
|
-
include Deas::ViewHandler
|
105
|
-
|
106
|
-
def run!
|
107
|
-
redirect_to '/somewhere'
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
105
|
class SetSessionHandler
|
113
106
|
include Deas::ViewHandler
|
114
107
|
|
115
108
|
def run!
|
116
109
|
session[:secret] = 'session_secret'
|
117
|
-
|
110
|
+
redirect '/session'
|
118
111
|
end
|
119
112
|
|
120
113
|
end
|
data/test/system/rack_tests.rb
CHANGED
@@ -64,12 +64,21 @@ module Deas
|
|
64
64
|
|
65
65
|
assert_equal 302, last_response.status
|
66
66
|
assert_equal expected_location, last_response.headers['Location']
|
67
|
+
end
|
67
68
|
|
68
|
-
|
69
|
+
should "return a 302 redirect to the expected location " \
|
70
|
+
"when using a route redirect" do
|
71
|
+
get '/route_redirect'
|
69
72
|
expected_location = 'http://example.org/somewhere'
|
70
73
|
|
71
74
|
assert_equal 302, last_response.status
|
72
75
|
assert_equal expected_location, last_response.headers['Location']
|
76
|
+
|
77
|
+
get '/my_prefix/redirect'
|
78
|
+
expected_location = 'http://example.org/my_prefix/somewhere'
|
79
|
+
|
80
|
+
assert_equal 302, last_response.status
|
81
|
+
assert_equal expected_location, last_response.headers['Location']
|
73
82
|
end
|
74
83
|
|
75
84
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'deas/redirect_handler'
|
3
|
+
require 'deas/test_helpers'
|
4
|
+
|
5
|
+
module Deas::RedirectHandler
|
6
|
+
|
7
|
+
class BaseTests < Assert::Context
|
8
|
+
desc "Deas::RedirectHandler"
|
9
|
+
setup do
|
10
|
+
@handler_class = Deas::RedirectHandler.new('/somewhere')
|
11
|
+
end
|
12
|
+
subject{ @handler_class }
|
13
|
+
|
14
|
+
should have_accessors :redirect_path
|
15
|
+
|
16
|
+
should "build a redirect handler class" do
|
17
|
+
subject.included_modules.tap do |modules|
|
18
|
+
assert_includes Deas::ViewHandler, modules
|
19
|
+
assert_includes Deas::RedirectHandler::InstanceMethods, modules
|
20
|
+
end
|
21
|
+
|
22
|
+
assert_instance_of Proc, subject.redirect_path
|
23
|
+
assert_equal '/somewhere', subject.redirect_path.call
|
24
|
+
end
|
25
|
+
|
26
|
+
should "allow passing a block instead of a static path" do
|
27
|
+
path_proc = proc{ '/somewhere' }
|
28
|
+
|
29
|
+
handler_class = Deas::RedirectHandler.new(&path_proc)
|
30
|
+
assert_equal path_proc, handler_class.redirect_path
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
class RunTests < BaseTests
|
36
|
+
include Deas::TestHelpers
|
37
|
+
|
38
|
+
desc "when run"
|
39
|
+
|
40
|
+
should "redirect to the path that it was build with" do
|
41
|
+
render_args = test_runner(@handler_class).run
|
42
|
+
assert_equal true, render_args.redirect?
|
43
|
+
assert_equal '/somewhere', render_args.path
|
44
|
+
end
|
45
|
+
|
46
|
+
should "redirect to the path returned from instance evaling the proc" do
|
47
|
+
path_proc = proc{ params['redirect_to'] }
|
48
|
+
handler_class = Deas::RedirectHandler.new(&path_proc)
|
49
|
+
|
50
|
+
render_args = test_runner(handler_class, {
|
51
|
+
:params => { 'redirect_to' => '/go_here' }
|
52
|
+
}).run
|
53
|
+
assert_equal true, render_args.redirect?
|
54
|
+
assert_equal '/go_here', render_args.path
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
data/test/unit/route_tests.rb
CHANGED
@@ -16,6 +16,13 @@ class Deas::Route
|
|
16
16
|
should have_instance_methods :method, :path, :handler_class_name,
|
17
17
|
:handler_class, :run
|
18
18
|
|
19
|
+
should "allow passing a constantized handler when initialized" do
|
20
|
+
route = Deas::Route.new(:get, '/test', 'TestViewHandler', TestViewHandler)
|
21
|
+
|
22
|
+
# handler class is set without calling constantize
|
23
|
+
assert_equal TestViewHandler, route.handler_class
|
24
|
+
end
|
25
|
+
|
19
26
|
should "constantize the handler class with #constantize!" do
|
20
27
|
assert_nil subject.handler_class
|
21
28
|
|
data/test/unit/runner_tests.rb
CHANGED
data/test/unit/server_tests.rb
CHANGED
@@ -125,6 +125,17 @@ module Deas::Server
|
|
125
125
|
assert_equal 'DeleteAsset', route.handler_class_name
|
126
126
|
end
|
127
127
|
|
128
|
+
should "add a redirect route using #redirect" do
|
129
|
+
subject.redirect(:get, '/invalid', '/assets')
|
130
|
+
|
131
|
+
route = subject.configuration.routes[0]
|
132
|
+
assert_instance_of Deas::Route, route
|
133
|
+
assert_equal :get, route.method
|
134
|
+
assert_equal '/invalid', route.path
|
135
|
+
assert_equal 'Deas::RedirectHandler', route.handler_class_name
|
136
|
+
assert_not_nil route.handler_class
|
137
|
+
end
|
138
|
+
|
128
139
|
should "allow defining any kind of route using #route" do
|
129
140
|
subject.route(:options, '/get_info', 'GetInfo')
|
130
141
|
|
@@ -152,7 +163,7 @@ module Deas::Server
|
|
152
163
|
end
|
153
164
|
|
154
165
|
should "add and query helper modules using #template_helpers and #template_helper?" do
|
155
|
-
subject.template_helpers
|
166
|
+
subject.template_helpers(helper_module = Module.new)
|
156
167
|
assert subject.template_helper?(helper_module)
|
157
168
|
end
|
158
169
|
|
@@ -14,8 +14,8 @@ class Deas::SinatraRunner
|
|
14
14
|
end
|
15
15
|
subject{ @runner }
|
16
16
|
|
17
|
-
should
|
18
|
-
|
17
|
+
should have_imeths :run, :request, :response, :params, :logger, :halt
|
18
|
+
should have_imeths :render, :session, :redirect
|
19
19
|
|
20
20
|
should "return the sinatra_call's request with #request" do
|
21
21
|
assert_equal @fake_sinatra_call.request, subject.request
|
@@ -60,13 +60,6 @@ class Deas::SinatraRunner
|
|
60
60
|
assert_equal expected, return_value
|
61
61
|
end
|
62
62
|
|
63
|
-
should "call the sinatra_call's redirect and to methods with #redirect_to" do
|
64
|
-
return_value = catch(:halt){ subject.redirect_to('/somewhere') }
|
65
|
-
expected = [ 302, { 'Location' => "http://test.local/somewhere" } ]
|
66
|
-
|
67
|
-
assert_equal expected, return_value
|
68
|
-
end
|
69
|
-
|
70
63
|
end
|
71
64
|
|
72
65
|
class RunTests < BaseTests
|
@@ -28,9 +28,9 @@ module Deas::ViewHandler
|
|
28
28
|
end
|
29
29
|
|
30
30
|
should "be able to render templates" do
|
31
|
-
|
32
|
-
assert_equal "my_template",
|
33
|
-
assert_equal({ :some => :option },
|
31
|
+
render_args = test_runner(RenderViewHandler).run
|
32
|
+
assert_equal "my_template", render_args.template_name
|
33
|
+
assert_equal({ :some => :option }, render_args.options)
|
34
34
|
end
|
35
35
|
|
36
36
|
should "allow specifying the layouts using #layout or #layouts" do
|
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:
|
4
|
+
hash: 55
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 10
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.10.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Redding
|
@@ -16,12 +16,11 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2013-05-
|
19
|
+
date: 2013-05-14 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name: ns-options
|
23
22
|
prerelease: false
|
24
|
-
|
23
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
25
|
requirements:
|
27
26
|
- - ~>
|
@@ -39,12 +38,12 @@ dependencies:
|
|
39
38
|
- 1
|
40
39
|
- 4
|
41
40
|
version: 1.1.4
|
41
|
+
requirement: *id001
|
42
|
+
name: ns-options
|
42
43
|
type: :runtime
|
43
|
-
version_requirements: *id001
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
|
-
name: rack
|
46
45
|
prerelease: false
|
47
|
-
|
46
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
48
47
|
none: false
|
49
48
|
requirements:
|
50
49
|
- - ~>
|
@@ -54,12 +53,12 @@ dependencies:
|
|
54
53
|
- 1
|
55
54
|
- 5
|
56
55
|
version: "1.5"
|
56
|
+
requirement: *id002
|
57
|
+
name: rack
|
57
58
|
type: :runtime
|
58
|
-
version_requirements: *id002
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
|
-
name: sinatra
|
61
60
|
prerelease: false
|
62
|
-
|
61
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
63
62
|
none: false
|
64
63
|
requirements:
|
65
64
|
- - ~>
|
@@ -69,12 +68,12 @@ dependencies:
|
|
69
68
|
- 1
|
70
69
|
- 4
|
71
70
|
version: "1.4"
|
71
|
+
requirement: *id003
|
72
|
+
name: sinatra
|
72
73
|
type: :runtime
|
73
|
-
version_requirements: *id003
|
74
74
|
- !ruby/object:Gem::Dependency
|
75
|
-
name: assert
|
76
75
|
prerelease: false
|
77
|
-
|
76
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
78
77
|
none: false
|
79
78
|
requirements:
|
80
79
|
- - ">="
|
@@ -83,12 +82,12 @@ dependencies:
|
|
83
82
|
segments:
|
84
83
|
- 0
|
85
84
|
version: "0"
|
85
|
+
requirement: *id004
|
86
|
+
name: assert
|
86
87
|
type: :development
|
87
|
-
version_requirements: *id004
|
88
88
|
- !ruby/object:Gem::Dependency
|
89
|
-
name: assert-mocha
|
90
89
|
prerelease: false
|
91
|
-
|
90
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
92
91
|
none: false
|
93
92
|
requirements:
|
94
93
|
- - ">="
|
@@ -97,12 +96,12 @@ dependencies:
|
|
97
96
|
segments:
|
98
97
|
- 0
|
99
98
|
version: "0"
|
99
|
+
requirement: *id005
|
100
|
+
name: assert-mocha
|
100
101
|
type: :development
|
101
|
-
version_requirements: *id005
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
|
-
name: assert-rack-test
|
104
103
|
prerelease: false
|
105
|
-
|
104
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
106
105
|
none: false
|
107
106
|
requirements:
|
108
107
|
- - ">="
|
@@ -111,8 +110,9 @@ dependencies:
|
|
111
110
|
segments:
|
112
111
|
- 0
|
113
112
|
version: "0"
|
113
|
+
requirement: *id006
|
114
|
+
name: assert-rack-test
|
114
115
|
type: :development
|
115
|
-
version_requirements: *id006
|
116
116
|
description: Handler-based web framework powered by Sinatra
|
117
117
|
email:
|
118
118
|
- kelly@kellyredding.com
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- lib/deas/error_handler.rb
|
135
135
|
- lib/deas/logging.rb
|
136
136
|
- lib/deas/rack_request_fix.rb
|
137
|
+
- lib/deas/redirect_handler.rb
|
137
138
|
- lib/deas/route.rb
|
138
139
|
- lib/deas/runner.rb
|
139
140
|
- lib/deas/server.rb
|
@@ -158,6 +159,7 @@ files:
|
|
158
159
|
- test/system/rack_tests.rb
|
159
160
|
- test/unit/error_handler_tests.rb
|
160
161
|
- test/unit/logging_tests.rb
|
162
|
+
- test/unit/redirect_handler_tests.rb
|
161
163
|
- test/unit/route_tests.rb
|
162
164
|
- test/unit/runner_tests.rb
|
163
165
|
- test/unit/server_tests.rb
|
@@ -195,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
197
|
requirements: []
|
196
198
|
|
197
199
|
rubyforge_project:
|
198
|
-
rubygems_version: 1.8.
|
200
|
+
rubygems_version: 1.8.15
|
199
201
|
signing_key:
|
200
202
|
specification_version: 3
|
201
203
|
summary: Handler-based web framework powered by Sinatra
|
@@ -213,6 +215,7 @@ test_files:
|
|
213
215
|
- test/system/rack_tests.rb
|
214
216
|
- test/unit/error_handler_tests.rb
|
215
217
|
- test/unit/logging_tests.rb
|
218
|
+
- test/unit/redirect_handler_tests.rb
|
216
219
|
- test/unit/route_tests.rb
|
217
220
|
- test/unit/runner_tests.rb
|
218
221
|
- test/unit/server_tests.rb
|