rad_core 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
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