rad_core 0.2.6 → 0.2.7
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/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
|