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
@@ -1,26 +1,23 @@
1
+ rad.html
2
+
1
3
  # Converts {'model[attribute]' => value} into {'model' => {'attribute' => value}}
2
- module Rad
3
- module Processors
4
- class ScopedParams < Processor
5
- def call
6
- if workspace.params?
7
- to_delete = []
8
- to_add = {}
9
- workspace.params.each do |name, value|
10
- name.to_s.scan /(.+)\[(.+)\]/ do |scope_name, name_in_scope|
11
- logger.warn "Owerriding :#{scope} param!" if workspace.params.include? scope_name
12
- scope = to_add[scope_name.to_sym] ||= {}
13
- scope[name_in_scope] = value
14
- to_delete << name
15
- end
16
- end
17
- workspace.params.merge! to_add
18
- to_delete.each{|n| workspace.params.delete n}
4
+ class ScopedParams < Rad::Conveyors::Processor
5
+ def call
6
+ if workspace.params?
7
+ to_delete = []
8
+ to_add = {}
9
+ workspace.params.each do |name, value|
10
+ name.to_s.scan /(.+)\[(.+)\]/ do |scope_name, name_in_scope|
11
+ logger.warn "RAD owerriding :#{scope} param!" if workspace.params.include? scope_name
12
+ scope = to_add[scope_name.to_sym] ||= {}
13
+ scope[name_in_scope] = value
14
+ to_delete << name
19
15
  end
20
-
21
- next_processor.call
22
16
  end
17
+ workspace.params.merge! to_add
18
+ to_delete.each{|n| workspace.params.delete n}
23
19
  end
20
+
21
+ next_processor.call
24
22
  end
