rad_core 0.0.13 → 0.0.14

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 (330) hide show
  1. data/Rakefile +4 -3
  2. data/lib/components/config.rb +6 -0
  3. data/lib/components/controller.rb +5 -0
  4. data/lib/components/controller.yml +3 -0
  5. data/lib/components/conveyors.rb +7 -0
  6. data/lib/components/environment.rb +5 -0
  7. data/lib/components/environment.yml +3 -0
  8. data/lib/components/flash.rb +5 -0
  9. data/lib/components/html.rb +4 -0
  10. data/lib/components/html.yml +3 -0
  11. data/lib/components/http.rb +6 -0
  12. data/lib/components/http.yml +13 -0
  13. data/lib/components/logger.rb +5 -0
  14. data/lib/components/mailer.rb +9 -0
  15. data/lib/components/remote.rb +4 -0
  16. data/lib/components/router.rb +13 -0
  17. data/lib/components/router.yml +2 -0
  18. data/lib/components/template.rb +8 -0
  19. data/lib/components/template.yml +1 -0
  20. data/lib/components/web.rb +8 -0
  21. data/lib/components/workspace.rb +1 -0
  22. data/lib/rad/{support → _support}/active_support/locales/en/actionpack.yml +0 -0
  23. data/lib/rad/{support → _support}/active_support/locales/en/activesupport.yml +0 -0
  24. data/lib/rad/_support/active_support/locales/ru/actionview.yml +162 -0
  25. data/lib/rad/_support/active_support/locales/ru/activesupport.yml +16 -0
  26. data/lib/rad/_support/active_support/locales/ru/datetime.yml +49 -0
  27. data/lib/rad/{support → _support}/active_support/micelaneous.rb +0 -0
  28. data/lib/rad/{support → _support}/active_support/time.rb +0 -0
  29. data/lib/rad/{support → _support}/active_support.rb +14 -2
  30. data/lib/rad/{support → _support}/addressable.rb +0 -0
  31. data/lib/rad/_support/callbacks.rb +166 -0
  32. data/lib/rad/_support/class_loader.rb +9 -0
  33. data/lib/rad/_support/encoding.rb +3 -0
  34. data/lib/rad/_support/exception.rb +45 -0
  35. data/lib/rad/_support/extensions.rb +20 -0
  36. data/lib/rad/_support/filters.rb +32 -0
  37. data/lib/rad/{support → _support}/hacks_and_fixes.rb +0 -0
  38. data/lib/rad/{support → _support}/mime.rb +6 -0
  39. data/lib/rad/{support → _support}/module.rb +7 -9
  40. data/lib/rad/_support/require.rb +62 -0
  41. data/lib/rad/{support → _support}/rson.rb +0 -0
  42. data/lib/rad/{support → _support}/ruby_ext_with_active_support.rb +0 -0
  43. data/lib/rad/{support → _support}/string.rb +9 -1
  44. data/lib/rad/controller/_abstract/micelaneous.rb +27 -0
  45. data/lib/rad/controller/_abstract/render.rb +159 -0
  46. data/lib/rad/controller/_abstract/responder.rb +13 -0
  47. data/lib/rad/controller/_abstract.rb +37 -0
  48. data/lib/rad/controller/_context.rb +15 -0
  49. data/lib/rad/controller/_http.rb +50 -0
  50. data/lib/rad/controller/_require.rb +19 -0
  51. data/lib/rad/controller/abstract.rb +1 -0
  52. data/lib/rad/controller/context.rb +1 -0
  53. data/lib/rad/controller/http.rb +1 -0
  54. data/lib/rad/controller/processors/controller_caller.rb +22 -24
  55. data/lib/rad/controller/processors/controller_error_handling.rb +46 -48
  56. data/lib/rad/controller/processors/controller_logger.rb +7 -9
  57. data/lib/rad/controller.rb +1 -28
  58. data/lib/rad/conveyors/_conveyor.rb +73 -0
  59. data/lib/rad/conveyors/_conveyors.rb +19 -0
  60. data/lib/rad/conveyors/_params.rb +10 -0
  61. data/lib/rad/conveyors/_processor.rb +13 -0
  62. data/lib/rad/conveyors/_require.rb +10 -0
  63. data/lib/rad/conveyors/_workspace.rb +34 -0
  64. data/lib/rad/conveyors/params.rb +1 -0
  65. data/lib/rad/conveyors/processor.rb +1 -0
  66. data/lib/rad/conveyors/processors/conveyor_logger.rb +23 -0
  67. data/lib/rad/conveyors/workspace.rb +1 -0
  68. data/lib/rad/conveyors.rb +1 -0
  69. data/lib/rad/core_web/_controller_micelaneous_helper.rb +17 -0
  70. data/lib/rad/core_web/_require.rb +25 -0
  71. data/lib/rad/core_web/_router/abstract_routing_helper.rb +20 -0
  72. data/lib/rad/core_web/_router/controller_routing_helper.rb +56 -0
  73. data/lib/rad/core_web/_router/view_routing_helper.rb +57 -0
  74. data/lib/rad/environment/_config.rb +27 -0
  75. data/lib/rad/environment/_environment.rb +17 -0
  76. data/lib/rad/environment/_files_helper.rb +55 -0
  77. data/lib/rad/environment/_logger.rb +53 -0
  78. data/lib/rad/environment/_require.rb +24 -0
  79. data/lib/rad/environment/config.rb +1 -111
  80. data/lib/rad/environment.rb +1 -55
  81. data/lib/{rad_core → rad}/gems.rb +2 -3
  82. data/lib/rad/html/_flash.rb +40 -0
  83. data/lib/rad/html/_helpers/basic_html_helper.rb +72 -0
  84. data/lib/rad/html/_helpers/flash_helper.rb +3 -0
  85. data/lib/rad/html/_helpers/form_helper.rb +114 -0
  86. data/lib/rad/html/_helpers/html_helper.rb +3 -0
  87. data/lib/rad/html/_helpers/javascript_helper.rb +27 -0
  88. data/lib/rad/html/_helpers/model_helper.rb +143 -0
  89. data/lib/rad/html/_require.rb +15 -0
  90. data/lib/rad/html/processors/prepare_flash.rb +22 -23
  91. data/lib/rad/html/processors/scoped_params.rb +18 -21
  92. data/lib/rad/html.rb +1 -26
  93. data/lib/rad/http/_http.rb +11 -0
  94. data/lib/rad/http/_http_adapter.rb +44 -0
  95. data/lib/rad/http/_request.rb +50 -0
  96. data/lib/rad/http/_require.rb +33 -0
  97. data/lib/rad/http/_response.rb +84 -0
  98. data/lib/rad/http/{support → _support}/rack/fixes.rb +0 -0
  99. data/lib/rad/http/_support/rack/rack_adapter.rb +57 -0
  100. data/lib/rad/http/processors/evaluate_format.rb +16 -19
  101. data/lib/rad/http/processors/http_logger.rb +10 -12
  102. data/lib/rad/http/processors/http_writer.rb +24 -26
  103. data/lib/rad/http/processors/prepare_params.rb +19 -18
  104. data/lib/rad/http/request.rb +1 -0
  105. data/lib/rad/http/response.rb +1 -0
  106. data/lib/rad/http.rb +1 -48
  107. data/lib/rad/mailer/_letter.rb +28 -0
  108. data/lib/rad/mailer/_mailer.rb +13 -0
  109. data/lib/rad/mailer/_mailer_controller.rb +38 -0
  110. data/lib/rad/mailer/_require.rb +7 -0
  111. data/lib/rad/mailer/mailer_controller.rb +1 -0
  112. data/lib/rad/mailer/processors/letter_builder.rb +34 -0
  113. data/lib/rad/mailer.rb +1 -0
  114. data/lib/rad/profiles/mailer.rb +5 -0
  115. data/lib/rad/profiles/web.rb +29 -52
  116. data/lib/rad/remote/_remote_controller.rb +9 -0
  117. data/lib/rad/remote/_require.rb +6 -0
  118. data/lib/rad/remote/processors/remote_caller.rb +44 -46
  119. data/lib/rad/remote/processors/remote_logger.rb +8 -10
  120. data/lib/rad/remote/remote_controller.rb +1 -0
  121. data/lib/rad/remote.rb +1 -9
  122. data/lib/rad/router/_abstract_router.rb +50 -0
  123. data/lib/rad/router/_alias_router.rb +124 -0
  124. data/lib/rad/router/_basic_router.rb +72 -0
  125. data/lib/rad/router/_configurator.rb +19 -0
  126. data/lib/rad/router/_core_routing_helper.rb +39 -0
  127. data/lib/rad/router/_default_format_processor.rb +10 -0
  128. data/lib/rad/router/_object_router.rb +184 -0
  129. data/lib/rad/router/_require.rb +31 -0
  130. data/lib/rad/router/_restful_router.rb +124 -0
  131. data/lib/rad/router/_router.rb +294 -0
  132. data/lib/rad/router/_simple_router.rb +21 -0
  133. data/lib/rad/router/abstract_router.rb +1 -0
  134. data/lib/rad/router/alias_router.rb +1 -0
  135. data/lib/rad/router/configurator.rb +1 -0
  136. data/lib/rad/router/micelaneous_router.rb +1 -0
  137. data/lib/rad/router/object_router.rb +1 -0
  138. data/lib/rad/router/processors/router.rb +23 -0
  139. data/lib/rad/router/restful_router.rb +1 -0
  140. data/lib/rad/{html/include_into_controller.rb → router/simple_router.rb} +0 -0
  141. data/lib/rad/router.rb +1 -29
  142. data/lib/rad/spec/controller.rb +20 -11
  143. data/lib/rad/spec/environment.rb +22 -38
  144. data/lib/rad/spec/http.rb +13 -86
  145. data/lib/rad/spec/http_controller.rb +105 -0
  146. data/lib/rad/spec/mailer.rb +27 -0
  147. data/lib/rad/spec/remote.rb +2 -2
  148. data/lib/rad/spec/router.rb +9 -11
  149. data/lib/rad/spec/template.rb +8 -2
  150. data/lib/rad/spec/xhtml.rb +0 -2
  151. data/lib/rad/spec.rb +4 -2
  152. data/lib/rad/template/_context.rb +92 -0
  153. data/lib/rad/template/_relative_path_resolver.rb +8 -0
  154. data/lib/rad/template/_require.rb +15 -0
  155. data/lib/rad/template/{support → _support}/tilt.rb +0 -0
  156. data/lib/rad/template/{support → _support}/tilt_fixes.rb +0 -0
  157. data/lib/rad/template/_template.rb +175 -0
  158. data/lib/rad/template/template_context.rb +1 -62
  159. data/lib/rad/template.rb +1 -25
  160. data/lib/rad.rb +8 -0
  161. data/readme.md +40 -12
  162. data/spec/controller/{abstract_controller_spec → abstract_spec}/views/OperationsOrderSpec/action.erb +0 -0
  163. data/spec/controller/{abstract_controller_spec → abstract_spec}/views/ViewVariablesSpec/action.erb +0 -0
  164. data/spec/controller/abstract_spec.rb +126 -0
  165. data/spec/controller/{controller_context_spec/views/ItemSpec → context_spec/views/NamespaceSpec/ClassSpec}/show.erb +0 -0
  166. data/spec/controller/{controller_context_spec/views/ItemSpec → context_spec/views/item_spec}/actions.erb +0 -0
  167. data/spec/controller/{controller_context_spec/views/NamespaceSpec/ClassSpec → context_spec/views/item_spec}/show.erb +0 -0
  168. data/spec/controller/{controller_context_spec/views/ItemSpec → context_spec/views/item_spec}/update.erb +0 -0
  169. data/spec/controller/{controller_context_spec → context_spec}/views/namespace_spec/class_spec/update.erb +0 -0
  170. data/spec/controller/{controller_context_spec/views/PageSpec → context_spec/views/page_spec}/actions.erb +0 -0
  171. data/spec/controller/{controller_context_spec/views/PageSpec → context_spec/views/page_spec}/show.erb +0 -0
  172. data/spec/controller/context_spec.rb +123 -0
  173. data/spec/controller/error_handling_spec.rb +21 -27
  174. data/spec/controller/{controller_helper_spec → helper_spec}/views/HelperMethodSpec/action.erb +0 -0
  175. data/spec/controller/{controller_helper_spec → helper_spec}/views/HelperSpec/action.erb +0 -0
  176. data/spec/controller/{controller_helper_spec.rb → helper_spec.rb} +7 -13
  177. data/spec/controller/{http_controller_spec.rb → http_spec.rb} +17 -23
  178. data/spec/controller/{controller_render_spec/views/AlreadyRenderedSpec → render_spec/views/already_rendered_spec}/action.erb +0 -0
  179. data/spec/controller/{controller_render_spec/views/AlreadyRenderedSpec → render_spec/views/already_rendered_spec}/custom_template.erb +0 -0
  180. data/spec/controller/{controller_render_spec/views/AnotherActionSpec → render_spec/views/another_action_spec}/another_action.erb +0 -0
  181. data/spec/controller/{controller_render_spec/views/AnotherLayout → render_spec/views/another_layout}/action.erb +0 -0
  182. data/spec/controller/{controller_render_spec/views/ForbidPartialAsActionSpec → render_spec/views/forbid_partial_as_action_spec}/_action.erb +0 -0
  183. data/spec/controller/{controller_render_spec/views/FormatSpec → render_spec/views/format_spec}/action.html.erb +0 -0
  184. data/spec/controller/{controller_render_spec/views/FormatSpec → render_spec/views/format_spec}/action.js.erb +0 -0
  185. data/spec/controller/{controller_render_spec/views/LayoutFiltersSpec → render_spec/views/layout_filters_spec}/action_with_layout.erb +0 -0
  186. data/spec/controller/{controller_render_spec/views/LayoutFiltersSpec → render_spec/views/layout_filters_spec}/action_without_layout.erb +0 -0
  187. data/spec/controller/{controller_render_spec/views/LayoutSpec → render_spec/views/layout_spec}/action.erb +0 -0
  188. data/spec/controller/{controller_render_spec → render_spec}/views/layouts/admin.erb +0 -0
  189. data/spec/controller/{controller_render_spec → render_spec}/views/layouts/app.html.erb +0 -0
  190. data/spec/controller/{controller_render_spec → render_spec}/views/layouts/app.js.erb +0 -0
  191. data/spec/controller/{controller_render_spec/views/MultipleActions → render_spec/views/multiple_actions}/actions.haml +0 -0
  192. data/spec/controller/render_spec/views/relative_spec/a/form.erb +1 -0
  193. data/spec/controller/render_spec/views/relative_spec/a/show.erb +1 -0
  194. data/spec/controller/render_spec/views/relative_spec/b/form.erb +1 -0
  195. data/spec/controller/{controller_render_spec → render_spec}/views/some_template.erb +0 -0
  196. data/spec/controller/{controller_render_spec → render_spec}/views/standalone.html.erb +0 -0
  197. data/spec/controller/{controller_render_spec.rb → render_spec.rb} +37 -27
  198. data/spec/{conveyor/conveyor_spec.rb → conveyors/conveyors_spec.rb} +36 -14
  199. data/spec/environment/config_spec.rb +13 -21
  200. data/spec/environment/environment_spec.rb +14 -41
  201. data/spec/environment/logger_spec.rb +4 -13
  202. data/spec/environment/minimal_app_spec/app.rb +1 -1
  203. data/spec/environment/minimal_app_spec.rb +12 -14
  204. data/spec/environment/standard_app_spec/app/lib/app/init.rb +1 -1
  205. data/spec/environment/standard_app_spec/plugin_a/lib/plugin_a/init.rb +1 -1
  206. data/spec/environment/standard_app_spec.rb +17 -25
  207. data/spec/html/basic_html_helper_spec.rb +7 -4
  208. data/spec/html/form_helper_spec.rb +5 -5
  209. data/spec/html/javascript_helper_spec.rb +9 -5
  210. data/spec/html/model_helper_spec.rb +9 -6
  211. data/spec/html/scoped_params_spec.rb +2 -2
  212. data/spec/html/spec_helper.rb +16 -24
  213. data/spec/http/http_spec.rb +14 -35
  214. data/spec/http/micelaneous_spec.rb +3 -3
  215. data/spec/{mail → mailer}/mail_controller_spec/views/body_template_spec/signup.erb +0 -0
  216. data/spec/{mail → mailer}/mail_controller_spec.rb +36 -12
  217. data/spec/mailer/spec_helper.rb +5 -0
  218. data/spec/remote/remote_spec.rb +23 -8
  219. data/spec/router/alias_router_spec.rb +29 -30
  220. data/spec/router/basic_router_spec.rb +44 -0
  221. data/spec/router/configurator_spec.rb +9 -6
  222. data/spec/router/integration_spec.rb +10 -7
  223. data/spec/router/object_router_spec.rb +186 -0
  224. data/spec/router/persistent_params_spec.rb +4 -4
  225. data/spec/router/restful_router_spec.rb +61 -53
  226. data/spec/router/{basic_spec.rb → router_spec.rb} +26 -23
  227. data/spec/router/routing_helper_spec.rb +5 -6
  228. data/spec/spec_helper.rb +4 -0
  229. data/spec/support/callbacks_spec.rb +1 -1
  230. data/spec/support/filters_spec.rb +2 -2
  231. data/spec/support/spec_helper.rb +1 -1
  232. data/spec/template/template_spec/views/format_for_partials/dialog.js.erb +1 -1
  233. data/spec/template/template_spec/views/nested/format/a.erb +1 -1
  234. data/spec/template/template_spec/views/nested/format/b.js.erb +1 -0
  235. data/spec/template/template_spec/views/nesting_format/dialog.js.erb +1 -1
  236. data/spec/template/template_spec.rb +62 -48
  237. data/spec/template/tilt_spec/views/concat_and_capture.erb +1 -1
  238. data/spec/template/tilt_spec/views/concat_and_capture.haml +1 -1
  239. data/spec/template/tilt_spec.rb +17 -19
  240. data/spec/{integration → web}/basic_spec/views/smoke_test_spec/action.erb +0 -0
  241. data/spec/{integration → web}/basic_spec.rb +31 -12
  242. data/spec/{integration → web}/controller_routing_helper_spec.rb +13 -11
  243. data/spec/{integration → web}/flash_spec.rb +57 -42
  244. data/spec/{integration → web}/spec_helper_spec.rb +11 -10
  245. data/spec/{integration → web}/view_routing_helper_spec.rb +44 -36
  246. metadata +338 -318
  247. data/lib/rad/controller/abstract_controller/micelaneous.rb +0 -31
  248. data/lib/rad/controller/abstract_controller/render.rb +0 -160
  249. data/lib/rad/controller/abstract_controller/responder.rb +0 -17
  250. data/lib/rad/controller/abstract_controller.rb +0 -64
  251. data/lib/rad/controller/controller_context.rb +0 -15
  252. data/lib/rad/controller/http_controller.rb +0 -48
  253. data/lib/rad/conveyor/conveyor.rb +0 -74
  254. data/lib/rad/conveyor/conveyors.rb +0 -20
  255. data/lib/rad/conveyor/params.rb +0 -14
  256. data/lib/rad/conveyor/processor.rb +0 -68
  257. data/lib/rad/conveyor/processors/conveyor_logger.rb +0 -25
  258. data/lib/rad/conveyor/workspace.rb +0 -36
  259. data/lib/rad/conveyor.rb +0 -29
  260. data/lib/rad/environment/dependency_resolver.rb +0 -107
  261. data/lib/rad/environment/environment.rb +0 -29
  262. data/lib/rad/environment/files_helper.rb +0 -55
  263. data/lib/rad/environment/logger.rb +0 -21
  264. data/lib/rad/html/flash.rb +0 -42
  265. data/lib/rad/html/helpers/basic_html_helper.rb +0 -83
  266. data/lib/rad/html/helpers/flash_helper.rb +0 -5
  267. data/lib/rad/html/helpers/form_helper.rb +0 -115
  268. data/lib/rad/html/helpers/html_helper.rb +0 -5
  269. data/lib/rad/html/helpers/javascript_helper.rb +0 -18
  270. data/lib/rad/html/helpers/model_helper.rb +0 -135
  271. data/lib/rad/http/http.rb +0 -21
  272. data/lib/rad/http/http_adapter.rb +0 -36
  273. data/lib/rad/http/middleware/static_files.rb +0 -21
  274. data/lib/rad/http/support/rack/rack_adapter.rb +0 -67
  275. data/lib/rad/http/support/rack/request.rb +0 -42
  276. data/lib/rad/http/support/rack/response.rb +0 -86
  277. data/lib/rad/integration/controller_micelaneous_helper.rb +0 -19
  278. data/lib/rad/integration/router/abstract_routing_helper.rb +0 -22
  279. data/lib/rad/integration/router/controller_routing_helper.rb +0 -58
  280. data/lib/rad/integration/router/view_routing_helper.rb +0 -104
  281. data/lib/rad/integration.rb +0 -30
  282. data/lib/rad/mail/letter.rb +0 -30
  283. data/lib/rad/mail/mail_controller.rb +0 -31
  284. data/lib/rad/mail/mailer.rb +0 -23
  285. data/lib/rad/mail/processors/letter_builder.rb +0 -36
  286. data/lib/rad/mail.rb +0 -15
  287. data/lib/rad/profiles/mail.rb +0 -16
  288. data/lib/rad/profiles/web_require.rb +0 -5
  289. data/lib/rad/remote/remote.rb +0 -15
  290. data/lib/rad/router/core/configurator.rb +0 -25
  291. data/lib/rad/router/core/core_routing_helper.rb +0 -41
  292. data/lib/rad/router/core/default_format_processor.rb +0 -12
  293. data/lib/rad/router/core/processors/router.rb +0 -29
  294. data/lib/rad/router/core/router.rb +0 -271
  295. data/lib/rad/router/core/simple_router.rb +0 -23
  296. data/lib/rad/router/routers/abstract_router.rb +0 -62
  297. data/lib/rad/router/routers/alias_router.rb +0 -113
  298. data/lib/rad/router/routers/restful_router.rb +0 -113
  299. data/lib/rad/spec/mail.rb +0 -31
  300. data/lib/rad/spec/view.rb +0 -10
  301. data/lib/rad/support/buffered_logger.rb +0 -44
  302. data/lib/rad/support/callbacks.rb +0 -168
  303. data/lib/rad/support/exception.rb +0 -31
  304. data/lib/rad/support/filters.rb +0 -34
  305. data/lib/rad/support/format.rb +0 -17
  306. data/lib/rad/support/micon.rb +0 -13
  307. data/lib/rad/support.rb +0 -63
  308. data/lib/rad/template/template.rb +0 -250
  309. data/spec/controller/abstract_controller_spec.rb +0 -132
  310. data/spec/controller/controller_context_spec.rb +0 -123
  311. data/spec/controller/controller_render_spec/views/rem ExplicitRenderSpec/action.erb +0 -1
  312. data/spec/controller/controller_render_spec/views/rem ExplicitRenderSpec/another_action.erb +0 -1
  313. data/spec/controller/spec_helper.rb +0 -19
  314. data/spec/conveyor/spec_helper.rb +0 -3
  315. data/spec/environment/config_spec/config.default.yml +0 -3
  316. data/spec/environment/config_spec/config.development.yml +0 -3
  317. data/spec/environment/config_spec/config.yml +0 -5
  318. data/spec/environment/spec_helper.rb +0 -1
  319. data/spec/http/http_spec/app/lib/app/init.rb +0 -10
  320. data/spec/http/http_spec/app/runtime/public/emptygit +0 -0
  321. data/spec/http/http_spec/plugin_a/lib/plugin_a/init.rb +0 -0
  322. data/spec/http/http_spec/plugin_b/lib/plugin_b/init.rb +0 -5
  323. data/spec/http/http_spec/plugin_b/static/emptygit +0 -0
  324. data/spec/http/spec_helper.rb +0 -5
  325. data/spec/integration/spec_helper.rb +0 -5
  326. data/spec/mail/spec_helper.rb +0 -7
  327. data/spec/remote/spec_helper.rb +0 -17
  328. data/spec/router/spec_helper.rb +0 -20
  329. data/spec/template/spec_helper.rb +0 -6
  330. data/spec/template/template_spec/views/nested/format/b.erb +0 -1
