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.
Files changed (167) hide show
  1. data/Rakefile +2 -2
  2. data/bin/rad +20 -25
  3. data/lib/components/config.rb +1 -1
  4. data/lib/components/configurators.rb +2 -2
  5. data/lib/components/controller.rb +2 -2
  6. data/lib/components/conveyors.rb +2 -2
  7. data/lib/components/environment.rb +1 -1
  8. data/lib/components/environment.yml +28 -28
  9. data/lib/components/flash.rb +1 -1
  10. data/lib/components/html.rb +1 -1
  11. data/lib/components/http.rb +1 -1
  12. data/lib/components/http.yml +1 -1
  13. data/lib/components/logger.rb +2 -2
  14. data/lib/components/mailer.rb +2 -2
  15. data/lib/components/remote.rb +1 -1
  16. data/lib/components/router.rb +3 -3
  17. data/lib/components/template.rb +2 -2
  18. data/lib/components/web.rb +3 -3
  19. data/lib/rad.rb +1 -1
  20. data/lib/rad/_support/active_support.rb +7 -7
  21. data/lib/rad/_support/active_support/locales/ru/actionview.yml +8 -8
  22. data/lib/rad/_support/active_support/locales/ru/activesupport.yml +4 -4
  23. data/lib/rad/_support/active_support/locales/ru/datetime.yml +5 -5
  24. data/lib/rad/_support/active_support/time.rb +2 -2
  25. data/lib/rad/_support/addressable.rb +6 -6
  26. data/lib/rad/_support/class_loader.rb +1 -1
  27. data/lib/rad/_support/extensions.rb +5 -5
  28. data/lib/rad/_support/filters.rb +13 -13
  29. data/lib/rad/_support/hacks_and_fixes.rb +5 -5
  30. data/lib/rad/_support/mime.rb +4 -4
  31. data/lib/rad/_support/module.rb +11 -11
  32. data/lib/rad/_support/require.rb +5 -5
  33. data/lib/rad/_support/rson.rb +4 -4
  34. data/lib/rad/_support/string.rb +9 -9
  35. data/lib/rad/cli/helper.rb +5 -5
  36. data/lib/rad/configurators/_require.rb +2 -2
  37. data/lib/rad/configurators/abstract.rb +5 -5
  38. data/lib/rad/configurators/web.rb +8 -8
  39. data/lib/rad/controller/_abstract.rb +15 -14
  40. data/lib/rad/controller/_abstract/miscellaneous.rb +5 -5
  41. data/lib/rad/controller/_abstract/render.rb +40 -40
  42. data/lib/rad/controller/_abstract/responder.rb +1 -1
  43. data/lib/rad/controller/_context.rb +1 -1
  44. data/lib/rad/controller/_http.rb +11 -11
  45. data/lib/rad/controller/_require.rb +6 -6
  46. data/lib/rad/controller/processors/controller_caller.rb +3 -3
  47. data/lib/rad/controller/processors/controller_error_handling.rb +14 -14
  48. data/lib/rad/controller/processors/controller_logger.rb +1 -1
  49. data/lib/rad/conveyors/_conveyor.rb +9 -9
  50. data/lib/rad/conveyors/_conveyors.rb +4 -4
  51. data/lib/rad/conveyors/_params.rb +5 -5
  52. data/lib/rad/conveyors/_processor.rb +2 -2
  53. data/lib/rad/conveyors/_workspace.rb +5 -5
  54. data/lib/rad/conveyors/processors/conveyor_logger.rb +3 -3
  55. data/lib/rad/environment/_config.rb +4 -4
  56. data/lib/rad/environment/_environment.rb +10 -10
  57. data/lib/rad/environment/_files_helper.rb +5 -5
  58. data/lib/rad/environment/_logger.rb +9 -9
  59. data/lib/rad/environment/_require.rb +4 -4
  60. data/lib/rad/gems.rb +14 -14
  61. data/lib/rad/html/_flash.rb +5 -5
  62. data/lib/rad/html/_helpers/basic_html_helper.rb +12 -12
  63. data/lib/rad/html/_helpers/form_helper.rb +19 -19
  64. data/lib/rad/html/_helpers/javascript_helper.rb +6 -6
  65. data/lib/rad/html/_helpers/model_helper.rb +17 -17
  66. data/lib/rad/html/_require.rb +1 -1
  67. data/lib/rad/html/processors/prepare_flash.rb +3 -3
  68. data/lib/rad/html/processors/scoped_params.rb +4 -4
  69. data/lib/rad/http/_http.rb +4 -4
  70. data/lib/rad/http/_http_adapter.rb +5 -5
  71. data/lib/rad/http/_request.rb +11 -11
  72. data/lib/rad/http/_require.rb +8 -8
  73. data/lib/rad/http/_response.rb +5 -5
  74. data/lib/rad/http/_support/rack/fixes.rb +3 -3
  75. data/lib/rad/http/_support/rack/rack_adapter.rb +5 -5
  76. data/lib/rad/http/processors/evaluate_format.rb +4 -4
  77. data/lib/rad/http/processors/http_logger.rb +3 -3
  78. data/lib/rad/http/processors/http_writer.rb +7 -7
  79. data/lib/rad/http/processors/prepare_params.rb +5 -5
  80. data/lib/rad/mailer/_letter.rb +1 -1
  81. data/lib/rad/mailer/_mailer.rb +1 -1
  82. data/lib/rad/mailer/_mailer_controller.rb +6 -6
  83. data/lib/rad/mailer/_require.rb +1 -1
  84. data/lib/rad/mailer/processors/letter_builder.rb +6 -6
  85. data/lib/rad/profiles/mailer.rb +2 -2
  86. data/lib/rad/profiles/web.rb +13 -13
  87. data/lib/rad/remote/processors/remote_caller.rb +10 -10
  88. data/lib/rad/remote/processors/remote_logger.rb +1 -1
  89. data/lib/rad/router/_abstract_router.rb +9 -9
  90. data/lib/rad/router/_alias_router.rb +34 -34
  91. data/lib/rad/router/_basic_router.rb +12 -12
  92. data/lib/rad/router/_configurator.rb +6 -6
  93. data/lib/rad/router/_core_routing_helper.rb +4 -4
  94. data/lib/rad/router/_object_router.rb +45 -45
  95. data/lib/rad/router/_require.rb +8 -8
  96. data/lib/rad/router/_restful_router.rb +25 -25
  97. data/lib/rad/router/_router.rb +78 -78
  98. data/lib/rad/router/_simple_router.rb +5 -5
  99. data/lib/rad/router/processors/router.rb +6 -6
  100. data/lib/rad/spec/controller.rb +9 -9
  101. data/lib/rad/spec/environment.rb +7 -7
  102. data/lib/rad/spec/http.rb +2 -2
  103. data/lib/rad/spec/http_controller.rb +22 -22
  104. data/lib/rad/spec/mailer.rb +4 -4
  105. data/lib/rad/spec/remote.rb +1 -1
  106. data/lib/rad/spec/router.rb +4 -4
  107. data/lib/rad/spec/template.rb +2 -2
  108. data/lib/rad/tasks.rb +2 -2
  109. data/lib/rad/template/_context.rb +15 -15
  110. data/lib/rad/template/_relative_path_resolver.rb +1 -1
  111. data/lib/rad/template/_support/tilt.rb +17 -17
  112. data/lib/rad/template/_support/tilt_fixes.rb +3 -3
  113. data/lib/rad/template/_template.rb +47 -47
  114. data/lib/rad/web/_ajax_helper.rb +4 -4
  115. data/lib/rad/web/_controller_miscellaneous_helper.rb +5 -5
  116. data/lib/rad/web/_ensure_no_www.rb +5 -5
  117. data/lib/rad/web/_protect_from_forgery.rb +18 -18
  118. data/lib/rad/web/_require.rb +7 -7
  119. data/lib/rad/web/_router/abstract_routing_helper.rb +4 -4
  120. data/lib/rad/web/_router/controller_routing_helper.rb +15 -15
  121. data/lib/rad/web/_router/view_routing_helper.rb +12 -12
  122. data/readme.md +5 -5
  123. data/spec/controller/abstract_spec.rb +29 -29
  124. data/spec/controller/context_spec.rb +32 -32
  125. data/spec/controller/error_handling_spec.rb +31 -31
  126. data/spec/controller/helper_spec.rb +13 -13
  127. data/spec/controller/http_spec.rb +32 -32
  128. data/spec/controller/render_spec.rb +59 -59
  129. data/spec/conveyors/conveyors_spec.rb +32 -32
  130. data/spec/environment/config_spec.rb +6 -6
  131. data/spec/environment/environment_spec.rb +7 -7
  132. data/spec/environment/minimal_app_spec.rb +4 -4
  133. data/spec/environment/standard_app_spec.rb +10 -10
  134. data/spec/html/basic_html_helper_spec.rb +6 -6
  135. data/spec/html/form_helper_spec.rb +5 -5
  136. data/spec/html/javascript_helper_spec.rb +4 -4
  137. data/spec/html/model_helper_spec.rb +12 -12
  138. data/spec/html/scoped_params_spec.rb +2 -2
  139. data/spec/html/spec_helper.rb +3 -3
  140. data/spec/http/http_spec.rb +9 -9
  141. data/spec/http/miscellaneous_spec.rb +2 -2
  142. data/spec/mailer/mail_controller_spec.rb +23 -23
  143. data/spec/remote/remote_spec.rb +26 -26
  144. data/spec/router/alias_router_spec.rb +22 -22
  145. data/spec/router/basic_router_spec.rb +8 -8
  146. data/spec/router/configurator_spec.rb +4 -4
  147. data/spec/router/integration_spec.rb +17 -17
  148. data/spec/router/object_router_spec.rb +47 -47
  149. data/spec/router/persistent_params_spec.rb +18 -18
  150. data/spec/router/restful_router_spec.rb +39 -39
  151. data/spec/router/router_spec.rb +37 -37
  152. data/spec/router/routing_helper_spec.rb +18 -18
  153. data/spec/support/filters_spec.rb +11 -13
  154. data/spec/template/template_spec.rb +43 -45
  155. data/spec/template/template_spec/views/layout/content_for/content.erb +3 -1
  156. data/spec/template/template_spec/views/layout/content_for/layout.erb +1 -1
  157. data/spec/template/tilt_spec.rb +24 -24
  158. data/spec/web/basic_spec.rb +25 -25
  159. data/spec/web/controller_routing_helper_spec.rb +26 -26
  160. data/spec/web/flash_spec.rb +31 -31
  161. data/spec/web/protect_from_forgery_spec.rb +44 -44
  162. data/spec/web/spec_helper_spec.rb +16 -16
  163. data/spec/web/view_routing_helper_spec.rb +31 -31
  164. metadata +46 -49
  165. data/lib/rad/_support/callbacks.rb +0 -166
  166. data/lib/rad/_support/ruby_ext_with_active_support.rb +0 -4
  167. data/spec/support/callbacks_spec.rb +0 -157