25
- end
26
-
23
+ end
data/lib/rad/html.rb CHANGED
@@ -1,26 +1 @@
1
- require 'rad/http'
2
- require 'rad/template'
3
-
4
- [
5
- 'flash',
6
-
7
- 'helpers/basic_html_helper',
8
- 'helpers/form_helper',
9
- 'helpers/model_helper',
10
- 'helpers/javascript_helper',
11
- 'helpers/flash_helper',
12
- 'helpers/html_helper',
13
-
14
- 'processors/scoped_params',
15
- 'processors/prepare_flash'
16
- ].each{|f| require "rad/html/#{f}"}
17
-
18
- # Flash
19
- rad.register :flash, scope: :cycle, depends_on: :environment do
20
- workspace = rad[:workspace]
21
- workspace.params.must_be.defined
22
- Rad::Flash.new workspace.params.format
23
- end
24
-
25
- # Initialization
26
- Rad::Config::DEFAULTS[:remote_link_formats] = ['js', 'json']
1
+ rad.html
@@ -0,0 +1,11 @@
1
+ class Rad::Http
2
+ inject environment: :environment
3
+ attr_reader :rack_adapter, :http_adapter
4
+
5
+ def initialize
6
+ @rack_adapter, @http_adapter = Rad::Http::RackAdapter.new, Rad::Http::HttpAdapter.new
7
+ end
8
+
9
+ delegate :initialize_rack, :run, to: :rack_adapter
10
+ delegate :call, :mock_environment, to: :http_adapter
11
+ end
@@ -0,0 +1,44 @@
1
+ class Rad::Http::HttpAdapter
2
+ inject conveyors: :conveyors
3
+
4
+ def call env, workspace = {}, &block
5
+ # result, opt = nil, opt.to_openobject
6
+ workspace = conveyors.web.call(
7
+ {env: env, response: Rad::Http::Response.new}.merge(workspace),
8
+ &block
9
+ )
10
+
11
+ response = workspace.response.must_be.defined
12
+ result = response.finish
13
+
14
+ result
15
+ end
16
+ # synchronize_method :call
17
+
18
+ # def mock_call env = {}, workspace = {}, &block
19
+ # env['PATH_INFO'] ||= '/'
20
+ # env['rack.input'] ||= StringIO.new
21
+ #
22
+ # call env, workspace, &block
23
+ # end
24
+
25
+ def mock_environment url = nil
26
+ env = {
27
+ 'rack.url_scheme' => 'http',
28
+ 'PATH_INFO' => '/',
29
+ 'HTTP_HOST' => 'spec',
30
+ 'rack.input' => StringIO.new
31
+ }
32
+ if url
33
+ uri = Uri.parse url
34
+ env.merge!(
35
+ 'HTTP_HOST' => %(#{uri.host}#{":#{uri.port}" if uri.port.present?}),
36
+ # 'REQUEST_PATH' => uri.path,
37
+ 'PATH_INFO' => uri.path,
38
+ # 'REQUEST_URI' => uri.path,
39
+ 'QUERY_STRING' => uri.query
40
+ )
41
+ end
42
+ env
43
+ end
44
+ end
@@ -0,0 +1,50 @@
1
+ class Rad::Http::Request < Rack::Request
2
+ # Returns an array of acceptable media types for the response
3
+ # def accept
4
+ # @env['HTTP_ACCEPT'].to_s.split(',').map { |a| a.split(';')[0].strip }
5
+ # end
6
+ #
7
+ # def secure?
8
+ # (@env['HTTP_X_FORWARDED_PROTO'] || @env['rack.url_scheme']) == 'https'
9
+ # end
10
+
11
+
12
+ # Returns all the \subdomains as an array, so <tt>["dev", "www"]</tt> would be
13
+ # returned for "dev.www.rubyonrails.org". You can specify a different <tt>tld_length</tt>,
14
+ # such as 2 to catch <tt>["www"]</tt> instead of <tt>["www", "rubyonrails"]</tt>
15
+ # in "www.rubyonrails.co.uk".
16
+ def subdomains(tld_length = 1)
17
+ return [] unless named_host?(host)
18
+ parts = host.split('.')
19
+ parts[0..-(tld_length+2)]
20
+ end
21
+
22
+
23
+ # Returns the \domain part of a \host, such as "rubyonrails.org" in "www.rubyonrails.org". You can specify
24
+ # a different <tt>tld_length</tt>, such as 2 to catch rubyonrails.co.uk in "www.rubyonrails.co.uk".
25
+ def domain(tld_length = 1)
26
+ return nil unless named_host?(host)
27
+
28
+ host.split('.').last(1 + tld_length).join('.')
29
+ end
30
+
31
+ def cookies_with_memory
32
+ @cookies_with_memory ||= cookies_without_memory
33
+ end
34
+ alias_method_chain :cookies, :memory
35
+
36
+ def normalized_domain
37
+ return nil unless named_host?(host)
38
+ host.sub('www.', '').downcase
39
+ # subdomains = request.subdomains.select{|n| n != 'www'}
40
+ # subdomain = subdomains.last
41
+ # pure_domain = request.domain.sub(/\A#{subdomains.join(".")}\./, "")
42
+ #
43
+ # domain = subdomain.blank? ? pure_domain : "#{subdomain}.#{pure_domain}"
44
+ end
45
+
46
+ protected
47
+ def named_host?(host)
48
+ !(host.nil? || /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.match(host))
49
+ end
50
+ end
@@ -0,0 +1,33 @@
1
+ #
2
+ # Dependencies
3
+ #
4
+ require 'rack'
5
+ require 'rack/builder'
6
+
7
+ class Rad::Http
8
+ attr_accessor :host, :port, :static, :url_root, :default_format, :session
9
+ require_attr :host, :port, :url_root, :default_format
10
+ def static?; !!@static end
11
+
12
+ attr_writer :public_path
13
+ def public_path
14
+ @public_path || "#{rad.runtime_path}/public"
15
+ end
16
+ def public_path?; !!public_path end
17
+ end
18
+
19
+ %w(
20
+ rack_adapter
21
+ fixes
22
+ ).each{|f| require "rad/http/_support/rack/#{f}"}
23
+
24
+
25
+ #
26
+ # Libraries
27
+ #
28
+ %w(
29
+ _request
30
+ _response
31
+ _http_adapter
32
+ _http
33
+ ).each{|f| require "rad/http/#{f}"}
@@ -0,0 +1,84 @@
1
+ class Rad::Http::Response < Rack::Response
2
+ include ::OpenConstructor
3
+
4
+ STATUS_MESSAGES = {
5
+ ok: 200,
6
+ not_found: 404,
7
+ failed: 500,
8
+ error: 500,
9
+ redirect: 302
10
+ }
11
+
12
+ def initialize *args
13
+ super
14
+ clear
15
+ end
16
+
17
+ def content_type= type; self["Content-Type"] = type end
18
+ def content_type; self["Content-Type"] end
19
+ def content_type?; !!content_type end
20
+
21
+ def location; self['Location'] end
22
+ def location= location; self['Location'] = location end
23
+
24
+ # def to_a
25
+ # [status, headers, body]
26
+ # end
27
+
28
+ def body_as_string
29
+ if @body.is_a? String
30
+ @body
31
+ else
32
+ @body ? @body.join : ""
33
+ end
34
+ end
35
+
36
+ def inspect
37
+ to_a2.inspect
38
+ end
39
+
40
+ def == other
41
+ to_a2 == other
42
+ end
43
+
44
+ def cookies
45
+ self['Set-Cookie']
46
+ end
47
+
48
+ def clear
49
+ @status = 200
50
+ @header = Rack::Utils::HeaderHash.new("Content-Type" => nil)
51
+ @length = 0
52
+ @body = []
53
+ end
54
+
55
+ def status= code_or_message
56
+ @status = if code_or_message.is_a? Numeric
57
+ code_or_message
58
+ else
59
+ self.class.decode_status_message(code_or_message) || raise("unknown http status message '#{code_or_message}'!")
60
+ end
61
+ end
62
+
63
+ def self.decode_status_message message
64
+ STATUS_MESSAGES[message]
65
+ end
66
+
67
+
68
+ #
69
+ # Status helpers
70
+ #
71
+ STATUS_MESSAGES.each do |message, status_code|
72
+ define_method("#{message}?"){self.status == status_code}
73
+ end
74
+ alias_method :success?, :ok?
75
+
76
+ def redirect?
77
+ super or (body and body.include?('window.location'))
78
+ end
79
+
80
+ protected
81
+ def to_a2
82
+ [status, header, body_as_string]
83
+ end
84
+ end
File without changes
@@ -0,0 +1,57 @@
1
+ class Rad::Http::RackAdapter
2
+ SERVERS = %w{thin mongrel webrick}
3
+
4
+ # class Callback
5
+ # def initialize app; end
6
+ # def self.call env; Rad::Adapter.call env end
7
+ # end
8
+
9
+ # class << self
10
+ inject logger: :logger
11
+
12
+ def initialize_rack builder = nil, &block
13
+ @rack_configurations ||= []
14
+ if block
15
+ raise "provide configuration block!" unless block
16
+ @rack_configurations << block
17
+ else
18
+ if @rack_configurations.empty?
19
+ raise "Common App not defined! Use profiles (like rad/profiles/web), define it by yourself or use your own configuration!"
20
+ end
21
+ @rack_configurations.each{|conf| conf.call builder}
22
+ end
23
+ end
24
+
25
+ def run app, host, port
26
+ handler = detect_rack_handler
27
+ handler_name = handler.name.gsub(/.*::/, '')
28
+ logger.info "RAD http server started on #{host}:#{port}" unless rad.test?
29
+ # unless handler_name =~/cgi/i
30
+ handler.run app, Host: host, Port: port do |server|
31
+ [:INT, :TERM].each {|sig| trap(sig){quit!(server, handler_name)}}
32
+ end
33
+ rescue Errno::EADDRINUSE => e
34
+ logger.error "RAD port #{port} taken!"
35
+ end
36
+
37
+ def quit!(server, handler_name)
38
+ ## Use thins' hard #stop! if available, otherwise just #stop
39
+ server.respond_to?(:stop!) ? server.stop! : server.stop
40
+ puts "\nRad stopped" unless handler_name =~/cgi/i
41
+ end
42
+
43
+ protected
44
+ def detect_rack_handler
45
+ return Rack::Handler.get('thin')
46
+ SERVERS.each do |server_name|
47
+ begin
48
+ return Rack::Handler.get(server_name.downcase)
49
+ rescue LoadError
50
+ rescue NameError
51
+ end
52
+ end
53
+ fail " Server handler (#{SERVERS.join(', ')}) not found."
54
+ end
55
+
56
+ # end
57
+ end
@@ -1,22 +1,19 @@
1
- module Rad
2
- module Processors
3
- class EvaluateFormat < Processor
4
- def call
5
- path = workspace.path.must_be.defined
6
- params = workspace.params.must_be.defined
7
-
8
- parts = path.split('.')
9
- if parts.size > 1
10
- format = parts.last
11
- logger.warn "Two :format parameters!" if params.include?(:format)
12
- workspace.params = params.clone
13
- workspace.params.format = format
14
- else
15
- params.format ||= config.default_format!
16
- end
17
-
18
- next_processor.call
19
- end
1
+ rad.http
2
+
3
+ class EvaluateFormat < Rad::Conveyors::Processor
4
+ def call
5
+ path = workspace.path.must_be.defined
6
+ params = workspace.params.must_be.defined
7
+ parts = path.split('.')
8
+ if parts.size > 1
9
+ format = parts.last
10
+ logger.warn "RAD two :format parameters!" if params.include?(:format)
11
+ workspace.params = params.clone
12
+ workspace.params.format = format
13
+ else
14
+ params.format ||= rad.http.default_format
20
15
  end
16
+
17
+ next_processor.call
21
18
  end
22
19
  end
@@ -1,15 +1,13 @@
1
- module Rad
2
- module Processors
3
- class HTTPLogger < Processor
4
- def call
5
- if workspace.request? and workspace.params?
6
- method, path, ip, time, format = workspace.request.request_method, workspace.path,
7
- workspace.request.ip, (workspace.start_time || Time.now), workspace.params.format
8
- logger.info " Started '#{path}' as '#{format}' (for #{ip} at #{time.to_s} with #{method})"
9
- end
10
-
11
- next_processor.call
12
- end
1
+ rad.http
2
+
3
+ class HttpLogger < Rad::Conveyors::Processor
4
+ def call
5
+ if workspace.request? and workspace.params?
6
+ method, path, ip, time, format = workspace.request.request_method, workspace.path,
7
+ workspace.request.ip, (workspace.start_time || Time.now), workspace.params.format
8
+ logger.info "RAD started '#{path}' as '#{format}' (for #{ip} at #{time.to_s} with #{method})"
13
9
  end
10
+
11
+ next_processor.call
14
12
  end
15
13
  end
@@ -1,30 +1,28 @@
1
- module Rad
2
- module Processors
3
- class HttpWriter < Processor
4
- def call
5
- response = workspace.response.must_be.defined
6
-
7
- begin
8
- next_processor.call
1
+ rad.http
9
2
 
10
- response.body = workspace.content if response.body.blank? and workspace.content?
11
- response.content_type ||= Mime[(workspace.params.format if workspace.params?) || config.default_format]
12
- rescue StandardError => e
13
- raise e if config.test?
14
-
15
- response.clear
16
- if workspace.params.format? and workspace.params.format == 'json'
17
- response.body = {error: (config.production? ? "Internal error!" : e.message)}.to_json
18
- response.content_type = Mime.json
19
- else
20
- response.body = (config.production? ? "Internal error!" : e.message)
21
- response.content_type = Mime.text
22
- end
23
-
24
- logger.error e
25
- logger.info "\n"
26
- end
3
+ class HttpWriter < Rad::Conveyors::Processor
4
+ def call
5
+ response = workspace.response.must_be.defined
6
+
7
+ begin
8
+ next_processor.call
9
+
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
13
+ raise e if rad.test?
14
+
15
+ response.clear
16
+ if workspace.params.format? and workspace.params.format == 'json'
17
+ response.body = {error: (rad.production? ? "Internal error!" : e.message)}.to_json
18
+ response.content_type = Mime.json
19
+ else
20
+ response.body = (rad.production? ? "Internal error!" : e.message)
21
+ response.content_type = Mime.text
27
22
  end
28
- end
23
+
24
+ logger.error e
25
+ logger.info "\n"
26
+ end
29
27
  end
30
28
  end
@@ -1,22 +1,23 @@
1
- module Rad
2
- module Processors
3
- class PrepareParams < Processor
4
- def call
5
- workspace.env.must_be.defined
6
- workspace.request = Rad::Request.new(workspace.env)
7
- workspace.path = workspace.request.path
8
- params = workspace.params = Rad::Params.new(workspace.request.params)
1
+ rad.http
9
2
 
10
- if params.json?
11
- json_params = JSON.load params['json']
12
- json_params.must_be.a Hash
13
- json_params.keys.each do |k|
14
- logger.warn "Parameter :#{k} will be overwriden from JSON!" if params.include?(k)
15
- end
16
- params.merge! json_params
17
- end
18
- next_processor.call
3
+ #
4
+ # Outdated, Rack does this by themself, keeping it just in case.
5
+ #
6
+ class PrepareParams < Rad::Conveyors::Processor
7
+ def call
8
+ workspace.env.must_be.defined
9
+ workspace.request = Rad::Http::Request.new(workspace.env)
10
+ workspace.path = workspace.request.path
11
+ params = workspace.params = Rad::Conveyors::Params.new(workspace.request.params)
12
+
13
+ if params.json?
14
+ json_params = JSON.load params['json']
15
+ json_params.must_be.a Hash
16
+ json_params.keys.each do |k|
17
+ logger.warn "RAD parameter :#{k} will be overwriden from JSON!" if params.include?(k)
19
18
  end
20
- end
19
+ params.merge! json_params
20
+ end
21
+ next_processor.call
21
22
  end
22
23
  end
@@ -0,0 +1 @@
1
+ rad.http
@@ -0,0 +1 @@
1
+ rad.http
data/lib/rad/http.rb CHANGED
@@ -1,48 +1 @@
1
- # WServer provides support for Web Servers (via Rack)
2
-
3
- require 'rack'
4
- require 'rack/builder'
5
-
6
- require 'rad/conveyor'
7
-
8
- # support
9
- [
10
- 'rack/request',
11
- 'rack/response',
12
- 'rack/rack_adapter',
13
- 'rack/fixes'
14
- ].each{|f| require "rad/http/support/#{f}"}
15
-
16
- # http
17
- [
18
- # 'config',
19
- 'http',
20
- 'http_adapter',
21
- 'processors/prepare_params',
22
- 'processors/http_writer',
23
- 'processors/http_logger',
24
- 'processors/evaluate_format'
25
- ].each{|f| require "rad/http/#{f}"}
26
-
27
- module Rad
28
- autoload :StaticFiles, 'rad/http/middleware/static_files'
29
- end
30
-
31
- Rad.metaclass_eval do
32
- delegate :initialize_rack, to: Rad::RackAdapter
33
- delegate :call, to: Rad::HTTPAdapter
34
- delegate :ensure_public_symlink, to: Rad::HTTP
35
- end
36
-
37
-
38
- #
39
- # Initialization
40
- #
41
- Rad::Config::DEFAULTS.merge!(
42
- host: '0.0.0.0',
43
- port: 4000,
44
-
45
- static: true,
46
- url_root: '',
47
- default_format: 'html',
48
- )
1
+ rad.http
@@ -0,0 +1,28 @@
1
+ class Rad::Mailer::Letter
2
+ inject mailer: :mailer
3
+
4
+ attr_accessor :from, :to, :subject, :body
5
+
6
+ def initialize properties
7
+ properties.each do |k, v|
8
+ send "#{k}=", v
9
+ end
10
+ end
11
+
12
+ def validate!
13
+ from || raise("letter :from not specified!")
14
+ to || raise("letter :to not specified!")
15
+ subject || raise("letter :subject not specified!")
16
+ body || raise("letter :body not specified!")
17
+ end
18
+
19
+ def deliver
20
+ validate!
21
+ mailer.deliver self
22
+ end
23
+
24
+ def to_hash
25
+ {from: from, to: to, subject: subject, body: body}
26
+ end
27
+ alias_method :to_h, :to_hash
28
+ end
@@ -0,0 +1,13 @@
1
+ class Rad::Mailer
2
+ inject logger: :logger
3
+
4
+ def deliver letter
5
+ mail = Mail.new letter.to_h
6
+ if rad.development?
7
+ logger.info "RAD delivering mail #{letter.to_h.inspect}"
8
+ else
9
+ logger.info "RAD delivering mail '#{letter.subject}'"
10
+ end
11
+ mail.deliver!
12
+ end
13
+ end
@@ -0,0 +1,38 @@
1
+ module Rad::Mailer::MailerController
2
+ inherit Rad::Controller::Abstract
3
+
4
+ attr_accessor :from, :to, :subject, :body
5
+
6
+ module ClassMethods
7
+ protected
8
+ inject conveyors: :conveyors
9
+
10
+ def method_missing m, *args, &block
11
+ mail_controller = self.new
12
+ if mail_controller.respond_to? m
13
+ build_letter mail_controller, m, *args
14
+ else
15
+ super
16
+ end
17
+ end
18
+
19
+ def build_letter mail_controller, m, *args
20
+ conveyors.mail.must_be.present
21
+
22
+ # copying parameter from current workspace if any
23
+ # mail_workspace = rad.workspace? ? rad.workspace.clone : {}
24
+ # mail_workspace.merge!(
25
+ # controller: mail_controller,
26
+ # method_name: m,
27
+ # arguments: args
28
+ # )
29
+
30
+ workspace = conveyors.mail.call(
31
+ controller: mail_controller,
32
+ method_name: m,
33
+ arguments: args
34
+ )
35
+ workspace.letter.must_be.present
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,7 @@
1
+ require 'mail'
2
+
3
+ %w(
4
+ _mailer
5
+ _letter
6
+ _mailer_controller
7
+ ).each{|f| require "rad/mailer/#{f}"}
@@ -0,0 +1 @@
1
+ rad.mailer