@@ -0,0 +1,34 @@
1
+ rad.mailer
2
+
3
+ class LetterBuilder < Rad::Conveyors::Processor
4
+ def call
5
+ # prepare
6
+ controller = workspace.controller.must_be.present
7
+ raise "The controller #{controller} must be a Rad::Mailer::MailerController!" unless controller.is_a? Rad::Mailer::MailerController
8
+ action = workspace.action = workspace.method_name
9
+
10
+ # call
11
+ content = catch :halt do
12
+ controller.run_callbacks :action, method: action do
13
+ # call controller
14
+ controller.send action, *workspace.arguments
15
+ # render view
16
+ controller.render action: action
17
+ end
18
+ end
19
+
20
+ controller.body = content unless content.blank?
21
+
22
+ # letter
23
+ workspace.letter = ::Rad::Mailer::Letter.new(
24
+ from: controller.from,
25
+ to: controller.to,
26
+ subject: controller.subject,
27
+ body: controller.body
28
+ )
29
+ workspace.letter.validate!
30
+
31
+ next_processor.call if next_processor
32
+ end
33
+
34
+ end
data/lib/rad/mailer.rb ADDED
@@ -0,0 +1 @@
1
+ rad.mailer
@@ -0,0 +1,5 @@
1
+ rad.conveyors.mail do |mail|
2
+ mail.use Rad::Mailer::Processors::LetterBuilder
3
+
4
+ mail.build!
5
+ end
@@ -1,68 +1,45 @@
1
- require 'rad/profiles/web_require'
2
-
3
1
  #