@@ -2,12 +2,12 @@ rad.http
2
2
 
3
3
  class HttpLogger < Rad::Conveyors::Processor
4
4
  def call
5
- if workspace.request? and workspace.params?
6
- method, path, ip, time, format = workspace.request.request_method, workspace.path,
5
+ if workspace.request? and workspace.params?
6
+ method, path, ip, time, format = workspace.request.request_method, workspace.path,
7
7
  workspace.request.ip, (workspace.start_time || Time.now), workspace.params.format
8
8
  logger.info "RAD started '#{path}' as '#{format}' (for #{ip} at #{time.to_s} with #{method})"
9
9
  end
10
-
10
+
11
11
  next_processor.call
12
12
  end
13
13
  end
@@ -1,18 +1,18 @@
1
1
  rad.http
2
2
 
3
- class HttpWriter < Rad::Conveyors::Processor
3
+ class HttpWriter < Rad::Conveyors::Processor
4
4
  def call
5
5
  response = workspace.response.must_be.defined
6
-
6
+
7
7
  begin
8
8
  next_processor.call
9
9
 
10
10
  response.body = workspace.content if response.body.blank? and workspace.content?
11
- response.content_type ||= Mime[(workspace.params.format if workspace.params?) || rad.http.default_format]
12
- rescue StandardError => e
11
+ response.content_type ||= Mime[(workspace.params.format if workspace.params?) || rad.http.default_format]
12
+ rescue StandardError => e
13
13
  raise e if rad.test?
