rad_core 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -2
- data/bin/rad +20 -25
- data/lib/components/config.rb +1 -1
- data/lib/components/configurators.rb +2 -2
- data/lib/components/controller.rb +2 -2
- data/lib/components/conveyors.rb +2 -2
- data/lib/components/environment.rb +1 -1
- data/lib/components/environment.yml +28 -28
- data/lib/components/flash.rb +1 -1
- data/lib/components/html.rb +1 -1
- data/lib/components/http.rb +1 -1
- data/lib/components/http.yml +1 -1
- data/lib/components/logger.rb +2 -2
- data/lib/components/mailer.rb +2 -2
- data/lib/components/remote.rb +1 -1
- data/lib/components/router.rb +3 -3
- data/lib/components/template.rb +2 -2
- data/lib/components/web.rb +3 -3
- data/lib/rad.rb +1 -1
- data/lib/rad/_support/active_support.rb +7 -7
- data/lib/rad/_support/active_support/locales/ru/actionview.yml +8 -8
- data/lib/rad/_support/active_support/locales/ru/activesupport.yml +4 -4
- data/lib/rad/_support/active_support/locales/ru/datetime.yml +5 -5
- data/lib/rad/_support/active_support/time.rb +2 -2
- data/lib/rad/_support/addressable.rb +6 -6
- data/lib/rad/_support/class_loader.rb +1 -1
- data/lib/rad/_support/extensions.rb +5 -5
- data/lib/rad/_support/filters.rb +13 -13
- data/lib/rad/_support/hacks_and_fixes.rb +5 -5
- data/lib/rad/_support/mime.rb +4 -4
- data/lib/rad/_support/module.rb +11 -11
- data/lib/rad/_support/require.rb +5 -5
- data/lib/rad/_support/rson.rb +4 -4
- data/lib/rad/_support/string.rb +9 -9
- data/lib/rad/cli/helper.rb +5 -5
- data/lib/rad/configurators/_require.rb +2 -2
- data/lib/rad/configurators/abstract.rb +5 -5
- data/lib/rad/configurators/web.rb +8 -8
- data/lib/rad/controller/_abstract.rb +15 -14
- data/lib/rad/controller/_abstract/miscellaneous.rb +5 -5
- data/lib/rad/controller/_abstract/render.rb +40 -40
- data/lib/rad/controller/_abstract/responder.rb +1 -1
- data/lib/rad/controller/_context.rb +1 -1
- data/lib/rad/controller/_http.rb +11 -11
- data/lib/rad/controller/_require.rb +6 -6
- data/lib/rad/controller/processors/controller_caller.rb +3 -3
- data/lib/rad/controller/processors/controller_error_handling.rb +14 -14
- data/lib/rad/controller/processors/controller_logger.rb +1 -1
- data/lib/rad/conveyors/_conveyor.rb +9 -9
- data/lib/rad/conveyors/_conveyors.rb +4 -4
- data/lib/rad/conveyors/_params.rb +5 -5
- data/lib/rad/conveyors/_processor.rb +2 -2
- data/lib/rad/conveyors/_workspace.rb +5 -5
- data/lib/rad/conveyors/processors/conveyor_logger.rb +3 -3
- data/lib/rad/environment/_config.rb +4 -4
- data/lib/rad/environment/_environment.rb +10 -10
- data/lib/rad/environment/_files_helper.rb +5 -5
- data/lib/rad/environment/_logger.rb +9 -9
- data/lib/rad/environment/_require.rb +4 -4
- data/lib/rad/gems.rb +14 -14
- data/lib/rad/html/_flash.rb +5 -5
- data/lib/rad/html/_helpers/basic_html_helper.rb +12 -12
- data/lib/rad/html/_helpers/form_helper.rb +19 -19
- data/lib/rad/html/_helpers/javascript_helper.rb +6 -6
- data/lib/rad/html/_helpers/model_helper.rb +17 -17
- data/lib/rad/html/_require.rb +1 -1
- data/lib/rad/html/processors/prepare_flash.rb +3 -3
- data/lib/rad/html/processors/scoped_params.rb +4 -4
- data/lib/rad/http/_http.rb +4 -4
- data/lib/rad/http/_http_adapter.rb +5 -5
- data/lib/rad/http/_request.rb +11 -11
- data/lib/rad/http/_require.rb +8 -8
- data/lib/rad/http/_response.rb +5 -5
- data/lib/rad/http/_support/rack/fixes.rb +3 -3
- data/lib/rad/http/_support/rack/rack_adapter.rb +5 -5
- data/lib/rad/http/processors/evaluate_format.rb +4 -4
- data/lib/rad/http/processors/http_logger.rb +3 -3
- data/lib/rad/http/processors/http_writer.rb +7 -7
- data/lib/rad/http/processors/prepare_params.rb +5 -5
- data/lib/rad/mailer/_letter.rb +1 -1
- data/lib/rad/mailer/_mailer.rb +1 -1
- data/lib/rad/mailer/_mailer_controller.rb +6 -6
- data/lib/rad/mailer/_require.rb +1 -1
- data/lib/rad/mailer/processors/letter_builder.rb +6 -6
- data/lib/rad/profiles/mailer.rb +2 -2
- data/lib/rad/profiles/web.rb +13 -13
- data/lib/rad/remote/processors/remote_caller.rb +10 -10
- data/lib/rad/remote/processors/remote_logger.rb +1 -1
- data/lib/rad/router/_abstract_router.rb +9 -9
- data/lib/rad/router/_alias_router.rb +34 -34
- data/lib/rad/router/_basic_router.rb +12 -12
- data/lib/rad/router/_configurator.rb +6 -6
- data/lib/rad/router/_core_routing_helper.rb +4 -4
- data/lib/rad/router/_object_router.rb +45 -45
- data/lib/rad/router/_require.rb +8 -8
- data/lib/rad/router/_restful_router.rb +25 -25
- data/lib/rad/router/_router.rb +78 -78
- data/lib/rad/router/_simple_router.rb +5 -5
- data/lib/rad/router/processors/router.rb +6 -6
- data/lib/rad/spec/controller.rb +9 -9
- data/lib/rad/spec/environment.rb +7 -7
- data/lib/rad/spec/http.rb +2 -2
- data/lib/rad/spec/http_controller.rb +22 -22
- data/lib/rad/spec/mailer.rb +4 -4
- data/lib/rad/spec/remote.rb +1 -1
- data/lib/rad/spec/router.rb +4 -4
- data/lib/rad/spec/template.rb +2 -2
- data/lib/rad/tasks.rb +2 -2
- data/lib/rad/template/_context.rb +15 -15
- data/lib/rad/template/_relative_path_resolver.rb +1 -1
- data/lib/rad/template/_support/tilt.rb +17 -17
- data/lib/rad/template/_support/tilt_fixes.rb +3 -3
- data/lib/rad/template/_template.rb +47 -47
- data/lib/rad/web/_ajax_helper.rb +4 -4
- data/lib/rad/web/_controller_miscellaneous_helper.rb +5 -5
- data/lib/rad/web/_ensure_no_www.rb +5 -5
- data/lib/rad/web/_protect_from_forgery.rb +18 -18
- data/lib/rad/web/_require.rb +7 -7
- data/lib/rad/web/_router/abstract_routing_helper.rb +4 -4
- data/lib/rad/web/_router/controller_routing_helper.rb +15 -15
- data/lib/rad/web/_router/view_routing_helper.rb +12 -12
- data/readme.md +5 -5
- data/spec/controller/abstract_spec.rb +29 -29
- data/spec/controller/context_spec.rb +32 -32
- data/spec/controller/error_handling_spec.rb +31 -31
- data/spec/controller/helper_spec.rb +13 -13
- data/spec/controller/http_spec.rb +32 -32
- data/spec/controller/render_spec.rb +59 -59
- data/spec/conveyors/conveyors_spec.rb +32 -32
- data/spec/environment/config_spec.rb +6 -6
- data/spec/environment/environment_spec.rb +7 -7
- data/spec/environment/minimal_app_spec.rb +4 -4
- data/spec/environment/standard_app_spec.rb +10 -10
- data/spec/html/basic_html_helper_spec.rb +6 -6
- data/spec/html/form_helper_spec.rb +5 -5
- data/spec/html/javascript_helper_spec.rb +4 -4
- data/spec/html/model_helper_spec.rb +12 -12
- data/spec/html/scoped_params_spec.rb +2 -2
- data/spec/html/spec_helper.rb +3 -3
- data/spec/http/http_spec.rb +9 -9
- data/spec/http/miscellaneous_spec.rb +2 -2
- data/spec/mailer/mail_controller_spec.rb +23 -23
- data/spec/remote/remote_spec.rb +26 -26
- data/spec/router/alias_router_spec.rb +22 -22
- data/spec/router/basic_router_spec.rb +8 -8
- data/spec/router/configurator_spec.rb +4 -4
- data/spec/router/integration_spec.rb +17 -17
- data/spec/router/object_router_spec.rb +47 -47
- data/spec/router/persistent_params_spec.rb +18 -18
- data/spec/router/restful_router_spec.rb +39 -39
- data/spec/router/router_spec.rb +37 -37
- data/spec/router/routing_helper_spec.rb +18 -18
- data/spec/support/filters_spec.rb +11 -13
- data/spec/template/template_spec.rb +43 -45
- data/spec/template/template_spec/views/layout/content_for/content.erb +3 -1
- data/spec/template/template_spec/views/layout/content_for/layout.erb +1 -1
- data/spec/template/tilt_spec.rb +24 -24
- data/spec/web/basic_spec.rb +25 -25
- data/spec/web/controller_routing_helper_spec.rb +26 -26
- data/spec/web/flash_spec.rb +31 -31
- data/spec/web/protect_from_forgery_spec.rb +44 -44
- data/spec/web/spec_helper_spec.rb +16 -16
- data/spec/web/view_routing_helper_spec.rb +31 -31
- metadata +46 -49
- data/lib/rad/_support/callbacks.rb +0 -166
- data/lib/rad/_support/ruby_ext_with_active_support.rb +0 -4
- data/spec/support/callbacks_spec.rb +0 -157
@@ -1,51 +1,51 @@
|
|
1
1
|
class Rad::Router::BasicRouter
|
2
2
|
include Rad::Router::AbstractRouter
|
3
3
|
inject workspace: :workspace, logger: :logger
|
4
|
-
|
4
|
+
|
5
5
|
attr_accessor :skip_routes, :redirect_routes
|
6
|
-
|
6
|
+
|
7
7
|
SKIP_DEFAULT = [/^#{rad.http.url_root}\/(favicon|fs|packaged)/]
|
8
8
|
|
9
|
-
def initialize
|
9
|
+
def initialize
|
10
10
|
self.skip_routes = SKIP_DEFAULT.clone
|
11
11
|
self.redirect_routes = []
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def skip path_regexp
|
15
15
|
path_regexp.must_be.a Regexp
|
16
16
|
skip_routes << path_regexp unless skip_routes.include? path_regexp
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def redirect path_regexp, processor
|
20
20
|
path_regexp.must_be.a Regexp
|
21
21
|
processor.must_be.a String, Proc
|
22
22
|
redirect_routes << [path_regexp, processor] unless redirect_routes.include? [path_regexp, processor]
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def encode *a
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
def decode path, params
|
29
29
|
# skip
|
30
30
|
if skip_routes.any?{|path_regexp| path_regexp =~ path}
|
31
31
|
logger.info "RAD skipping '#{path}'"
|
32
32
|
throw :halt, true
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
# redirect
|
36
36
|
if meta = redirect_routes.find{|path_regexp, processor| path_regexp =~ path}
|
37
|
-
path_regexp, processor = meta
|
37
|
+
path_regexp, processor = meta
|
38
38
|
target = if processor.is_a? String
|
39
39
|
path.sub(path_regexp, processor)
|
40
40
|
else
|
41
41
|
processor.call path
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
response = workspace.response
|
45
45
|
# content_type = Mime[params.format]
|
46
46
|
|
47
47
|
response.set!(
|
48
|
-
status: :redirect,
|
48
|
+
status: :redirect,
|
49
49
|
# content_type: content_type,
|
50
50
|
body: %(<html><body>You are being <a href="#{target.html_escape if target}">redirected</a>.</body></html>)
|
51
51
|
)
|
@@ -63,7 +63,7 @@ Rad::Router::Configurator.class_eval do
|
|
63
63
|
raise "There's no BasicRouter (use config to add it)!" unless basic_router
|
64
64
|
basic_router.skip *a, &b
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
def redirect *a, &b
|
68
68
|
basic_router = @router.routers[:basic_router]
|
69
69
|
raise "There's no BasicRouter (use config to add it)!" unless basic_router
|
@@ -1,19 +1,19 @@
|
|
1
1
|
class Rad::Router::Configurator
|
2
2
|
inject router: :router
|
3
|
-
|
3
|
+
|
4
4
|
def initialize router
|
5
5
|
@router = router
|
6
|
-
end
|
7
|
-
|
6
|
+
end
|
7
|
+
|
8
8
|
def persistent_params *args
|
9
9
|
args.each{|v| router.persistent_params << v}
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
class << self
|
13
13
|
inject router: :router
|
14
|
-
|
14
|
+
|
15
15
|
def configure &block
|
16
16
|
block.call Rad::Router::Configurator.new(router)
|
17
|
-
end
|
17
|
+
end
|
18
18
|
end
|
19
19
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Rad::Router::CoreRoutingHelper
|
2
2
|
inject router: :router
|
3
3
|
|
4
|
-
delegate :url_for, :url_for_path, :persist_params, :persist_params?, :dont_persist_params, to: :router
|
4
|
+
delegate :url_for, :url_for_path, :persist_params, :persist_params?, :dont_persist_params, to: :router
|
5
5
|
|
6
6
|
def default_path options = {}
|
7
7
|
url_for_path rad.router.default_path, options.merge(url_root: false)
|
8
8
|
end
|
9
9
|
|
10
10
|
def return_to_path options = {}
|
11
|
-
dont_persist_params do
|
11
|
+
dont_persist_params do
|
12
12
|
path = params[:_return_to] || workspace.request.session['return_to'] || rad.router.default_path
|
13
13
|
url_for_path path, options.merge(url_root: false)
|
14
14
|
end
|
@@ -21,7 +21,7 @@ module Rad::Router::CoreRoutingHelper
|
|
21
21
|
raise "duplicate :id pameter!" if params.include?(:id) or params.include?('id')
|
22
22
|
params[:id] = args.first.to_param
|
23
23
|
end
|
24
|
-
params
|
24
|
+
params
|
25
25
|
end
|
26
26
|
|
27
27
|
protected
|
@@ -30,7 +30,7 @@ module Rad::Router::CoreRoutingHelper
|
|
30
30
|
if m =~ /path$/
|
31
31
|
params = parse_routing_arguments(*args)
|
32
32
|
klass, method = router.encode_method m, params.include?(:id)
|
33
|
-
|
33
|
+
|
34
34
|
url_for klass, method, params
|
35
35
|
else
|
36
36
|
super m.to_sym, *args, &block
|
@@ -1,75 +1,75 @@
|
|
1
1
|
class Rad::Router::ObjectRouter
|
2
|
-
include Rad::Router::AbstractRouter
|
2
|
+
include Rad::Router::AbstractRouter
|
3
3
|
|
4
4
|
def initialize
|
5
5
|
self.class_to_resource = -> klass {raise ':class_to_resource not specified!'}
|
6
6
|
self.resource_to_class = -> resource {raise ':resource_to_class not specified!'}
|
7
7
|
self.id_to_class = -> id, params {raise ':id_to_class not specified!'}
|
8
|
-
|
8
|
+
|
9
9
|
self.default_class_method = :all
|
10
10
|
self.default_object_method = :show
|
11
|
-
|
11
|
+
|
12
12
|
@cached_class_to_resource, @cached_resource_to_class = {}, {}
|
13
13
|
end
|
14
14
|
|
15
15
|
def configure options = {}
|
16
16
|
raise "can't configure ObjectRouter twice!" if configured?
|
17
17
|
self.configured = true
|
18
|
-
|
18
|
+
|
19
19
|
# parsing options
|
20
20
|
options.validate_options! :default_class_name, :class_to_resource, :resource_to_class, :id_to_class, :url_root, :prefix
|
21
|
-
|
21
|
+
|
22
22
|
self.default_class_name = options[:default_class_name] || raise(':default_class_name not provided!')
|
23
|
-
|
23
|
+
|
24
24
|
self.class_to_resource = options[:class_to_resource] if options.include? :class_to_resource
|
25
25
|
self.resource_to_class = options[:resource_to_class] if options.include? :resource_to_class
|
26
26
|
self.id_to_class = options[:id_to_class] if options.include? :id_to_class
|
27
|
-
|
27
|
+
|
28
28
|
self.url_root = parse_url_root options
|
29
29
|
self.prefix = parse_prefix options
|
30
30
|
end
|
31
31
|
|
32
32
|
def encode klass, method, params
|
33
33
|
return nil unless configured?
|
34
|
-
|
35
|
-
id = params[:id]
|
36
|
-
|
34
|
+
|
35
|
+
id = params[:id]
|
36
|
+
|
37
37
|
# id and resource
|
38
38
|
path = if id
|
39
39
|
raise ":id can be used with :default_class only (#{klass}, '#{id}')!" if klass != default_class
|
40
|
-
|
40
|
+
|
41
41
|
params.delete :id
|
42
|
-
raise ":id must not start from capital letter ('#{id}')!" if id =~ /^[A-Z]/
|
43
|
-
|
42
|
+
raise ":id must not start from capital letter ('#{id}')!" if id =~ /^[A-Z]/
|
43
|
+
|
44
44
|
path = if !method or method == default_object_method
|
45
45
|
"/#{id}"
|
46
46
|
else
|
47
47
|
"/#{id}/#{method}"
|
48
48
|
end
|
49
|
-
else
|
50
|
-
resource = cached_class_to_resource klass
|
51
|
-
raise "no resource for #{klass}!" unless resource
|
49
|
+
else
|
50
|
+
resource = cached_class_to_resource klass
|
51
|
+
raise "no resource for #{klass}!" unless resource
|
52
52
|
raise "resource must start from capital letter (class: #{klass}, resource: '#{resource}')!" unless resource =~ /^[A-Z]/
|
53
53
|
|
54
54
|
path = if !method or method == default_class_method
|
55
55
|
"/#{resource}"
|
56
56
|
else
|
57
57
|
"/#{resource}/#{method}"
|
58
|
-
end
|
58
|
+
end
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
# prefix
|
62
62
|
path = encode_prefix_params! path, params, prefix if prefix
|
63
|
-
|
63
|
+
|
64
64
|
# url_root
|
65
65
|
params[:url_root] = url_root if url_root
|
66
|
-
|
66
|
+
|
67
67
|
[path, params]
|
68
68
|
end
|
69
69
|
|
70
|
-
def decode path, params
|
70
|
+
def decode path, params
|
71
71
|
return nil unless configured?
|
72
|
-
|
72
|
+
|
73
73
|
parts = path[1..-1].split('/')
|
74
74
|
|
75
75
|
# checking 'size' of path
|
@@ -89,13 +89,13 @@ class Rad::Router::ObjectRouter
|
|
89
89
|
# id, resource and method
|
90
90
|
if parts.first =~ /^[A-Z]/
|
91
91
|
resource, method = parts
|
92
|
-
method ||= default_class_method
|
92
|
+
method ||= default_class_method
|
93
93
|
method = method.to_sym
|
94
|
-
|
94
|
+
|
95
95
|
raise "resource must be in plural form ('#{resource}')!" unless resource.pluralize == resource
|
96
|
-
|
97
|
-
klass = cached_resource_to_class resource
|
98
|
-
|
96
|
+
|
97
|
+
klass = cached_resource_to_class resource
|
98
|
+
|
99
99
|
raise "no class for '#{resource}' resource!" unless klass
|
100
100
|
else
|
101
101
|
id, method = parts
|
@@ -103,35 +103,35 @@ class Rad::Router::ObjectRouter
|
|
103
103
|
method ||= default_object_method
|
104
104
|
method = method.to_sym
|
105
105
|
|
106
|
-
# sometimes we need params inside of :id_to_class block,
|
106
|
+
# sometimes we need params inside of :id_to_class block,
|
107
107
|
# for example to find out Space before finding Item
|
108
108
|
klass = id_to_class.call id, params
|
109
|
-
|
109
|
+
|
110
110
|
raise "no class for '#{id}' id!" unless klass
|
111
|
-
|
111
|
+
|
112
112
|
params[:id] = id
|
113
|
-
end
|
113
|
+
end
|
114
114
|
|
115
115
|
klass.must_be.a Class
|
116
116
|
return klass, method, params
|
117
|
-
end
|
118
|
-
|
119
|
-
def encode_method route_method, has_id
|
117
|
+
end
|
118
|
+
|
119
|
+
def encode_method route_method, has_id
|
120
120
|
return nil unless configured?
|
121
|
-
|
121
|
+
|
122
122
|
token = route_method.sub(/_?path$/, '')
|
123
123
|
|
124
124
|
if has_id
|
125
125
|
method = token.empty? ? default_object_method : token
|
126
126
|
method = method.to_sym
|
127
|
-
|
127
|
+
|
128
128
|
return [default_class, method]
|
129
129
|
else
|
130
130
|
token = route_method.sub(/_path$/, '')
|
131
131
|
parts = token.split '_'
|
132
132
|
resource = parts.pop
|
133
133
|
method = parts.empty? ? default_class_method : parts.join('_')
|
134
|
-
|
134
|
+
|
135
135
|
# class
|
136
136
|
resource = resource.pluralize.camelize
|
137
137
|
klass = cached_resource_to_class resource
|
@@ -140,7 +140,7 @@ class Rad::Router::ObjectRouter
|
|
140
140
|
|
141
141
|
# method
|
142
142
|
method = method.to_sym if method
|
143
|
-
|
143
|
+
|
144
144
|
return [klass, method]
|
145
145
|
end
|
146
146
|
end
|
@@ -148,13 +148,13 @@ class Rad::Router::ObjectRouter
|
|
148
148
|
protected
|
149
149
|
attr_accessor :class_to_resource, :resource_to_class, :id_to_class, :default_class_method, :default_object_method,
|
150
150
|
:prefix, :url_root, :configured, :default_class_name
|
151
|
-
|
151
|
+
|
152
152
|
def default_class
|
153
153
|
@default_class ||= default_class_name.constantize
|
154
154
|
end
|
155
|
-
|
155
|
+
|
156
156
|
def configured?; !!@configured end
|
157
|
-
|
157
|
+
|
158
158
|
def cached_class_to_resource klass
|
159
159
|
unless @cached_class_to_resource.include? klass
|
160
160
|
resource = class_to_resource.call klass
|
@@ -164,7 +164,7 @@ class Rad::Router::ObjectRouter
|
|
164
164
|
end
|
165
165
|
@cached_class_to_resource[klass]
|
166
166
|
end
|
167
|
-
|
167
|
+
|
168
168
|
def cached_resource_to_class resource
|
169
169
|
unless @cached_resource_to_class.include? resource
|
170
170
|
klass = resource_to_class.call resource
|
@@ -174,11 +174,11 @@ class Rad::Router::ObjectRouter
|
|
174
174
|
end
|
175
175
|
end
|
176
176
|
|
177
|
-
|
177
|
+
|
178
178
|
Rad::Router::Configurator.class_eval do
|
179
179
|
def objects *args, &block
|
180
|
-
object_router = @router.routers[:object_router]
|
181
|
-
raise "There's no ObjectRouter (use config to add it)!" unless object_router
|
180
|
+
object_router = @router.routers[:object_router]
|
181
|
+
raise "There's no ObjectRouter (use config to add it)!" unless object_router
|
182
182
|
object_router.configure *args, &block
|
183
183
|
end
|
184
184
|
end
|
data/lib/rad/router/_require.rb
CHANGED
@@ -1,31 +1,31 @@
|
|
1
1
|
class Rad::Router
|
2
2
|
end
|
3
3
|
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# Libraries
|
6
|
-
#
|
6
|
+
#
|
7
7
|
%w(
|
8
8
|
_configurator
|
9
9
|
_simple_router
|
10
10
|
_router
|
11
|
-
_default_format_processor
|
12
|
-
|
11
|
+
_default_format_processor
|
12
|
+
|
13
13
|
_core_routing_helper
|
14
14
|
).each{|f| require "rad/router/#{f}"}
|
15
15
|
|
16
16
|
|
17
|
-
#
|
17
|
+
#
|
18
18
|
# Routers
|
19
|
-
#
|
19
|
+
#
|
20
20
|
%w(
|
21
21
|
_abstract_router
|
22
22
|
_basic_router
|
23
23
|
_alias_router
|
24
24
|
_restful_router
|
25
|
-
_object_router
|
25
|
+
_object_router
|
26
26
|
).each{|f| require "rad/router/#{f}"}
|
27
27
|
|
28
28
|
|
29
|
-
#
|
29
|
+
#
|
30
30
|
# Helpers
|
31
31
|
#
|
@@ -9,24 +9,24 @@ class Rad::Router::RestfulRouter
|
|
9
9
|
# parsing options
|
10
10
|
options.validate_options! :class_name, :url_root, :prefix
|
11
11
|
resource = resource.to_s
|
12
|
-
resource.must_not =~ /\//
|
12
|
+
resource.must_not =~ /\//
|
13
13
|
raise "resource should be in plural form!" unless resource.pluralize == resource
|
14
14
|
class_name = options.delete(:class_name) || raise("no class name!")
|
15
15
|
class_name.must_be.a String
|
16
16
|
url_root = parse_url_root options
|
17
17
|
prefix = parse_prefix options
|
18
|
-
|
18
|
+
|
19
19
|
# logic
|
20
20
|
meta = Meta.new
|
21
21
|
meta.merge!(
|
22
|
-
class_name: class_name,
|
23
|
-
resource: resource,
|
24
|
-
url_root: url_root,
|
22
|
+
class_name: class_name,
|
23
|
+
resource: resource,
|
24
|
+
url_root: url_root,
|
25
25
|
prefix: prefix
|
26
|
-
)
|
27
|
-
|
26
|
+
)
|
27
|
+
|
28
28
|
resources.must_not.include(resource.pluralize)
|
29
|
-
class_names.must_not.include(class_name)
|
29
|
+
class_names.must_not.include(class_name)
|
30
30
|
resources[resource.pluralize] = meta
|
31
31
|
resources[resource.singularize] = meta
|
32
32
|
class_names[class_name] = meta
|
@@ -35,7 +35,7 @@ class Rad::Router::RestfulRouter
|
|
35
35
|
def encode klass, method, params
|
36
36
|
meta = class_names[klass.name]
|
37
37
|
return nil unless meta
|
38
|
-
|
38
|
+
|
39
39
|
path = if id = params.delete(:id)
|
40
40
|
"/#{meta[:resource]}/#{id}/#{method}"
|
41
41
|
else
|
@@ -44,16 +44,16 @@ class Rad::Router::RestfulRouter
|
|
44
44
|
|
45
45
|
prefix = meta[:prefix]
|
46
46
|
path = encode_prefix_params! path, params, prefix if prefix
|
47
|
-
|
47
|
+
|
48
48
|
url_root = meta[:url_root]
|
49
49
|
params[:url_root] = url_root if url_root
|
50
|
-
|
50
|
+
|
51
51
|
[path, params]
|
52
52
|
end
|
53
53
|
|
54
54
|
def decode path, params
|
55
55
|
decode_as_object_resource(path, params) || decode_as_static_resource(path, params)
|
56
|
-
end
|
56
|
+
end
|
57
57
|
|
58
58
|
def encode_method route_method, has_id
|
59
59
|
token = route_method.sub(/_path$/, '')
|
@@ -64,52 +64,52 @@ class Rad::Router::RestfulRouter
|
|
64
64
|
return meta.get_class, route_method[0..(i-2)].to_sym
|
65
65
|
end
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
return nil
|
69
69
|
end
|
70
70
|
|
71
71
|
protected
|
72
72
|
attr_accessor :resources, :class_names
|
73
|
-
|
73
|
+
|
74
74
|
def decode_as_object_resource path, params
|
75
75
|
parts = path[1..-1].split('/')
|
76
76
|
return nil unless parts.size >= 3
|
77
|
-
|
77
|
+
|
78
78
|
method, id, resource = parts.pop.to_sym, parts.pop, parts.pop
|
79
79
|
meta = resources[resource]
|
80
80
|
return nil unless meta
|
81
|
-
|
81
|
+
|
82
82
|
# url_root
|
83
83
|
url_root = meta[:url_root]
|
84
|
-
return nil if url_root and "/#{parts.shift}" != url_root
|
85
|
-
|
84
|
+
return nil if url_root and "/#{parts.shift}" != url_root
|
85
|
+
|
86
86
|
# prefix
|
87
87
|
return nil if parts.size != (meta[:prefix] ? meta[:prefix].size : 0)
|
88
88
|
prefix = meta[:prefix]
|
89
89
|
decode_prefix_params! parts, params, prefix if prefix
|
90
|
-
|
90
|
+
|
91
91
|
params[:id] = id
|
92
92
|
|
93
93
|
return meta.get_class, method, params
|
94
94
|
end
|
95
|
-
|
95
|
+
|
96
96
|
def decode_as_static_resource path, params
|
97
|
-
parts = path[1..-1].split('/')
|
97
|
+
parts = path[1..-1].split('/')
|
98
98
|
return nil unless parts.size >= 2
|
99
|
-
|
99
|
+
|
100
100
|
# method & class
|
101
101
|
method, resource = parts.pop.to_sym, parts.pop
|
102
102
|
meta = resources[resource]
|
103
103
|
return nil unless meta
|
104
|
-
|
104
|
+
|
105
105
|
# url_root
|
106
106
|
url_root = meta[:url_root]
|
107
|
-
return nil if url_root and "/#{parts.shift}" != url_root
|
107
|
+
return nil if url_root and "/#{parts.shift}" != url_root
|
108
108
|
|
109
109
|
# prefix
|
110
110
|
return nil if parts.size != (meta[:prefix] ? meta[:prefix].size : 0)
|
111
111
|
prefix = meta[:prefix]
|
112
|
-
decode_prefix_params! parts, params, prefix if prefix
|
112
|
+
decode_prefix_params! parts, params, prefix if prefix
|
113
113
|
|
114
114
|
return meta.get_class, method, params
|
115
115
|
end
|