4
- # Routes
2
+ # Conveyors
5
3
  #
6
- rad.after :environment do
7
- rad.register :router, depends_on: :environment do
8
- Rad::Router.new(:class, [
9
- [:alias_router, Rad::AliasRouter.new],
10
- [:restful_router, Rad::RestfulRouter.new],
11
- [:simple_router, Rad::SimpleRouter.new]
12
- ])
13
- end
14
- end
4
+ rad.conveyors.web do |web|
5
+ # conveyor
6
+ web.use Rad::Conveyors::Processors::ConveyorLogger
15
7
 
8
+ # http
9
+ web.use Rad::Http::Processors::HttpWriter
10
+ web.use Rad::Http::Processors::PrepareParams
11
+ web.use Rad::Http::Processors::EvaluateFormat
12
+ web.use Rad::Http::Processors::HttpLogger
16
13
 
17
- #
18
- # Conveyors
19
- #
20
- module Rad::Processors
21
- rad.after :environment do
22
- rad.conveyors.web do |web|
23
- # conveyor
24
- web.use ConveyorLogger
25
-
26
- # http
27
- web.use HttpWriter
28
- web.use PrepareParams
29
- web.use EvaluateFormat
30
- web.use HTTPLogger
31
-
32
- # html
33
- # web.use ScopedParams
34
- web.use PrepareFlash
35
-
36
- # controller
37
- web.use ControllerErrorHandling
38
-
39
- # router
40
- web.use Router, :class, :method_name
41
-
42
- # controller
43
- web.use ControllerLogger
44
- web.use ControllerCaller
45
-
46
- web.build!
47
- end
48
- end
14
+ # html
15
+ # web.use ScopedParams
16
+ web.use Rad::Html::Processors::PrepareFlash
17
+
18
+ # controller
19
+ web.use Rad::Controller::Processors::ControllerErrorHandling
20
+
21
+ # router
22
+ web.use Rad::Router::Processors::Router, :class, :method_name
23
+
24
+ # controller
25
+ web.use Rad::Controller::Processors::ControllerLogger
26
+ web.use Rad::Controller::Processors::ControllerCaller
27
+
28
+ web.build!
49
29
  end