14
-
15
- response.clear
14
+
15
+ response.clear
16
16
  if workspace.params.format? and workspace.params.format == 'json'
17
17
  response.body = {error: (rad.production? ? "Internal error!" : e.message)}.to_json
18
18
  response.content_type = Mime.json
@@ -20,7 +20,7 @@ class HttpWriter < Rad::Conveyors::Processor
20
20
  response.body = (rad.production? ? "Internal error!" : e.message)
21
21
  response.content_type = Mime.text
22
22
  end
23
-
23
+
24
24
  logger.error e
25
25
  logger.info "\n"
26
26
  end
@@ -1,12 +1,12 @@
1
1
  rad.http
2
2
 
3
- #
3
+ #
4
4
  # Outdated, Rack does this by themself, keeping it just in case.
5
- #
5
+ #
6
6
  class PrepareParams < Rad::Conveyors::Processor
7
- def call
8
- workspace.env.must_be.defined
9
- workspace.request = Rad::Http::Request.new(workspace.env)
7
+ def call
8
+ workspace.env.must_be.defined
9
+ workspace.request = Rad::Http::Request.new(workspace.env)
10
10
  workspace.path = workspace.request.path
11
11
  params = workspace.params = Rad::Conveyors::Params.new(workspace.request.params)
12
12
 
