deas 0.18.0 → 0.19.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/router.rb +77 -0
- data/lib/deas/server.rb +28 -69
- data/lib/deas/version.rb +1 -1
- data/test/support/routes.rb +2 -2
- data/test/unit/router_tests.rb +170 -0
- data/test/unit/server_configuration_tests.rb +10 -8
- data/test/unit/server_tests.rb +15 -145
- data/test/unit/sinatra_app_tests.rb +4 -1
- metadata +7 -4
data/lib/deas/router.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'deas/redirect_proxy'
|
2
|
+
require 'deas/route_proxy'
|
3
|
+
require 'deas/route'
|
4
|
+
require 'deas/url'
|
5
|
+
|
6
|
+
module Deas
|
7
|
+
class Router
|
8
|
+
|
9
|
+
attr_accessor :urls, :routes
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@urls, @routes = {}, []
|
13
|
+
end
|
14
|
+
|
15
|
+
def view_handler_ns(value = nil)
|
16
|
+
@view_handler_ns = value if !value.nil?
|
17
|
+
@view_handler_ns
|
18
|
+
end
|
19
|
+
|
20
|
+
def url(name, path)
|
21
|
+
if !path.kind_of?(::String)
|
22
|
+
raise ArgumentError, "invalid path `#{path.inspect}` - "\
|
23
|
+
"can only provide a url name with String paths"
|
24
|
+
end
|
25
|
+
add_url(name.to_sym, path)
|
26
|
+
end
|
27
|
+
|
28
|
+
def url_for(name, *args)
|
29
|
+
url = self.urls[name.to_sym]
|
30
|
+
raise ArgumentError, "no route named `#{name.to_sym.inspect}`" unless url
|
31
|
+
|
32
|
+
url.path_for(*args)
|
33
|
+
end
|
34
|
+
|
35
|
+
def get(path, handler_name); self.route(:get, path, handler_name); end
|
36
|
+
def post(path, handler_name); self.route(:post, path, handler_name); end
|
37
|
+
def put(path, handler_name); self.route(:put, path, handler_name); end
|
38
|
+
def patch(path, handler_name); self.route(:patch, path, handler_name); end
|
39
|
+
def delete(path, handler_name); self.route(:delete, path, handler_name); end
|
40
|
+
|
41
|
+
def route(http_method, from_path, handler_class_name)
|
42
|
+
if self.view_handler_ns && !(handler_class_name =~ /^::/)
|
43
|
+
handler_class_name = "#{self.view_handler_ns}::#{handler_class_name}"
|
44
|
+
end
|
45
|
+
proxy = Deas::RouteProxy.new(handler_class_name)
|
46
|
+
|
47
|
+
from_url = self.urls[from_path]
|
48
|
+
from_url_path = from_url.path if from_url
|
49
|
+
add_route(http_method, from_url_path || from_path, proxy)
|
50
|
+
end
|
51
|
+
|
52
|
+
def redirect(from_path, to_path = nil, &block)
|
53
|
+
to_url = self.urls[to_path]
|
54
|
+
if to_path.kind_of?(::Symbol) && to_url.nil?
|
55
|
+
raise ArgumentError, "no url named `#{to_path.inspect}`"
|
56
|
+
end
|
57
|
+
proxy = Deas::RedirectProxy.new(to_url || to_path, &block)
|
58
|
+
|
59
|
+
from_url = self.urls[from_path]
|
60
|
+
from_url_path = from_url.path if from_url
|
61
|
+
add_route(:get, from_url_path || from_path, proxy)
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def add_url(name, path)
|
67
|
+
self.urls[name] = Deas::Url.new(name, path)
|
68
|
+
end
|
69
|
+
|
70
|
+
def add_route(http_method, path, proxy)
|
71
|
+
Deas::Route.new(http_method, path, proxy).tap{ |r| self.routes.push(r) }
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
data/lib/deas/server.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
require 'pathname'
|
2
|
-
require 'set'
|
3
2
|
require 'ns-options'
|
4
3
|
require 'ns-options/boolean'
|
5
4
|
require 'deas/exceptions'
|
6
5
|
require 'deas/template'
|
7
6
|
require 'deas/logging'
|
8
|
-
require 'deas/redirect_proxy'
|
9
|
-
require 'deas/route_proxy'
|
10
|
-
require 'deas/route'
|
11
|
-
require 'deas/url'
|
12
7
|
require 'deas/show_exceptions'
|
8
|
+
require 'deas/router'
|
13
9
|
require 'deas/sinatra_app'
|
14
10
|
|
15
11
|
module Deas; end
|
@@ -36,12 +32,11 @@ module Deas::Server
|
|
36
32
|
|
37
33
|
# server handling options
|
38
34
|
|
39
|
-
option :logger, :default => proc{ Deas::NullLogger.new }
|
40
35
|
option :verbose_logging, NsOptions::Boolean, :default => true
|
41
|
-
option :
|
36
|
+
option :logger, :default => proc{ Deas::NullLogger.new }
|
42
37
|
|
43
38
|
attr_accessor :settings, :error_procs, :init_procs, :template_helpers
|
44
|
-
attr_accessor :middlewares, :
|
39
|
+
attr_accessor :middlewares, :router
|
45
40
|
|
46
41
|
def initialize(values=nil)
|
47
42
|
# these are defaulted here because we want to use the Configuration
|
@@ -52,9 +47,9 @@ module Deas::Server
|
|
52
47
|
:public_folder => proc{ self.root.join('public') },
|
53
48
|
:views_folder => proc{ self.root.join('views') }
|
54
49
|
}))
|
55
|
-
@settings
|
56
|
-
@error_procs, @init_procs, @template_helpers = [], [], []
|
57
|
-
@
|
50
|
+
@settings = {}
|
51
|
+
@error_procs, @init_procs, @template_helpers, @middlewares = [], [], [], []
|
52
|
+
@router = Deas::Router.new
|
58
53
|
@valid = nil
|
59
54
|
end
|
60
55
|
|
@@ -92,18 +87,18 @@ module Deas::Server
|
|
92
87
|
@valid = true # if it made it this far, its valid!
|
93
88
|
end
|
94
89
|
|
95
|
-
def
|
96
|
-
|
97
|
-
klass.send(:include, *self.template_helpers)
|
98
|
-
end
|
90
|
+
def urls
|
91
|
+
self.router.urls
|
99
92
|
end
|
100
93
|
|
101
|
-
def
|
102
|
-
|
94
|
+
def routes
|
95
|
+
self.router.routes
|
103
96
|
end
|
104
97
|
|
105
|
-
def
|
106
|
-
|
98
|
+
def template_scope
|
99
|
+
Class.new(Deas::Template::Scope).tap do |klass|
|
100
|
+
klass.send(:include, *self.template_helpers)
|
101
|
+
end
|
107
102
|
end
|
108
103
|
|
109
104
|
end
|
@@ -191,10 +186,6 @@ module Deas::Server
|
|
191
186
|
self.configuration.settings[name.to_sym] = value
|
192
187
|
end
|
193
188
|
|
194
|
-
def view_handler_ns(*args)
|
195
|
-
self.configuration.view_handler_ns *args
|
196
|
-
end
|
197
|
-
|
198
189
|
def verbose_logging(*args)
|
199
190
|
self.configuration.verbose_logging *args
|
200
191
|
end
|
@@ -207,59 +198,27 @@ module Deas::Server
|
|
207
198
|
self.configuration.default_charset *args
|
208
199
|
end
|
209
200
|
|
210
|
-
|
211
|
-
self.route(:get, path, handler_class_name, url_name)
|
212
|
-
end
|
213
|
-
|
214
|
-
def post(path, handler_class_name, url_name = nil)
|
215
|
-
self.route(:post, path, handler_class_name, url_name)
|
216
|
-
end
|
201
|
+
# router handling
|
217
202
|
|
218
|
-
def
|
219
|
-
self.
|
203
|
+
def router(value = nil)
|
204
|
+
self.configuration.router = value if !value.nil?
|
205
|
+
self.configuration.router
|
220
206
|
end
|
221
207
|
|
222
|
-
def
|
223
|
-
self.route(:patch, path, handler_class_name, url_name)
|
224
|
-
end
|
208
|
+
def view_handler_ns(*args); self.router.view_handler_ns(*args); end
|
225
209
|
|
226
|
-
def
|
227
|
-
|
228
|
-
end
|
210
|
+
def url(*args, &block); self.router.url(*args, &block); end
|
211
|
+
def url_for(*args, &block); self.router.url_for(*args, &block); end
|
229
212
|
|
230
|
-
def
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
proxy = Deas::RedirectProxy.new(url || to_path, &block)
|
236
|
-
self.configuration.add_route(http_method, path, proxy)
|
237
|
-
end
|
213
|
+
def get(*args, &block); self.router.get(*args, &block); end
|
214
|
+
def post(*args, &block); self.router.post(*args, &block); end
|
215
|
+
def put(*args, &block); self.router.put(*args, &block); end
|
216
|
+
def patch(*args, &block); self.router.patch(*args, &block); end
|
217
|
+
def delete(*args, &block); self.router.delete(*args, &block); end
|
238
218
|
|
239
|
-
def route(
|
240
|
-
|
241
|
-
handler_class_name = "#{self.view_handler_ns}::#{handler_class_name}"
|
242
|
-
end
|
243
|
-
proxy = Deas::RouteProxy.new(handler_class_name)
|
244
|
-
|
245
|
-
if url_name && !url_name.to_s.empty?
|
246
|
-
if !path.kind_of?(::String)
|
247
|
-
raise ArgumentError, "invalid path `#{path.inspect}` - "\
|
248
|
-
"can only provide a url name with String paths"
|
249
|
-
end
|
250
|
-
self.configuration.add_url(url_name.to_sym, path)
|
251
|
-
end
|
252
|
-
self.configuration.add_route(http_method, path, proxy)
|
253
|
-
end
|
254
|
-
|
255
|
-
def url(name, *args)
|
256
|
-
url = self.configuration.urls[name.to_sym]
|
257
|
-
raise ArgumentError, "no route named `#{name.to_sym.inspect}`" unless url
|
258
|
-
|
259
|
-
url.path_for(*args)
|
260
|
-
end
|
219
|
+
def route(*args, &block); self.router.route(*args, &block); end
|
220
|
+
def redirect(*args, &block); self.router.redirect(*args, &block); end
|
261
221
|
|
262
222
|
end
|
263
223
|
|
264
224
|
end
|
265
|
-
|
data/lib/deas/version.rb
CHANGED
data/test/support/routes.rb
CHANGED
@@ -40,8 +40,8 @@ class DeasTestServer
|
|
40
40
|
|
41
41
|
get '/handler/tests.json', 'HandlerTestsHandler'
|
42
42
|
|
43
|
-
redirect
|
44
|
-
redirect(
|
43
|
+
redirect '/route_redirect', '/somewhere'
|
44
|
+
redirect('/:prefix/redirect'){ "/#{params['prefix']}/somewhere" }
|
45
45
|
|
46
46
|
end
|
47
47
|
|
@@ -0,0 +1,170 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'deas/router'
|
3
|
+
|
4
|
+
class Deas::Router
|
5
|
+
|
6
|
+
class BaseTests < Assert::Context
|
7
|
+
desc "Deas::Router"
|
8
|
+
setup do
|
9
|
+
@router = Deas::Router.new
|
10
|
+
end
|
11
|
+
subject{ @router }
|
12
|
+
|
13
|
+
should have_accessors :urls, :routes
|
14
|
+
should have_imeths :view_handler_ns
|
15
|
+
should have_imeths :url, :url_for
|
16
|
+
should have_imeths :get, :post, :put, :patch, :delete
|
17
|
+
should have_imeths :route, :redirect
|
18
|
+
|
19
|
+
should "have no view_handler_ns, urls, or routes by default" do
|
20
|
+
assert_nil subject.view_handler_ns
|
21
|
+
assert_empty subject.urls
|
22
|
+
assert_empty subject.routes
|
23
|
+
end
|
24
|
+
|
25
|
+
should "add a GET route using #get" do
|
26
|
+
subject.get('/things', 'ListThings')
|
27
|
+
|
28
|
+
route = subject.routes[0]
|
29
|
+
assert_instance_of Deas::Route, route
|
30
|
+
assert_equal :get, route.method
|
31
|
+
assert_equal '/things', route.path
|
32
|
+
assert_equal 'ListThings', route.handler_proxy.handler_class_name
|
33
|
+
end
|
34
|
+
|
35
|
+
should "add a POST route using #post" do
|
36
|
+
subject.post('/things', 'CreateThing')
|
37
|
+
|
38
|
+
route = subject.routes[0]
|
39
|
+
assert_instance_of Deas::Route, route
|
40
|
+
assert_equal :post, route.method
|
41
|
+
assert_equal '/things', route.path
|
42
|
+
assert_equal 'CreateThing', route.handler_proxy.handler_class_name
|
43
|
+
end
|
44
|
+
|
45
|
+
should "add a PUT route using #put" do
|
46
|
+
subject.put('/things/:id', 'UpdateThing')
|
47
|
+
|
48
|
+
route = subject.routes[0]
|
49
|
+
assert_instance_of Deas::Route, route
|
50
|
+
assert_equal :put, route.method
|
51
|
+
assert_equal '/things/:id', route.path
|
52
|
+
assert_equal 'UpdateThing', route.handler_proxy.handler_class_name
|
53
|
+
end
|
54
|
+
|
55
|
+
should "add a PATCH route using #patch" do
|
56
|
+
subject.patch('/things/:id', 'UpdateThing')
|
57
|
+
|
58
|
+
route = subject.routes[0]
|
59
|
+
assert_instance_of Deas::Route, route
|
60
|
+
assert_equal :patch, route.method
|
61
|
+
assert_equal '/things/:id', route.path
|
62
|
+
assert_equal 'UpdateThing', route.handler_proxy.handler_class_name
|
63
|
+
end
|
64
|
+
|
65
|
+
should "add a DELETE route using #delete" do
|
66
|
+
subject.delete('/things/:id', 'DeleteThing')
|
67
|
+
|
68
|
+
route = subject.routes[0]
|
69
|
+
assert_instance_of Deas::Route, route
|
70
|
+
assert_equal :delete, route.method
|
71
|
+
assert_equal '/things/:id', route.path
|
72
|
+
assert_equal 'DeleteThing', route.handler_proxy.handler_class_name
|
73
|
+
end
|
74
|
+
|
75
|
+
should "allow defining any kind of route using #route" do
|
76
|
+
subject.route(:options, '/get_info', 'GetInfo')
|
77
|
+
|
78
|
+
route = subject.routes[0]
|
79
|
+
assert_instance_of Deas::Route, route
|
80
|
+
assert_equal :options, route.method
|
81
|
+
assert_equal '/get_info', route.path
|
82
|
+
assert_equal 'GetInfo', route.handler_proxy.handler_class_name
|
83
|
+
end
|
84
|
+
|
85
|
+
should "set a view handler namespace and use it when defining routes" do
|
86
|
+
subject.view_handler_ns 'MyStuff'
|
87
|
+
assert_equal 'MyStuff', subject.view_handler_ns
|
88
|
+
|
89
|
+
# should use the ns
|
90
|
+
route = subject.route(:get, '/ns_test', 'NsTest')
|
91
|
+
assert_equal 'MyStuff::NsTest', route.handler_proxy.handler_class_name
|
92
|
+
|
93
|
+
# should ignore the ns when the leading colons are present
|
94
|
+
route = subject.route(:post, '/no_ns_test', '::NoNsTest')
|
95
|
+
assert_equal '::NoNsTest', route.handler_proxy.handler_class_name
|
96
|
+
end
|
97
|
+
|
98
|
+
should "add a redirect route using #redirect" do
|
99
|
+
subject.redirect('/invalid', '/assets')
|
100
|
+
|
101
|
+
route = subject.routes[0]
|
102
|
+
assert_instance_of Deas::Route, route
|
103
|
+
assert_equal :get, route.method
|
104
|
+
assert_equal '/invalid', route.path
|
105
|
+
assert_equal 'Deas::RedirectHandler', route.handler_proxy.handler_class_name
|
106
|
+
|
107
|
+
route.validate!
|
108
|
+
assert_not_nil route.handler_class
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
class NamedUrlTests < BaseTests
|
114
|
+
desc "when using named urls"
|
115
|
+
setup do
|
116
|
+
@router.url('get_info', '/info/:for')
|
117
|
+
end
|
118
|
+
|
119
|
+
should "define a url given a name and a path" do
|
120
|
+
url = subject.urls[:get_info]
|
121
|
+
|
122
|
+
assert_not_nil url
|
123
|
+
assert_kind_of Deas::Url, url
|
124
|
+
assert_equal :get_info, url.name
|
125
|
+
assert_equal '/info/:for', url.path
|
126
|
+
end
|
127
|
+
|
128
|
+
should "complain if defining a url with a non-string path" do
|
129
|
+
assert_raises ArgumentError do
|
130
|
+
subject.url(:get_info, /^\/info/)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
should "build a path for a url given params" do
|
135
|
+
exp_path = "/info/now"
|
136
|
+
assert_equal exp_path, subject.url_for(:get_info, :for => 'now')
|
137
|
+
assert_equal exp_path, subject.url_for(:get_info, 'now')
|
138
|
+
end
|
139
|
+
|
140
|
+
should "complain if building a named url that hasn't been defined" do
|
141
|
+
assert_raises ArgumentError do
|
142
|
+
subject.url_for(:get_all_info, 'now')
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
should "complain if redirecting to a named url that hasn't been defined" do
|
147
|
+
assert_raises ArgumentError do
|
148
|
+
subject.redirect('/somewhere', :not_defined_url)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
should "redirect using a url name instead of a path" do
|
153
|
+
subject.redirect(:get_info, '/somewhere')
|
154
|
+
url = subject.urls[:get_info]
|
155
|
+
route = subject.routes.last
|
156
|
+
|
157
|
+
assert_equal url.path, route.path
|
158
|
+
end
|
159
|
+
|
160
|
+
should "route using a url name instead of a path" do
|
161
|
+
subject.route(:get, :get_info, 'GetInfo')
|
162
|
+
url = subject.urls[:get_info]
|
163
|
+
route = subject.routes.last
|
164
|
+
|
165
|
+
assert_equal url.path, route.path
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'assert'
|
2
|
-
require '
|
2
|
+
require 'deas/server'
|
3
|
+
|
3
4
|
require 'test/support/view_handlers'
|
4
5
|
require 'deas/exceptions'
|
5
6
|
require 'deas/template'
|
6
|
-
require 'deas/
|
7
|
-
require 'deas/server'
|
7
|
+
require 'deas/router'
|
8
8
|
|
9
9
|
class Deas::Server::Configuration
|
10
10
|
|
@@ -24,11 +24,11 @@ class Deas::Server::Configuration
|
|
24
24
|
|
25
25
|
# server handling options
|
26
26
|
|
27
|
-
should have_imeths :
|
27
|
+
should have_imeths :verbose_logging, :logger
|
28
28
|
|
29
29
|
should have_accessors :settings, :error_procs, :init_procs, :template_helpers
|
30
|
-
should have_accessors :middlewares, :
|
31
|
-
should have_imeths :valid?, :validate!, :
|
30
|
+
should have_accessors :middlewares, :router
|
31
|
+
should have_imeths :valid?, :validate!, :urls, :routes, :template_scope
|
32
32
|
|
33
33
|
should "default the env to 'development'" do
|
34
34
|
assert_equal 'development', subject.env
|
@@ -51,7 +51,6 @@ class Deas::Server::Configuration
|
|
51
51
|
should "default the handling options" do
|
52
52
|
assert_instance_of Deas::NullLogger, subject.logger
|
53
53
|
assert_equal true, subject.verbose_logging
|
54
|
-
assert_nil subject.view_handler_ns
|
55
54
|
end
|
56
55
|
|
57
56
|
should "default its stored configuration" do
|
@@ -62,6 +61,7 @@ class Deas::Server::Configuration
|
|
62
61
|
assert_empty subject.middlewares
|
63
62
|
assert_empty subject.routes
|
64
63
|
assert_empty subject.urls
|
64
|
+
assert_kind_of Deas::Router, subject.router
|
65
65
|
end
|
66
66
|
|
67
67
|
should "build a template scope including its template helpers" do
|
@@ -98,6 +98,8 @@ class Deas::Server::Configuration
|
|
98
98
|
@other_initialized = false
|
99
99
|
proxy = Deas::RouteProxy.new('TestViewHandler')
|
100
100
|
@route = Deas::Route.new(:get, '/something', proxy)
|
101
|
+
@router = Deas::Router.new
|
102
|
+
@router.routes = [ @route ]
|
101
103
|
|
102
104
|
@configuration = Deas::Server::Configuration.new.tap do |c|
|
103
105
|
c.env = 'staging'
|
@@ -109,7 +111,7 @@ class Deas::Server::Configuration
|
|
109
111
|
c.static = true
|
110
112
|
c.reload_templates = true
|
111
113
|
c.middlewares = [ ['MyMiddleware'] ]
|
112
|
-
c.
|
114
|
+
c.router = @router
|
113
115
|
end
|
114
116
|
@configuration.init_procs << proc{ @initialized = true }
|
115
117
|
@configuration.init_procs << proc{ @other_initialized = true }
|
data/test/unit/server_tests.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'assert'
|
2
|
-
require 'set'
|
3
|
-
require 'logger'
|
4
|
-
require 'deas/route'
|
5
2
|
require 'deas/server'
|
6
3
|
|
4
|
+
require 'logger'
|
5
|
+
require 'deas/router'
|
6
|
+
|
7
7
|
module Deas::Server
|
8
8
|
|
9
9
|
class BaseTests < Assert::Context
|
@@ -24,7 +24,13 @@ module Deas::Server
|
|
24
24
|
should have_imeths :init, :error, :template_helpers, :template_helper?
|
25
25
|
should have_imeths :use, :set, :view_handler_ns, :verbose_logging, :logger
|
26
26
|
should have_imeths :get, :post, :put, :patch, :delete
|
27
|
-
should have_imeths :redirect, :route, :url
|
27
|
+
should have_imeths :redirect, :route, :url, :url_for
|
28
|
+
|
29
|
+
# DSL for server routing settings
|
30
|
+
should have_imeths :router, :view_handler_ns
|
31
|
+
should have_imeths :url, :url_for
|
32
|
+
should have_imeths :get, :post, :put, :patch, :delete
|
33
|
+
should have_imeths :route, :redirect
|
28
34
|
|
29
35
|
should "allow setting it's configuration options" do
|
30
36
|
config = subject.configuration
|
@@ -90,148 +96,12 @@ module Deas::Server
|
|
90
96
|
assert subject.template_helper?(helper_module)
|
91
97
|
end
|
92
98
|
|
93
|
-
should "
|
94
|
-
subject.
|
95
|
-
assert_equal 'MyStuff', subject.configuration.view_handler_ns
|
96
|
-
|
97
|
-
# should use the ns
|
98
|
-
route = subject.route(:get, '/ns_test', 'NsTest')
|
99
|
-
assert_equal 'MyStuff::NsTest', route.handler_proxy.handler_class_name
|
100
|
-
|
101
|
-
# should ignore the ns when the leading colons are present
|
102
|
-
route = subject.route(:post, '/no_ns_test', '::NoNsTest')
|
103
|
-
assert_equal '::NoNsTest', route.handler_proxy.handler_class_name
|
104
|
-
end
|
105
|
-
|
106
|
-
should "add a GET route using #get" do
|
107
|
-
subject.get('/things', 'ListThings')
|
108
|
-
|
109
|
-
route = subject.configuration.routes[0]
|
110
|
-
assert_instance_of Deas::Route, route
|
111
|
-
assert_equal :get, route.method
|
112
|
-
assert_equal '/things', route.path
|
113
|
-
assert_equal 'ListThings', route.handler_proxy.handler_class_name
|
114
|
-
end
|
115
|
-
|
116
|
-
should "add a POST route using #post" do
|
117
|
-
subject.post('/things', 'CreateThing')
|
118
|
-
|
119
|
-
route = subject.configuration.routes[0]
|
120
|
-
assert_instance_of Deas::Route, route
|
121
|
-
assert_equal :post, route.method
|
122
|
-
assert_equal '/things', route.path
|
123
|
-
assert_equal 'CreateThing', route.handler_proxy.handler_class_name
|
124
|
-
end
|
125
|
-
|
126
|
-
should "add a PUT route using #put" do
|
127
|
-
subject.put('/things/:id', 'UpdateThing')
|
128
|
-
|
129
|
-
route = subject.configuration.routes[0]
|
130
|
-
assert_instance_of Deas::Route, route
|
131
|
-
assert_equal :put, route.method
|
132
|
-
assert_equal '/things/:id', route.path
|
133
|
-
assert_equal 'UpdateThing', route.handler_proxy.handler_class_name
|
134
|
-
end
|
135
|
-
|
136
|
-
should "add a PATCH route using #patch" do
|
137
|
-
subject.patch('/things/:id', 'UpdateThing')
|
138
|
-
|
139
|
-
route = subject.configuration.routes[0]
|
140
|
-
assert_instance_of Deas::Route, route
|
141
|
-
assert_equal :patch, route.method
|
142
|
-
assert_equal '/things/:id', route.path
|
143
|
-
assert_equal 'UpdateThing', route.handler_proxy.handler_class_name
|
144
|
-
end
|
145
|
-
|
146
|
-
should "add a DELETE route using #delete" do
|
147
|
-
subject.delete('/things/:id', 'DeleteThing')
|
148
|
-
|
149
|
-
route = subject.configuration.routes[0]
|
150
|
-
assert_instance_of Deas::Route, route
|
151
|
-
assert_equal :delete, route.method
|
152
|
-
assert_equal '/things/:id', route.path
|
153
|
-
assert_equal 'DeleteThing', route.handler_proxy.handler_class_name
|
154
|
-
end
|
155
|
-
|
156
|
-
should "add a redirect route using #redirect" do
|
157
|
-
subject.redirect(:get, '/invalid', '/assets')
|
158
|
-
|
159
|
-
route = subject.configuration.routes[0]
|
160
|
-
assert_instance_of Deas::Route, route
|
161
|
-
assert_equal :get, route.method
|
162
|
-
assert_equal '/invalid', route.path
|
163
|
-
assert_equal 'Deas::RedirectHandler', route.handler_proxy.handler_class_name
|
164
|
-
|
165
|
-
route.validate!
|
166
|
-
assert_not_nil route.handler_class
|
167
|
-
end
|
168
|
-
|
169
|
-
should "allow defining any kind of route using #route" do
|
170
|
-
subject.route(:options, '/get_info', 'GetInfo')
|
171
|
-
|
172
|
-
route = subject.configuration.routes[0]
|
173
|
-
assert_instance_of Deas::Route, route
|
174
|
-
assert_equal :options, route.method
|
175
|
-
assert_equal '/get_info', route.path
|
176
|
-
assert_equal 'GetInfo', route.handler_proxy.handler_class_name
|
177
|
-
end
|
178
|
-
|
179
|
-
should "not define urls for routes created with no url name" do
|
180
|
-
assert_empty subject.configuration.urls
|
181
|
-
|
182
|
-
@server_class.route(:get, '/info', 'GetInfo')
|
183
|
-
assert_empty subject.configuration.urls
|
184
|
-
|
185
|
-
@server_class.route(:get, '/info', 'GetInfo', nil)
|
186
|
-
assert_empty subject.configuration.urls
|
187
|
-
|
188
|
-
@server_class.route(:get, '/info', 'GetInfo', '')
|
189
|
-
assert_empty subject.configuration.urls
|
190
|
-
|
191
|
-
@server_class.route(:get, '/info', 'GetInfo', 'get_info')
|
192
|
-
assert_not_empty subject.configuration.urls
|
193
|
-
end
|
194
|
-
|
195
|
-
end
|
196
|
-
|
197
|
-
class NamedUrlTests < BaseTests
|
198
|
-
desc "when defining a route with a url name"
|
199
|
-
setup do
|
200
|
-
@server_class.route(:get, '/info/:for', 'GetInfo', 'get_info')
|
201
|
-
end
|
202
|
-
|
203
|
-
should "define a url for the route on the server" do
|
204
|
-
url = subject.configuration.urls[:get_info]
|
205
|
-
|
206
|
-
assert_not_nil url
|
207
|
-
assert_kind_of Deas::Url, url
|
208
|
-
assert_equal :get_info, url.name
|
209
|
-
assert_equal '/info/:for', url.path
|
210
|
-
end
|
211
|
-
|
212
|
-
should "complain if given a non-string path" do
|
213
|
-
assert_raises ArgumentError do
|
214
|
-
subject.route(:get, /^\/info/, 'GetInfo', 'get_info')
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
should "build a path for a url given params" do
|
219
|
-
exp_path = "/info/now"
|
220
|
-
|
221
|
-
assert_equal exp_path, subject.url(:get_info, :for => 'now')
|
222
|
-
assert_equal exp_path, subject.url(:get_info, 'now')
|
223
|
-
end
|
224
|
-
|
225
|
-
should "complain if building a named url that hasn't been defined" do
|
226
|
-
assert_raises ArgumentError do
|
227
|
-
subject.url(:get_all_info, 'now')
|
228
|
-
end
|
229
|
-
end
|
99
|
+
should "have a router by default and allow overriding it" do
|
100
|
+
assert_kind_of Deas::Router, subject.router
|
230
101
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
end
|
102
|
+
new_router = Deas::Router.new
|
103
|
+
subject.router new_router
|
104
|
+
assert_same new_router, subject.router
|
235
105
|
end
|
236
106
|
|
237
107
|
end
|
@@ -13,6 +13,9 @@ module Deas::SinatraApp
|
|
13
13
|
setup do
|
14
14
|
proxy = Deas::RouteProxy.new('TestViewHandler')
|
15
15
|
@route = Deas::Route.new(:get, '/something', proxy)
|
16
|
+
@router = Deas::Router.new
|
17
|
+
@router.routes = [ @route ]
|
18
|
+
|
16
19
|
@configuration = Deas::Server::Configuration.new.tap do |c|
|
17
20
|
c.env = 'staging'
|
18
21
|
c.root = 'path/to/somewhere'
|
@@ -22,7 +25,7 @@ module Deas::SinatraApp
|
|
22
25
|
c.show_exceptions = true
|
23
26
|
c.static = true
|
24
27
|
c.reload_templates = true
|
25
|
-
c.
|
28
|
+
c.router = @router
|
26
29
|
end
|
27
30
|
@sinatra_app = Deas::SinatraApp.new(@configuration)
|
28
31
|
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:
|
4
|
+
hash: 83
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 19
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.19.0
|
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: 2013-07-
|
19
|
+
date: 2013-07-11 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: ns-options
|
@@ -153,6 +153,7 @@ files:
|
|
153
153
|
- lib/deas/redirect_proxy.rb
|
154
154
|
- lib/deas/route.rb
|
155
155
|
- lib/deas/route_proxy.rb
|
156
|
+
- lib/deas/router.rb
|
156
157
|
- lib/deas/runner.rb
|
157
158
|
- lib/deas/server.rb
|
158
159
|
- lib/deas/show_exceptions.rb
|
@@ -191,6 +192,7 @@ files:
|
|
191
192
|
- test/unit/redirect_proxy_tests.rb
|
192
193
|
- test/unit/route_proxy_tests.rb
|
193
194
|
- test/unit/route_tests.rb
|
195
|
+
- test/unit/router_tests.rb
|
194
196
|
- test/unit/runner_tests.rb
|
195
197
|
- test/unit/server_configuration_tests.rb
|
196
198
|
- test/unit/server_tests.rb
|
@@ -261,6 +263,7 @@ test_files:
|
|
261
263
|
- test/unit/redirect_proxy_tests.rb
|
262
264
|
- test/unit/route_proxy_tests.rb
|
263
265
|
- test/unit/route_tests.rb
|
266
|
+
- test/unit/router_tests.rb
|
264
267
|
- test/unit/runner_tests.rb
|
265
268
|
- test/unit/server_configuration_tests.rb
|
266
269
|
- test/unit/server_tests.rb
|