50
30
 
51
31
 
52
32
  #
53
33
  # Rack
54
34
  #
55
- Rad.initialize_rack do |builder|
56
- config = rad.config
57
-
35
+ rad.http.initialize_rack do |builder|
58
36
  # CommonLogger, ShowExceptions, Lint
59
- builder.use Rack::Lint if config.development?
60
- builder.use Rad::StaticFiles, config.public_dir! if config.static? and config.public_dir? and config.development?
37
+ builder.use Rack::Lint if rad.development?
38
+ # builder.use Rad::Middleware::StaticFiles if rad.http.static? and rad.http.public_path? and rad.development?
61
39
 
62
40
  # use Rack::Session::Cookie, key: 'rack.session', domain: 'foo.com', path: '/', expire_after: 2592000, secret: 'change_me'
63
- builder.use Rack::Session::Cookie, config.session.to_hash if config.session?
41
+ builder.use Rack::Session::Cookie, rad.http.session.stringify_keys if rad.http.session
64
42
 
65
43
  # builder.use Rack::CommonLogger
66
- builder.use Rack::MethodOverride
67
- # builder.use ShowExceptions if config.show_exceptions?
44
+ builder.use Rack::MethodOverride
68
45
  end
@@ -0,0 +1,9 @@
1
+ module Rad::Remote::RemoteController
2
+ inherit Rad::Filters
3
+
4
+ inject workspace: :workspace, logger: :logger
5
+
6
+ def params
7
+ workspace.params
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ class Rad::Remote
2
+ end
3
+
4
+ %w(
5
+ _remote_controller
6
+ ).each{|f| require "rad/remote/#{f}"}
@@ -1,54 +1,52 @@
1
- module Rad
2
- module Processors
3
- class RemoteCaller < Processor
4
- # TODO2 :remote isn't registered with rad[
5
- inject remote: :remote
6
-
7
- def initialize next_processor, result_variable = 'content'
8
- super(next_processor)
9
- @result_variable = result_variable
1
+ rad.remote
2
+
3
+ class RemoteCaller < Rad::Conveyors::Processor
4
+ # TODO2 :remote isn't registered with rad[
5
+ inject remote: :remote
6
+
7
+ def initialize next_processor, result_variable = 'content'
8
+ super(next_processor)
9
+ @result_variable = result_variable
10
+ end
11
+
12
+ def call
13
+ return next_processor.call unless workspace.class?
14
+
15
+ # prepare
16
+ klass = workspace.class
17
+ raise "The remote class #{klass} must be a Rad::Remote::RemoteController!" unless klass.is? Rad::Remote::RemoteController
18
+ workspace.remote_object = klass.new
19
+ method = workspace.method_name
20
+
21
+ # call
22
+ begin
23
+ result = workspace.remote_object.run_callbacks :action, method: method do
24
+ workspace.remote_object.send method
10
25
  end