@@ -13,7 +13,7 @@ class Rad::Mailer::Letter
13
13
  from || raise("letter :from not specified!")
14
14
  to || raise("letter :to not specified!")
15
15
  subject || raise("letter :subject not specified!")
16
- body || raise("letter :body not specified!")
16
+ body || raise("letter :body not specified!")
17
17
  end
18
18
 
19
19
  def deliver
@@ -1,6 +1,6 @@
1
1
  class Rad::Mailer
2
2
  inject logger: :logger
3
-
3
+
4
4
  def deliver letter
5
5
  mail = Mail.new letter.to_h
6
6
  if rad.development?
@@ -4,9 +4,9 @@ module Rad::Mailer::MailerController
4
4
  attr_accessor :from, :to, :subject, :body
5
5
 
6
6
  module ClassMethods
7
- protected
7
+ protected
8
8
  inject conveyors: :conveyors
9
-
9
+
10
10
  def method_missing m, *args, &block
11
11
  mail_controller = self.new
12
12
  if mail_controller.respond_to? m
@@ -14,13 +14,13 @@ module Rad::Mailer::MailerController
14
14
  else
15
15
  super
16
16
  end
17
- end
18
-
17
+ end
18
+
19
19
  def build_letter mail_controller, m, *args
20
20
  conveyors.mail.must_be.present
21
-
21
+
22
22
  # copying parameter from current workspace if any
23
- # mail_workspace = rad.workspace? ? rad.workspace.clone : {}
23
+ # mail_workspace = rad.workspace? ? rad.workspace.clone : {}
24
24
  # mail_workspace.merge!(
25
25
  # controller: mail_controller,
26
26
  # method_name: m,
@@ -2,6 +2,6 @@ require 'mail'
2
2
 
3
3
  %w(
4
4
  _mailer
5
- _letter
5
+ _letter
6
6
  _mailer_controller
7
7
  ).each{|f| require "rad/mailer/#{f}"}
@@ -1,7 +1,7 @@
1
1
  rad.mailer
2
2
 
3
3
  class LetterBuilder < Rad::Conveyors::Processor
4
- def call
4
+ def call
5
5
  # prepare
6
6
  controller = workspace.controller.must_be.present
7
7
  raise "The controller #{controller} must be a Rad::Mailer::MailerController!" unless controller.is_a? Rad::Mailer::MailerController
@@ -9,10 +9,10 @@ class LetterBuilder < Rad::Conveyors::Processor
9
9
 
10
10
  # call