11
-
12
- def call
13
- return next_processor.call unless workspace.class?
14
-
15
- # prepare
16
- klass = workspace.class
17
- raise "The remote class #{klass} must be a Rad::Remote!" unless klass.is? Rad::Remote
18
- workspace.remote_object = klass.new
19
- method = workspace.method_name
26
+
27
+ ensure_correct_result! result
28
+ workspace.remote_result = result
20
29
 
21
- # call
22
- begin
23
- result = workspace.remote_object.run_callbacks :action, method: method do
24
- workspace.remote_object.send method
25
- end
26
-
27
- ensure_correct_result! result
28
- workspace.remote_result = result
30
+ next_processor.call
29
31
 
30
- next_processor.call
32
+ # write JSON as a result if format is JSON and no one else filled it
33
+ if workspace[@result_variable].blank?
34
+ workspace[@result_variable] = workspace.remote_result.to_json
35
+ end
36
+ rescue StandardError => e
37
+ raise e if !workspace.params.format == 'json' or rad.test?
31
38
 
32
- # write JSON as a result if format is JSON and no one else filled it
33
- if workspace[@result_variable].blank?
34
- workspace[@result_variable] = workspace.remote_result.to_json
35
- end
36
- rescue StandardError => e
37
- raise e if !workspace.params.format == 'json' or config.test?
38
-
39
- workspace[@result_variable] = {error: e.message}.to_json
39
+ workspace[@result_variable] = {error: e.message}.to_json
40
+
41
+ logger.error e
42
+ logger.info "\n"
43
+ end
44
+ end
40
45
 