11
11
  controller.set! params: workspace.params, action_name: workspace.action_name
12
- content = controller.call action_name, *workspace.arguments
13
-
12
+ content = controller.call action_name, *workspace.arguments
13
+
14
14
  controller.body = content unless content.blank?
15
-
15
+
16
16
  # letter
17
17
  workspace.letter = ::Rad::Mailer::Letter.new(
18
18
  from: controller.from,
@@ -21,8 +21,8 @@ class LetterBuilder < Rad::Conveyors::Processor
21
21
  body: controller.body
22
22
  )
23
23
  workspace.letter.validate!
24
-
24
+
25
25
  next_processor.call if next_processor
26
- end
26
+ end
27
27
 
28
28
  end
@@ -1,5 +1,5 @@
1
1
  rad.conveyors.mail do |mail|
2
2
  mail.use Rad::Mailer::Processors::LetterBuilder
3
-
4
- mail.build!
3
+
4
+ mail.build!
5
5
  end
@@ -1,22 +1,22 @@
1
- #
1
+ #
2
2
  # Router
3
- #
3
+ #
4
4
  rad.router.routers = [
5
5
  [:alias_router, Rad::Router::AliasRouter.new],
6
- [:basic_router, Rad::Router::BasicRouter.new],
6
+ [:basic_router, Rad::Router::BasicRouter.new],
7
7
  [:restful_router, Rad::Router::RestfulRouter.new],
8
8
  [:object_router, Rad::Router::ObjectRouter.new]
9
9
  ]
10
10
 
11
11
 
12
- #
12
+ #
13
13
  # Conveyors
14
- #
14
+ #
15
15
  rad.conveyors.web do |web|
16
- # conveyor
16
+ # conveyor
17
17
  web.use Rad::Conveyors::Processors::ConveyorLogger
18
18
 
19
- # http
19
+ # http
20
20
  web.use Rad::Http::Processors::HttpWriter
21
21
  web.use Rad::Http::Processors::PrepareParams
22
22
  web.use Rad::Http::Processors::EvaluateFormat
@@ -41,7 +41,7 @@ rad.conveyors.web do |web|
41
41
  # router
42
42
  web.use Rad::Router::Processors::Router, :class, :method_name
43
43
 
44
- # controller
44
+ # controller
45
45
  web.use Rad::Controller::Processors::ControllerLogger
46
46
  web.use Rad::Controller::Processors::ControllerCaller
47
47
 
@@ -49,20 +49,20 @@ rad.conveyors.web do |web|
49
49
  end
50
50
 
51
51
 
52
- #
52
+ #
53
53
  # RackAdapter