41
- logger.error e
42
- logger.info "\n"
43
- end
46
+ private
47
+ def ensure_correct_result! result
48
+ unless result.rson?
49
+ raise "You can't use object of type '#{result.class}' as Remote's return value!"
44
50
  end
45
-
46
- private
47
- def ensure_correct_result! result
48
- unless result.rson?
49
- raise "You can't use object of type '#{result.class}' as Remote's return value!"
50
- end
51
- end
52
51
  end
53
- end
54
52
  end
@@ -1,13 +1,11 @@
1
- module Rad
2
- module Processors
3
- class RemoteLogger < Processor
4
- def call
5
- next_processor.call
6
-
7
- if (klass = workspace.class) and (method = workspace.method_name)
8
- logger.info " Processing #{klass.name}.#{method} with #{workspace.params.inspect}"
9
- end
10
- end
1
+ rad.remote
2
+
3
+ class RemoteLogger < Rad::Conveyors::Processor
4
+ def call
5
+ next_processor.call
6
+
7
+ if (klass = workspace.class) and (method = workspace.method_name)
8
+ logger.info "RAD processing #{klass.name}.#{method} with #{workspace.params.inspect}"
11
9
  end
12
10
  end
13
11
  end
@@ -0,0 +1 @@
1
+ rad.remote
data/lib/rad/remote.rb CHANGED
@@ -1,9 +1 @@
1
- require 'rad/conveyor'
2
-
3
- [
4
- 'remote',
5
- 'processors/remote_logger',
6
- 'processors/remote_caller',
7
- ].each{|f| require "rad/remote/#{f}"}
8
-
9
- Rad::Config::DEFAULTS['default_method'] ||= 'call'
1
+ rad.remote
@@ -0,0 +1,50 @@
1
+ module Rad::Router::AbstractRouter
2
+
3
+ class Meta < Hash
4
+ def get_class
5
+ @klass ||= self[:class_name].constantize
6
+ end
7
+ end
8
+
9
+ protected
10
+ def parse_url_root options
11
+ url_root = options[:url_root]
12
+ url_root.must =~ /^\/.*/ if url_root
13
+ url_root = nil if url_root == '/'
14
+ url_root
15
+ end
16
+
17
+ def parse_prefix options
18
+ prefix = Array(options[:prefix])
19
+ prefix.empty? ? nil : prefix
20
+ end
21
+
22
+ def encode_prefix_params! path, params, prefix
23
+ parts = []
24
+ prefix.each do |name|
25
+ value = params.delete(name) || (rad.workspace? && rad.workspace.params[name])
26
+ raise "not provided :#{name} prefix!" unless value
27
+ parts << value.to_param.to_s.url_escape
28
+ end
29
+ "/#{parts.join('/')}#{path}"
30
+ end
31
+
32
+ # def encode_url_root! path, meta
33
+ # if url_root = meta[:url_root]
34
+ # "#{url_root}#{path}"
35
+ # else
36
+ # path
37
+ # end
38
+ # end
39
+
40
+ def decode_prefix_params! parts, params, prefix
41
+ prefix.each do |name|
42
+ params[name] = parts.shift || raise("not provided :#{name} prefix!")
43
+ end
44
+ end
45
+
46
+ def decode_url_root! parts, url_root
47
+ raise 'not implemented'
48
+ # raise "invalid :url_root!" if meta[:url_root] and meta[:url_root] != "/#{parts.join('/')}"
49
+ end
50
+ end
@@ -0,0 +1,124 @@
1
+ class Rad::Router::AliasRouter
2
+ include Rad::Router::AbstractRouter
3
+
4
+ class TreeHash < Hash
5
+ attr_accessor :meta
6
+ end
7
+
8
+ def initialize
9
+ @route_methods, @paths, @classes = {}, TreeHash.new, {}
10
+ end
11
+
12
+ def add als, options = {}
13
+ # parsing options
14
+ # als, options = als.to_s, options.to_openobject
15
+ options.validate_options! :class_name, :method, :url_root, :prefix
16
+
17
+ als = als.to_s
18
+ als.must =~ /^\//
19
+ class_name = options.delete(:class_name) || raise("no class name!")
20
+ class_name.must_be.a String
21
+ method = options.delete(:method) || raise("no method!")
22
+ method = method.must_be.a Symbol
23
+ url_root = parse_url_root options
24
+ prefix = parse_prefix options
25
+
26
+ raise "you can't use '/' alias with :url_root!" if als == '/' and url_root
27
+
28
+ # logic
29
+ meta = Meta.new
30
+ meta.merge!(
31
+ class_name: class_name,
32
+ method: method,
33
+ path: als,
34
+ url_root: url_root,
35
+ prefix: prefix
36
+ )
37
+
38
+ route_methods["#{als[1..-1]}_path"] = meta
39
+
40
+ (classes[class_name] ||= {})[method] = meta
41
+
42
+
43
+ parts = als[1..-1].split('/')
44
+ parts << '' if parts.empty?
45
+
46
+ tree_iterator = paths
47
+ parts.reverse.each do |part|
48
+ tree_iterator = (tree_iterator[part] ||= TreeHash.new)
49
+ raise "alias '#{als}' conflicted with another alias ('#{tree_iterator.meta[:path]}')!" if tree_iterator.meta
50
+ end
51
+ tree_iterator.meta = meta
52
+ end
53
+
54
+ def encode klass, method, params
55
+ if meta = classes[klass.name].try(:[], method)
56
+ path = meta[:path]
57
+
58
+ # prefix
59
+ prefix = meta[:prefix]
60
+ path = encode_prefix_params! path, params, prefix if prefix
61
+
62
+ url_root = meta[:url_root]
63
+ params[:url_root] = url_root if url_root
64
+
65
+ return path, params
66
+ else
67
+ nil
68
+ end
69
+ end
70
+
71
+ def decode path, params
72
+ parts = path[1..-1].split('/')
73
+ parts << '' if parts.empty?
74
+
75
+ tree_iterator = paths
76
+
77
+ # checking for first part
78
+ part = parts.pop
79
+ tree_iterator = tree_iterator[part]
80
+ return nil unless tree_iterator
81
+
82
+ # checking for exact match
83
+ while part = parts.pop
84
+ tmp = tree_iterator[part]
85
+ unless tmp
86
+ parts << part
87
+ break
88
+ end
89
+ tree_iterator = tmp
90
+ end
91
+
92
+ meta = tree_iterator.meta
93
+
94
+ # url_root
95
+ url_root = meta[:url_root]
96
+ return nil if url_root and "/#{parts.shift}" != url_root
97
+
98
+ # prefix
99
+ prefix = meta[:prefix]
100
+ decode_prefix_params! parts, params, prefix if prefix
101
+
102
+ return meta.get_class, meta[:method], params
103
+ end
104
+
105
+ def encode_method route_method, has_id
106
+ if meta = route_methods[route_method]
107
+ return meta.get_class, meta[:method]
108
+ else
109
+ nil
110
+ end
111
+ end
112
+
113
+ protected
114
+ attr_accessor :paths, :route_methods, :classes
115
+ end
116
+
117
+
118
+ Rad::Router::Configurator.class_eval do
119
+ def alias *args, &block
120
+ alias_router = @router.routers[:alias_router]
121
+ raise "There's no AliasRouter (use config to add it)!" unless alias_router
122
+ alias_router.add *args, &block
123
+ end
124
+ end
@@ -0,0 +1,72 @@
1
+ class Rad::Router::BasicRouter
2
+ include Rad::Router::AbstractRouter
3
+ inject workspace: :workspace, logger: :logger
4
+
5
+ attr_accessor :skip_routes, :redirect_routes
6
+
7
+ SKIP_DEFAULT = [/^#{rad.http.url_root}\/(favicon|fs|packaged)/]
8
+
9
+ def initialize
10
+ self.skip_routes = SKIP_DEFAULT.clone
11
+ self.redirect_routes = []
12
+ end
13
+
14
+ def skip path_regexp
15
+ path_regexp.must_be.a Regexp
16
+ skip_routes << path_regexp unless skip_routes.include? path_regexp
17
+ end
18
+
19
+ def redirect path_regexp, processor
20
+ path_regexp.must_be.a Regexp
21
+ processor.must_be.a String, Proc
22
+ redirect_routes << [path_regexp, processor] unless redirect_routes.include? [path_regexp, processor]
23
+ end
24
+
25
+ def encode *a
26
+ end
27
+
28
+ def decode path, params
29
+ # skip
30
+ if skip_routes.any?{|path_regexp| path_regexp =~ path}
31
+ logger.info "RAD skipping '#{path}'"
32
+ throw :halt, true
33
+ end
34
+
35
+ # redirect
36
+ if meta = redirect_routes.find{|path_regexp, processor| path_regexp =~ path}
37
+ path_regexp, processor = meta
38
+ target = if processor.is_a? String
39
+ path.sub(path_regexp, processor)
40
+ else
41
+ processor.call path
42
+ end
43
+
44
+ response = workspace.response
45
+ # content_type = Mime[params.format]
46
+
47
+ response.set!(
48
+ status: :redirect,
49
+ # content_type: content_type,
50
+ body: %(<html><body>You are being <a href="#{target.html_escape if target}">redirected</a>.</body></html>)
51
+ )
52
+ response.headers['Location'] = target
53
+
54
+ throw :halt, true
55
+ end
56
+ end
57
+ end
58
+
59
+
60
+ Rad::Router::Configurator.class_eval do
61
+ def skip *a, &b
62
+ basic_router = @router.routers[:basic_router]
63
+ raise "There's no BasicRouter (use config to add it)!" unless basic_router
64
+ basic_router.skip *a, &b
65
+ end
66
+
67
+ def redirect *a, &b
68
+ basic_router = @router.routers[:basic_router]
69
+ raise "There's no BasicRouter (use config to add it)!" unless basic_router
70
+ basic_router.redirect *a, &b
71
+ end
72
+ end
@@ -0,0 +1,19 @@
1
+ class Rad::Router::Configurator
2
+ inject router: :router
3
+
4
+ def initialize router
5
+ @router = router
6
+ end
7
+
8
+ def persistent_params *args
9
+ args.each{|v| router.persistent_params << v}
10
+ end
11
+
12
+ class << self
13
+ inject router: :router
14
+
15
+ def configure &block
16
+ block.call Rad::Router::Configurator.new(router)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,39 @@
1
+ module Rad::Router::CoreRoutingHelper
2
+ inject router: :router
3
+
4
+ delegate :url_for, :url_for_path, :persist_params, :persist_params?, :dont_persist_params, to: :router
5
+
6
+ def default_path options = {}
7
+ url_for_path rad.router.default_path, options.merge(url_root: false)
8
+ end
9
+
10
+ def return_to_path options = {}
11
+ dont_persist_params do
12
+ path = params[:_return_to] || workspace.request.session['return_to'] || rad.router.default_path
13
+ url_for_path path, options.merge(url_root: false)
14
+ end
15
+ end
16
+
17
+ def parse_routing_arguments *args
18
+ params = args.extract_options!
19
+ raise "invalid usage!" unless args.size <= 1
20
+ if args.size == 1
21
+ raise "duplicate :id pameter!" if params.include?(:id) or params.include?('id')
22
+ params[:id] = args.first.to_param
23
+ end
24
+ params
25
+ end
26
+
27
+ protected
28
+ def method_missing m, *args, &block
29
+ m = m.to_s
30
+ if m =~ /path$/
31
+ params = parse_routing_arguments(*args)
32
+ klass, method = router.encode_method m, params.include?(:id)
33
+
34
+ url_for klass, method, params
35
+ else
36
+ super m.to_sym, *args, &block
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,10 @@
1
+ class Rad::Router::DefaultFormatProcessor
2
+ def add_format path, format
3
+ path << ".#{format}"
4
+ path
5
+ end
6
+
7
+ def remove_format path
8
+ path.sub(/\.[^\.]+$/, '')
9
+ end
10
+ end