54
- #
54
+ #
55
55
  rad.http.stack.push(-> builder {
56
56
  # CommonLogger, ShowExceptions, Lint
57
57
  builder.use Rack::Lint if rad.development?
58
-
58
+
59
59
  # Static Files
60
60
  if rad.http.static? and rad.http.public_path and defined?(Rad::Assets) and rad.development?
61
- filters = /^\/.*?\/static\/|^\/static\/|\/favicon/
61
+ filters = /^\/.*?\/static\/|^\/static\/|^\/fs\/|\/favicon/
62
62
  builder.use Rad::Assets::StaticFiles, filters
63
63
  end
64
64
 
65
- # use Rack::Session::Cookie, key: 'rack.session', domain: 'foo.com', path: '/', expire_after: 2592000, secret: 'change_me'
65
+ # use Rack::Session::Cookie, key: 'rack.session', domain: 'foo.com', path: '/', expire_after: 2592000, secret: 'change_me'
66
66
  builder.use Rack::Session::Cookie, rad.http.session.stringify_keys if rad.http.session
67
67
 
68
68
  # builder.use Rack::CommonLogger
@@ -3,19 +3,19 @@ rad.remote
3
3
  class RemoteCaller < Rad::Conveyors::Processor
4
4
  # TODO2 :remote isn't registered with rad[
5
5
  inject remote: :remote
6
-
6
+
7
7
  def initialize next_processor, result_variable = 'content'
8
8
  super(next_processor)
9
9
  @result_variable = result_variable
10
10
  end
11
-
12
- def call
11
+
12
+ def call
13
13
  return next_processor.call unless workspace.class?
14
-
14
+
15
15
  # prepare
16
16
  klass = workspace.class
17
17
  raise "The remote class #{klass} must be a Rad::Remote::RemoteController!" unless klass.is? Rad::Remote::RemoteController
18
- workspace.remote_object = klass.new
18
+ workspace.remote_object = klass.new
19
19
  method = workspace.method_name
20
20
 
21
21
  # call
@@ -23,26 +23,26 @@ class RemoteCaller < Rad::Conveyors::Processor
23
23
  result = workspace.remote_object.run_callbacks :action, method: method do
24
24
  workspace.remote_object.send method
25
25
  end
26
-
26
+
27
27
  ensure_correct_result! result
28
- workspace.remote_result = result
28
+ workspace.remote_result = result
29
29
 
30
30
  next_processor.call
31
31
 
32
32
  # write JSON as a result if format is JSON and no one else filled it
33
33
  if workspace[@result_variable].blank?
34
34
  workspace[@result_variable] = workspace.remote_result.to_json
35
- end
35
+ end
36
36
  rescue StandardError => e
37
37
  raise e if !workspace.params.format == 'json' or rad.test?
38
-
38
+
39
39
  workspace[@result_variable] = {error: e.message}.to_json
40
40
 
41
41
  logger.error e
42
42
  logger.info "\n"
43
43
  end
44
44
  end
45
-
45
+
46
46
  private
47
47
  def ensure_correct_result! result
48
48
  unless result.rson?
@@ -3,7 +3,7 @@ rad.remote
3
3
  class RemoteLogger < Rad::Conveyors::Processor
4
4
  def call
5
5
  next_processor.call
6
-
6
+
7
7
  if (klass = workspace.class) and (method = workspace.method_name)
8
8
  logger.info "RAD processing #{klass.name}.#{method} with #{workspace.params.inspect}"
9
9
  end
@@ -1,5 +1,5 @@
1
1
  module Rad::Router::AbstractRouter
2
-
2
+
3
3
  class Meta < Hash
4
4
  def get_class
5
5
  @klass ||= self[:class_name].constantize
@@ -13,36 +13,36 @@ module Rad::Router::AbstractRouter
13
13
  url_root = nil if url_root == '/'
14
14
  url_root
15
15
  end
16
-
17
- def parse_prefix options
16
+
17
+ def parse_prefix options
18
18
  prefix = Array(options[:prefix])
19
19
  prefix.empty? ? nil : prefix
20
20
  end
21
21
 
22
22
  def encode_prefix_params! path, params, prefix
23
23
  parts = []
24
- prefix.each do |name|
24
+ prefix.each do |name|
25
25
  value = params.delete(name) || (rad.workspace? && rad.workspace.params[name])
26
26
  raise "not provided :#{name} prefix!" unless value
27
27
  parts << value.to_param.to_s.url_escape
28
28
  end
29
29
  "/#{parts.join('/')}#{path}"
30
30
  end
31
-
31
+
32
32
  # def encode_url_root! path, meta
33
33
  # if url_root = meta[:url_root]
34
- # "#{url_root}#{path}"
34
+ # "#{url_root}#{path}"
35
35
  # else
36
36
  # path
37
37
  # end
38
38
  # end
39
-
39
+
40
40
  def decode_prefix_params! parts, params, prefix
41
- prefix.each do |name|
41
+ prefix.each do |name|
42
42
  params[name] = parts.shift || raise("not provided :#{name} prefix!")
43
43
  end
44
44
  end
45
-
45
+
46
46
  def decode_url_root! parts, url_root
47
47
  raise 'not implemented'
48
48
  # raise "invalid :url_root!" if meta[:url_root] and meta[:url_root] != "/#{parts.join('/')}"
@@ -4,64 +4,64 @@ class Rad::Router::AliasRouter
4
4
  class TreeHash < Hash
5
5
  attr_accessor :meta
6
6
  end
7
-
7
+
8
8
  def initialize
9
9
  @route_methods, @paths, @classes = {}, TreeHash.new, {}
10
10
  end
11
11
 
12
- def add als, options = {}
13
- # parsing options
12
+ def add als, options = {}
13
+ # parsing options
14
14
  # als, options = als.to_s, options.to_openobject
15
15
  options.validate_options! :class_name, :method, :url_root, :prefix
16
-
16
+
17
17
  als = als.to_s
18
18
  als.must =~ /^\//
19
19
  class_name = options.delete(:class_name) || raise("no class name!")
20
20
  class_name.must_be.a String
21
21
  method = options.delete(:method) || raise("no method!")
22
- method = method.must_be.a Symbol
22
+ method = method.must_be.a Symbol
23
23
  url_root = parse_url_root options
24
24
  prefix = parse_prefix options
25
-
25
+
26
26
  raise "you can't use '/' alias with :url_root!" if als == '/' and url_root
27
-
28
- # logic
27
+
28
+ # logic
29
29
  meta = Meta.new
30
30
  meta.merge!(
31
- class_name: class_name,
31
+ class_name: class_name,
32
32
  method: method,
33
- path: als,
34
- url_root: url_root,
33
+ path: als,
34
+ url_root: url_root,
35
35
  prefix: prefix
36
36
  )
37
-
38
- route_methods["#{als[1..-1]}_path"] = meta
39
-
37
+
38
+ route_methods["#{als[1..-1]}_path"] = meta
39
+
40
40
  (classes[class_name] ||= {})[method] = meta
41
-
42
-
41
+
42
+
43
43
  parts = als[1..-1].split('/')
44
44
  parts << '' if parts.empty?
45
-
45
+
46
46
  tree_iterator = paths
47
47
  parts.reverse.each do |part|
48
- tree_iterator = (tree_iterator[part] ||= TreeHash.new)
48
+ tree_iterator = (tree_iterator[part] ||= TreeHash.new)
49
49
  raise "alias '#{als}' conflicted with another alias ('#{tree_iterator.meta[:path]}')!" if tree_iterator.meta
50
50
  end
51
51
  tree_iterator.meta = meta
52
52
  end
53
53
 
54
- def encode klass, method, params
54
+ def encode klass, method, params
55
55
  if meta = classes[klass.name].try(:[], method)
56
56
  path = meta[:path]
57
-
57
+
58
58
  # prefix
59
59
  prefix = meta[:prefix]
60
60
  path = encode_prefix_params! path, params, prefix if prefix
61
-
61
+
62
62
  url_root = meta[:url_root]
63
63
  params[:url_root] = url_root if url_root
64
-
64
+
65
65
  return path, params
66
66
  else
67
67
  nil
@@ -71,36 +71,36 @@ class Rad::Router::AliasRouter
71
71
  def decode path, params
72
72
  parts = path[1..-1].split('/')
73
73
  parts << '' if parts.empty?
74
-
74
+
75
75
  tree_iterator = paths
76
-
76
+
77
77
  # checking for first part
78
78
  part = parts.pop
79
- tree_iterator = tree_iterator[part]
80
- return nil unless tree_iterator
79
+ tree_iterator = tree_iterator[part]
80
+ return nil unless tree_iterator
81
81
 
82
- # checking for exact match
82
+ # checking for exact match
83
83
  while part = parts.pop
84
84
  tmp = tree_iterator[part]
85
85
  unless tmp
86
86
  parts << part
87
- break
87
+ break
88
88
  end
89
89
  tree_iterator = tmp
90
- end
90
+ end
91
91
 
92
92
  meta = tree_iterator.meta
93
-
93
+
94
94
  # url_root
95
95
  url_root = meta[:url_root]
96
96
  return nil if url_root and "/#{parts.shift}" != url_root
97
-
97
+
98
98
  # prefix
99
99
  prefix = meta[:prefix]
100
- decode_prefix_params! parts, params, prefix if prefix
101
-
100
+ decode_prefix_params! parts, params, prefix if prefix
101
+
102
102
  return meta.get_class, meta[:method], params
103
- end
103
+ end
104
104
 
105
105
  def encode_method route_method, has_id
106
106
  if meta = route_methods[route_method]