crystal-ext 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (327) hide show
  1. data/.gitignore +4 -0
  2. data/Rakefile +66 -0
  3. data/lib/abstract_interface/controller_helper.rb +30 -0
  4. data/lib/abstract_interface/form_builders/abstract_form_builder.rb +79 -0
  5. data/lib/abstract_interface/form_builders/themed_form_builder.rb +46 -0
  6. data/lib/abstract_interface/form_builders/themed_form_tag_builder.rb +13 -0
  7. data/lib/abstract_interface/haml_builder.rb +56 -0
  8. data/lib/abstract_interface/model_stub.rb +20 -0
  9. data/lib/abstract_interface/support.rb +56 -0
  10. data/lib/abstract_interface/theme.rb +37 -0
  11. data/lib/abstract_interface/view_builder.rb +158 -0
  12. data/lib/abstract_interface/view_helper.rb +31 -0
  13. data/lib/abstract_interface.rb +78 -0
  14. data/lib/common_interface/MIT-LICENSE +20 -0
  15. data/lib/common_interface/README.md +51 -0
  16. data/lib/common_interface/app/controllers/theme_controller.rb +65 -0
  17. data/lib/common_interface/app/controllers/theme_site_controller.rb +2 -0
  18. data/lib/common_interface/app/views/layouts/theme.html.erb +1 -0
  19. data/lib/common_interface/app/views/layouts/theme.js.erb +11 -0
  20. data/lib/common_interface/app/views/theme/_dialog.html.haml +7 -0
  21. data/lib/common_interface/app/views/theme/_popup.html.haml +4 -0
  22. data/lib/common_interface/app/views/theme/aspects.html.haml +32 -0
  23. data/lib/common_interface/app/views/theme/basic.html.haml +123 -0
  24. data/lib/common_interface/app/views/theme/dialog.js.erb +1 -0
  25. data/lib/common_interface/app/views/theme/folder.html.haml +45 -0
  26. data/lib/common_interface/app/views/theme/help.html.haml +7 -0
  27. data/lib/common_interface/app/views/theme/index.html.haml +24 -0
  28. data/lib/common_interface/app/views/theme/items.html.haml +91 -0
  29. data/lib/common_interface/app/views/theme/list.html.haml +23 -0
  30. data/lib/common_interface/app/views/theme/page/_folder.html.haml +10 -0
  31. data/lib/common_interface/app/views/theme/page/_note.html.haml +4 -0
  32. data/lib/common_interface/app/views/theme/page/_toolbar.html.haml +5 -0
  33. data/lib/common_interface/app/views/theme/page.html.haml +19 -0
  34. data/lib/common_interface/app/views/theme/popup.js.erb +1 -0
  35. data/lib/common_interface/app/views/theme/selector.html.haml +38 -0
  36. data/lib/common_interface/app/views/theme/style.html.erb +113 -0
  37. data/lib/common_interface/app/views/theme/tmp.html.erb +31 -0
  38. data/lib/common_interface/app/views/theme/user.html.haml +16 -0
  39. data/lib/common_interface/app/views/theme_shared/_comments.html.haml +11 -0
  40. data/lib/common_interface/app/views/theme_shared/_core_tools.html.haml +6 -0
  41. data/lib/common_interface/app/views/theme_shared/_line_previews.html.haml +39 -0
  42. data/lib/common_interface/app/views/theme_shared/_paginator.html.haml +7 -0
  43. data/lib/common_interface/app/views/theme_shared/_tools.html.haml +27 -0
  44. data/lib/common_interface/app/views/theme_shared/_top_navigation_bottom.html.haml +32 -0
  45. data/lib/common_interface/app/views/theme_site/blog.html.haml +13 -0
  46. data/lib/common_interface/app/views/theme_site/home.html.haml +9 -0
  47. data/lib/common_interface/app/views/theme_site/post.html.haml +11 -0
  48. data/lib/common_interface/app/views/theme_site/style.html.haml +9 -0
  49. data/lib/common_interface/app/views/themes/default/_application_t.html.haml +29 -0
  50. data/lib/common_interface/app/views/themes/default/_help_t.html.haml +1 -0
  51. data/lib/common_interface/app/views/themes/default/aspects/_comment_t.html.haml +14 -0
  52. data/lib/common_interface/app/views/themes/default/aspects/_controls_t.html.haml +3 -0
  53. data/lib/common_interface/app/views/themes/default/aspects/_details_t.html.haml +6 -0
  54. data/lib/common_interface/app/views/themes/default/aspects/_discussion_t.html.haml +9 -0
  55. data/lib/common_interface/app/views/themes/default/aspects/_paginator_t.html.haml +8 -0
  56. data/lib/common_interface/app/views/themes/default/aspects/_tag_selector_t.html.haml +11 -0
  57. data/lib/common_interface/app/views/themes/default/basic/_bottom_panel_t.html.haml +9 -0
  58. data/lib/common_interface/app/views/themes/default/basic/_dialog_t.html.haml +1 -0
  59. data/lib/common_interface/app/views/themes/default/basic/_divider_t.html.haml +2 -0
  60. data/lib/common_interface/app/views/themes/default/basic/_html_t.html.haml +1 -0
  61. data/lib/common_interface/app/views/themes/default/basic/_inplace_t.html.haml +1 -0
  62. data/lib/common_interface/app/views/themes/default/basic/_message_t.html.haml +3 -0
  63. data/lib/common_interface/app/views/themes/default/basic/_more_t.html.haml +5 -0
  64. data/lib/common_interface/app/views/themes/default/basic/_narrow_t.html.haml +1 -0
  65. data/lib/common_interface/app/views/themes/default/basic/_navigation_t.html.haml +9 -0
  66. data/lib/common_interface/app/views/themes/default/basic/_popup_t.html.haml +1 -0
  67. data/lib/common_interface/app/views/themes/default/basic/_text_t.html.haml +1 -0
  68. data/lib/common_interface/app/views/themes/default/basic/_title_t.html.haml +3 -0
  69. data/lib/common_interface/app/views/themes/default/basic/_tool_t.html.haml +4 -0
  70. data/lib/common_interface/app/views/themes/default/basic/_top_panel_t.html.haml +18 -0
  71. data/lib/common_interface/app/views/themes/default/components/_basic_list_item_t.html.haml +4 -0
  72. data/lib/common_interface/app/views/themes/default/components/_basic_list_t.html.haml +1 -0
  73. data/lib/common_interface/app/views/themes/default/components/_table_row_t.html.haml +5 -0
  74. data/lib/common_interface/app/views/themes/default/components/_table_t.html.haml +12 -0
  75. data/lib/common_interface/app/views/themes/default/components/_tabs_item_t.html.haml +4 -0
  76. data/lib/common_interface/app/views/themes/default/components/_tabs_t.html.haml +4 -0
  77. data/lib/common_interface/app/views/themes/default/components/_toolbar_t.html.haml +14 -0
  78. data/lib/common_interface/app/views/themes/default/forms/_begin_t.html.erb +3 -0
  79. data/lib/common_interface/app/views/themes/default/forms/_end_t.html.erb +3 -0
  80. data/lib/common_interface/app/views/themes/default/forms/_errors_t.html.haml +5 -0
  81. data/lib/common_interface/app/views/themes/default/forms/_field_t.html.haml +19 -0
  82. data/lib/common_interface/app/views/themes/default/forms/_line_t.html.haml +6 -0
  83. data/lib/common_interface/app/views/themes/default/items/_file_t.html.haml +19 -0
  84. data/lib/common_interface/app/views/themes/default/items/_folder_t.html.haml +23 -0
  85. data/lib/common_interface/app/views/themes/default/items/_line_t.html.haml +34 -0
  86. data/lib/common_interface/app/views/themes/default/items/_list_item_t.html.haml +16 -0
  87. data/lib/common_interface/app/views/themes/default/items/_list_t.html.haml +35 -0
  88. data/lib/common_interface/app/views/themes/default/items/_note_t.html.haml +16 -0
  89. data/lib/common_interface/app/views/themes/default/items/_page_t.html.haml +29 -0
  90. data/lib/common_interface/app/views/themes/default/items/_selector_t.html.haml +18 -0
  91. data/lib/common_interface/app/views/themes/default/items/_thumb_t.html.haml +12 -0
  92. data/lib/common_interface/app/views/themes/default/items/_user_t.html.haml +12 -0
  93. data/lib/common_interface/app/views/themes/default/layout_templates/_dashboard_t.html.haml +1 -0
  94. data/lib/common_interface/app/views/themes/default/layout_templates/_default_t.html.haml +11 -0
  95. data/lib/common_interface/app/views/themes/default/metadata.rb +117 -0
  96. data/lib/common_interface/app/views/themes/simple_organization/_application_js_t.html.erb +12 -0
  97. data/lib/common_interface/app/views/themes/simple_organization/_application_t.html.erb +45 -0
  98. data/lib/common_interface/app/views/themes/simple_organization/_help_t.html.erb +1 -0
  99. data/lib/common_interface/app/views/themes/simple_organization/aspects/_comment_t.html.haml +21 -0
  100. data/lib/common_interface/app/views/themes/simple_organization/aspects/_discussion_t.html.haml +14 -0
  101. data/lib/common_interface/app/views/themes/simple_organization/aspects/_paginator_t.html.haml +5 -0
  102. data/lib/common_interface/app/views/themes/simple_organization/aspects/_tag_selector_t.html.haml +10 -0
  103. data/lib/common_interface/app/views/themes/simple_organization/basic/_bottom_panel_t.html.erb +12 -0
  104. data/lib/common_interface/app/views/themes/simple_organization/basic/_divider_t.html.erb +3 -0
  105. data/lib/common_interface/app/views/themes/simple_organization/basic/_message_t.html.erb +7 -0
  106. data/lib/common_interface/app/views/themes/simple_organization/basic/_more_t.html.haml +5 -0
  107. data/lib/common_interface/app/views/themes/simple_organization/basic/_navigation_t.html.erb +15 -0
  108. data/lib/common_interface/app/views/themes/simple_organization/basic/_text_t.html.haml +1 -0
  109. data/lib/common_interface/app/views/themes/simple_organization/basic/_tool_t.html.erb +9 -0
  110. data/lib/common_interface/app/views/themes/simple_organization/basic/_top_panel_t.html.erb +14 -0
  111. data/lib/common_interface/app/views/themes/simple_organization/items/_line_t.html.haml +17 -0
  112. data/lib/common_interface/app/views/themes/simple_organization/items/_note_t.html.haml +16 -0
  113. data/lib/common_interface/app/views/themes/simple_organization/items/_selector_t.html.haml +11 -0
  114. data/lib/common_interface/app/views/themes/simple_organization/layout_templates/_default_t.html.erb +20 -0
  115. data/lib/common_interface/app/views/themes/simple_organization/layout_templates/_home_t.html.erb +14 -0
  116. data/lib/common_interface/app/views/themes/simple_organization/metadata.rb +193 -0
  117. data/lib/common_interface/asset_packages.yml +89 -0
  118. data/lib/common_interface/init.rb +21 -0
  119. data/lib/common_interface/lib/common_interface_helper.rb +49 -0
  120. data/lib/common_interface/public/common_interface/images/img1.jpg +0 -0
  121. data/lib/common_interface/public/common_interface/images/img1_200.jpg +0 -0
  122. data/lib/common_interface/public/common_interface/images/img1_icon.jpg +0 -0
  123. data/lib/common_interface/public/common_interface/images/img1_thumb.jpg +0 -0
  124. data/lib/common_interface/public/common_interface/images/img2.jpg +0 -0
  125. data/lib/common_interface/public/common_interface/images/img2_200.jpg +0 -0
  126. data/lib/common_interface/public/common_interface/images/img2_icon.jpg +0 -0
  127. data/lib/common_interface/public/common_interface/images/img2_thumb.jpg +0 -0
  128. data/lib/common_interface/public/common_interface/images/img3.jpg +0 -0
  129. data/lib/common_interface/public/common_interface/images/img3_200.jpg +0 -0
  130. data/lib/common_interface/public/common_interface/images/img3_icon.jpg +0 -0
  131. data/lib/common_interface/public/common_interface/images/img3_thumb.jpg +0 -0
  132. data/lib/common_interface/public/common_interface/images/video_icon.png +0 -0
  133. data/lib/common_interface/public/common_interface/js/aspects.js +0 -0
  134. data/lib/common_interface/public/common_interface/js/basic.js +229 -0
  135. data/lib/common_interface/public/common_interface/js/files_upload.js +115 -0
  136. data/lib/common_interface/public/common_interface/js/items.js +118 -0
  137. data/lib/common_interface/public/common_interface/js/style.js +50 -0
  138. data/lib/common_interface/public/common_interface/lib/jquery.elastic.js +117 -0
  139. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/blank.gif +0 -0
  140. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_close.png +0 -0
  141. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_loading.png +0 -0
  142. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_nav_left.png +0 -0
  143. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_nav_right.png +0 -0
  144. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_e.png +0 -0
  145. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_n.png +0 -0
  146. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_ne.png +0 -0
  147. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_nw.png +0 -0
  148. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_s.png +0 -0
  149. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_se.png +0 -0
  150. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_sw.png +0 -0
  151. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_w.png +0 -0
  152. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_title_left.png +0 -0
  153. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_title_main.png +0 -0
  154. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_title_over.png +0 -0
  155. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_title_right.png +0 -0
  156. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancybox-x.png +0 -0
  157. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancybox-y.png +0 -0
  158. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancybox.png +0 -0
  159. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/jquery.easing-1.3.pack.js +72 -0
  160. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/jquery.fancybox-1.3.1.js +1077 -0
  161. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/jquery.fancybox.css +363 -0
  162. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/jquery.fancybox.js +44 -0
  163. data/lib/common_interface/public/common_interface/lib/jquery.fancybox/jquery.mousewheel-3.0.2.pack.js +13 -0
  164. data/lib/common_interface/public/common_interface/lib/jquery.form.js +660 -0
  165. data/lib/common_interface/public/common_interface/lib/jquery.hoverIntent.js +111 -0
  166. data/lib/common_interface/public/common_interface/lib/jquery.jgrowl/jquery.jgrowl.css +128 -0
  167. data/lib/common_interface/public/common_interface/lib/jquery.jgrowl/jquery.jgrowl.js +307 -0
  168. data/lib/common_interface/public/common_interface/lib/jquery.js +4376 -0
  169. data/lib/common_interface/public/common_interface/lib/jquery.json.js +178 -0
  170. data/lib/common_interface/public/common_interface/lib/jquery.swfupload/cancel.png +0 -0
  171. data/lib/common_interface/public/common_interface/lib/jquery.swfupload/jquery.swfupload.js +64 -0
  172. data/lib/common_interface/public/common_interface/lib/jquery.swfupload/style.css +8 -0
  173. data/lib/common_interface/public/common_interface/lib/jquery.swfupload/swfupload/swfupload.js +980 -0
  174. data/lib/common_interface/public/common_interface/lib/jquery.swfupload/swfupload/swfupload.queue.js +98 -0
  175. data/lib/common_interface/public/common_interface/lib/jquery.swfupload/swfupload/swfupload.swf +0 -0
  176. data/lib/common_interface/public/common_interface/lib/jquery.swfupload/swfupload/wdp_buttons_upload_61x22.png +0 -0
  177. data/lib/common_interface/public/common_interface/lib/jquery.template.js +255 -0
  178. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  179. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  180. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_flat_10_000000_40x100.png +0 -0
  181. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  182. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  183. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  184. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  185. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  186. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  187. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-icons_222222_256x240.png +0 -0
  188. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-icons_228ef1_256x240.png +0 -0
  189. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-icons_ef8c08_256x240.png +0 -0
  190. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-icons_ffd27a_256x240.png +0 -0
  191. data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-icons_ffffff_256x240.png +0 -0
  192. data/lib/common_interface/public/common_interface/lib/jquery.ui/jquery.ui.css +406 -0
  193. data/lib/common_interface/public/common_interface/lib/jquery.ui/jquery.ui.js +71 -0
  194. data/lib/common_interface/public/common_interface/themes/default/_aspects.scss +58 -0
  195. data/lib/common_interface/public/common_interface/themes/default/_basic.scss +228 -0
  196. data/lib/common_interface/public/common_interface/themes/default/_components.scss +151 -0
  197. data/lib/common_interface/public/common_interface/themes/default/_custom_reset.scss +12 -0
  198. data/lib/common_interface/public/common_interface/themes/default/_elastic.scss +72 -0
  199. data/lib/common_interface/public/common_interface/themes/default/_items.scss +88 -0
  200. data/lib/common_interface/public/common_interface/themes/default/_mixins.scss +39 -0
  201. data/lib/common_interface/public/common_interface/themes/default/_special.scss +34 -0
  202. data/lib/common_interface/public/common_interface/themes/default/_variables.scss +15 -0
  203. data/lib/common_interface/public/common_interface/themes/default/_yui_reset.scss +127 -0
  204. data/lib/common_interface/public/common_interface/themes/default/elastic.js +307 -0
  205. data/lib/common_interface/public/common_interface/themes/default/elastic.print.css +8 -0
  206. data/lib/common_interface/public/common_interface/themes/default/reset.css +157 -0
  207. data/lib/common_interface/public/common_interface/themes/default/reset.scss +5 -0
  208. data/lib/common_interface/public/common_interface/themes/default/style.css +580 -0
  209. data/lib/common_interface/public/common_interface/themes/default/style.js +84 -0
  210. data/lib/common_interface/public/common_interface/themes/default/style.scss +11 -0
  211. data/lib/common_interface/public/common_interface/themes/simple_organization/_fixes.scss +130 -0
  212. data/lib/common_interface/public/common_interface/themes/simple_organization/_original.scss +852 -0
  213. data/lib/common_interface/public/common_interface/themes/simple_organization/img/comment-arrow.gif +0 -0
  214. data/lib/common_interface/public/common_interface/themes/simple_organization/img/comment-gravatar.gif +0 -0
  215. data/lib/common_interface/public/common_interface/themes/simple_organization/img/comment-reply.gif +0 -0
  216. data/lib/common_interface/public/common_interface/themes/simple_organization/img/logo-small.gif +0 -0
  217. data/lib/common_interface/public/common_interface/themes/simple_organization/img/logo.gif +0 -0
  218. data/lib/common_interface/public/common_interface/themes/simple_organization/img/main-two-columns-left.gif +0 -0
  219. data/lib/common_interface/public/common_interface/themes/simple_organization/img/main-two-columns.gif +0 -0
  220. data/lib/common_interface/public/common_interface/themes/simple_organization/img/sample-event.jpg +0 -0
  221. data/lib/common_interface/public/common_interface/themes/simple_organization/img/sample-gravatar.gif +0 -0
  222. data/lib/common_interface/public/common_interface/themes/simple_organization/img/sample-image.jpg +0 -0
  223. data/lib/common_interface/public/common_interface/themes/simple_organization/img/sample-thumbnail.jpg +0 -0
  224. data/lib/common_interface/public/common_interface/themes/simple_organization/original/archives.html +389 -0
  225. data/lib/common_interface/public/common_interface/themes/simple_organization/original/comments.html +486 -0
  226. data/lib/common_interface/public/common_interface/themes/simple_organization/original/empty-page.html +107 -0
  227. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/comment-arrow.gif +0 -0
  228. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/comment-gravatar.gif +0 -0
  229. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/comment-reply.gif +0 -0
  230. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/logo-small.gif +0 -0
  231. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/logo.gif +0 -0
  232. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/main-two-columns-left.gif +0 -0
  233. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/main-two-columns.gif +0 -0
  234. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/sample-event.jpg +0 -0
  235. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/sample-gravatar.gif +0 -0
  236. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/sample-image.jpg +0 -0
  237. data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/sample-thumbnail.jpg +0 -0
  238. data/lib/common_interface/public/common_interface/themes/simple_organization/original/index.html +307 -0
  239. data/lib/common_interface/public/common_interface/themes/simple_organization/original/left-sidebar.html +307 -0
  240. data/lib/common_interface/public/common_interface/themes/simple_organization/original/no-subnavigation.html +290 -0
  241. data/lib/common_interface/public/common_interface/themes/simple_organization/original/single-column.html +209 -0
  242. data/lib/common_interface/public/common_interface/themes/simple_organization/original/style-demo.html +355 -0
  243. data/lib/common_interface/public/common_interface/themes/simple_organization/original/style.css +658 -0
  244. data/lib/common_interface/public/common_interface/themes/simple_organization/style.css +965 -0
  245. data/lib/common_interface/public/common_interface/themes/simple_organization/style.scss +2 -0
  246. data/lib/common_interface/public/common_interface/themes/simple_organization/tmp/comments.html +486 -0
  247. data/lib/common_interface/public/common_interface/themes/simple_organization/tmp/tmp.html +307 -0
  248. data/lib/common_interface/spec/controllers/theme_controller_spec.rb +50 -0
  249. data/lib/common_interface/spec/spec.opts +4 -0
  250. data/lib/common_interface/spec/spec_helper.rb +1 -0
  251. data/lib/common_interface/tmp/html.html +39 -0
  252. data/lib/common_interface/tmp/js.js +78 -0
  253. data/lib/mongo_mapper_ext/db_config.rb +76 -0
  254. data/lib/mongo_mapper_ext/hacks/fixes.rb +32 -0
  255. data/lib/mongo_mapper_ext/hacks/time_measuring.rb +44 -0
  256. data/lib/mongo_mapper_ext/micelaneous.rb +9 -0
  257. data/lib/mongo_mapper_ext/migrate.rake +33 -0
  258. data/lib/mongo_mapper_ext/migration.rb +108 -0
  259. data/lib/mongo_mapper_ext/mongo_mapper.rb +25 -0
  260. data/lib/mongo_mapper_ext/plugins/attributes_cache.rb +22 -0
  261. data/lib/mongo_mapper_ext/plugins/default_scope.rb +76 -0
  262. data/lib/mongo_mapper_ext/plugins/micelaneous.rb +81 -0
  263. data/lib/mongo_mapper_ext/spec_helper.rb +10 -0
  264. data/lib/mongo_mapper_ext/view_helpers.rb +10 -0
  265. data/lib/mongo_mapper_ext.rb +29 -0
  266. data/lib/rails_ext/README.markdown +13 -0
  267. data/lib/rails_ext/action_controller/global_path_prefix.rb +56 -0
  268. data/lib/rails_ext/action_controller/micelaneous.rb +118 -0
  269. data/lib/rails_ext/action_controller/persistent_params.rb +96 -0
  270. data/lib/rails_ext/action_controller/redirect_helper.rb +14 -0
  271. data/lib/rails_ext/action_controller/reload_page.rb +7 -0
  272. data/lib/rails_ext/action_controller.rb +19 -0
  273. data/lib/rails_ext/action_view/common_helper.rb +96 -0
  274. data/lib/rails_ext/action_view/ruby_template.rb +13 -0
  275. data/lib/rails_ext/action_view.rb +5 -0
  276. data/lib/rails_ext/active_record/merge_default_scope/hash_poser.rb +40 -0
  277. data/lib/rails_ext/active_record/merge_default_scope.rb +16 -0
  278. data/lib/rails_ext/active_record/micelaneous.rb +14 -0
  279. data/lib/rails_ext/active_record.rb +7 -0
  280. data/lib/rails_ext/active_support/micelaneous.rb +7 -0
  281. data/lib/rails_ext/active_support.rb +1 -0
  282. data/lib/rails_ext/asset_packager/action_view.rb +47 -0
  283. data/lib/rails_ext/asset_packager/asset_packager.rb +112 -0
  284. data/lib/rails_ext/asset_packager/jsmin.rb +205 -0
  285. data/lib/rails_ext/asset_packager/tasks.rb +27 -0
  286. data/lib/rails_ext/asset_packager.rb +4 -0
  287. data/lib/rails_ext/basic/handy_environment.rb +45 -0
  288. data/lib/rails_ext/basic/user_error.rb +12 -0
  289. data/lib/rails_ext/basic.rb +6 -0
  290. data/lib/rails_ext/hacks/ajax_flash.rb +9 -0
  291. data/lib/rails_ext/hacks/ajax_redirect_to.rb +19 -0
  292. data/lib/rails_ext/hacks/defer_static_javascripts.rb +18 -0
  293. data/lib/rails_ext/hacks/global_path_prefix.rb +33 -0
  294. data/lib/rails_ext/hacks/link_to.rb +105 -0
  295. data/lib/rails_ext/hacks/merge_default_scope.rb +20 -0
  296. data/lib/rails_ext/hacks/persistent_params.rb +16 -0
  297. data/lib/rails_ext/hacks/rjs_layout.rb +2 -0
  298. data/lib/rails_ext/micelaneous/addressable_uri.rb +45 -0
  299. data/lib/rails_ext/micelaneous/config_files.rb +18 -0
  300. data/lib/rails_ext/micelaneous/create_public_symlinks.rb +11 -0
  301. data/lib/rails_ext/micelaneous/defer_static_javascripts.rb +50 -0
  302. data/lib/rails_ext/micelaneous/email_config.rb +8 -0
  303. data/lib/rails_ext/micelaneous/i18n_helper.rb +143 -0
  304. data/lib/rails_ext/micelaneous/rails_require.rb +4 -0
  305. data/lib/rails_ext/micelaneous/safe_hash.rb +104 -0
  306. data/lib/rails_ext/micelaneous.rb +17 -0
  307. data/lib/rails_ext/public/rails_ext/rails_ext.css +2 -0
  308. data/lib/rails_ext/public/rails_ext/rails_ext.js +283 -0
  309. data/lib/rails_ext/spec/mongo_mapper_ext/micelaneous_plugin_spec.rb +56 -0
  310. data/lib/rails_ext/spec/mongo_mapper_ext/micelaneous_spec.rb +51 -0
  311. data/lib/rails_ext/spec/mongo_mapper_ext/mongo_mapper_migration_spec.rb +76 -0
  312. data/lib/rails_ext/spec/mongo_mapper_ext/scope_spec.rb +125 -0
  313. data/lib/rails_ext/spec/rails_ext/haml_builder_spec.rb +136 -0
  314. data/lib/rails_ext/spec/rails_ext/safe_hash_spec.rb +71 -0
  315. data/lib/rails_ext/spec/spec.opts +3 -0
  316. data/lib/sunspot/mongo_mapper/adapters.rb +79 -0
  317. data/lib/sunspot/mongo_mapper/searchable.rb +409 -0
  318. data/lib/sunspot/spec_helper.rb +11 -0
  319. data/readme.md +1 -0
  320. data/spec/mongo_mapper_ext/micelaneous_plugin_spec.rb +56 -0
  321. data/spec/mongo_mapper_ext/micelaneous_spec.rb +51 -0
  322. data/spec/mongo_mapper_ext/mongo_mapper_migration_spec.rb +76 -0
  323. data/spec/mongo_mapper_ext/scope_spec.rb +125 -0
  324. data/spec/rails_ext/haml_builder_spec.rb +136 -0
  325. data/spec/rails_ext/safe_hash_spec.rb +71 -0
  326. data/spec/spec.opts +4 -0
  327. metadata +405 -0
@@ -0,0 +1,19 @@
1
+ ActionController::Base.send :class_eval do
2
+ protected
3
+ def redirect_to_with_ajax *args
4
+ if request.xhr? or request.format == 'js'
5
+ preserve_flash_for_ajax_page_update
6
+ render :inline => "window.location = '#{url_for *args}';", :layout => 'application'
7
+ else
8
+ redirect_to_without_ajax *args
9
+ end
10
+ end
11
+ alias_method_chain :redirect_to, :ajax
12
+
13
+ private
14
+ def preserve_flash_for_ajax_page_update
15
+ # save flash.now (that are marked as used) with ajax redirect
16
+ used = flash_without_ajax.instance_variable_get '@used'
17
+ used.clear
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ ActionView::Helpers::JavaScriptHelper.class_eval do
2
+ def javascript_cdata_section_with_defer content
3
+ if defer_static_scripts?
4
+ unless Thread.current[:deferred_static_scripts_called]
5
+ content = <<END
6
+ deferred_static_scripts.push(function(){
7
+
8
+ #{content}
9
+
10
+ });
11
+ END
12
+ end
13
+ end
14
+
15
+ javascript_cdata_section_without_defer content
16
+ end
17
+ alias_method_chain :javascript_cdata_section, :defer
18
+ end
@@ -0,0 +1,33 @@
1
+ # asset_path
2
+ ActionView::Helpers::AssetTagHelper.class_eval do
3
+ private
4
+ def compute_public_path_with_global_prefix *args, &block
5
+ tmp = ActionController::Base.relative_url_root
6
+ begin
7
+ ActionController::Base.relative_url_root = ActionController::Base._relative_url_root
8
+ compute_public_path_without_global_prefix *args, &block
9
+ ensure
10
+ ActionController::Base.relative_url_root = tmp
11
+ end
12
+ end
13
+ alias_method_chain :compute_public_path, :global_prefix
14
+ end
15
+
16
+ #
17
+ # Recognition
18
+ # delete global_path_prefix from path before rails recognition
19
+ ActionController::Routing::RouteSet.send :class_eval do
20
+ def recognize_path_with_global_prefix path, environment={}
21
+ prefix_params = {}
22
+ new_path = path.clone
23
+ ActionController::Base.global_path_prefix.each do |name|
24
+ new_path.gsub! /\A\/.+?#{GLOBAL_PATH_PREFIX_DELIMITER}#{name}/ do |value|
25
+ prefix_params[name] = CGI.unescape value[1..-(name.size + GLOBAL_PATH_PREFIX_DELIMITER.size + 1)]
26
+ ""
27
+ end
28
+ end
29
+ params = recognize_path_without_global_prefix new_path, environment
30
+ return params.reverse_merge prefix_params
31
+ end
32
+ alias_method_chain :recognize_path, :global_prefix
33
+ end
@@ -0,0 +1,105 @@
1
+ #
2
+ # link_to without form creating mess
3
+ # and link_to with ajax support
4
+ #
5
+ String.send :class_eval do
6
+ attr_accessor :_url_format
7
+ end
8
+
9
+ ActionController::UrlRewriter.send :class_eval do
10
+ def rewrite(options = {})
11
+ url = rewrite_url(options)
12
+
13
+ # needed for link_to with ajax
14
+ url._url_format = options[:format] if options[:format]
15
+ url
16
+ end
17
+ end
18
+
19
+ ActionView::Helpers::UrlHelper.send :class_eval do
20
+ AJAX_FORMATS = ['js', 'json']
21
+
22
+ def url_for(options = {})
23
+ options ||= {}
24
+ url = case options
25
+ when String
26
+ escape = true
27
+ options
28
+ when Hash
29
+ options = { :only_path => options[:host].nil? }.update(options.symbolize_keys)
30
+ escape = options.key?(:escape) ? options.delete(:escape) : true
31
+ @controller.send(:url_for, options)
32
+ when :back
33
+ escape = false
34
+ @controller.request.env["HTTP_REFERER"] || 'javascript:history.back()'
35
+ else
36
+ escape = false
37
+ polymorphic_path(options)
38
+ end
39
+
40
+ # changes begins here
41
+ if escape
42
+ _url_format = url._url_format
43
+ url = escape_once(url)
44
+ url._url_format = _url_format
45
+ end
46
+ url
47
+ end
48
+
49
+ def link_to(*args, &block)
50
+ if block_given?
51
+ options = args.first || {}
52
+ html_options = args.second
53
+ concat(link_to(capture(&block), options, html_options))
54
+ else
55
+ name = args.first
56
+ options = args.second || {}
57
+ html_options = args.third
58
+
59
+ url = url_for(options)
60
+
61
+ # html_options
62
+ html_options ||= {}
63
+ html_options = html_options.stringify_keys
64
+
65
+ html_options['ajax'] ||= (url._url_format and AJAX_FORMATS.include? url._url_format.to_s)
66
+
67
+ href = html_options['href']
68
+ convert_options_to_javascript!(html_options, url)
69
+ tag_options = tag_options(html_options)
70
+
71
+ href_attr = "href=\"#{url}\"" unless href
72
+ "<a #{href_attr}#{tag_options}>#{name || url}</a>"
73
+ end
74
+ end
75
+
76
+ private
77
+ def convert_options_to_javascript!(html_options, url = '')
78
+ confirm, ajax = html_options.delete("confirm"), (html_options.delete('ajax') || false)
79
+
80
+ method, href = html_options.delete("method"), html_options['href']
81
+
82
+ onclick = if ajax
83
+ method ||= :get
84
+ %{$(this).link_to({method: '#{method}', ajax: true}); return false;}
85
+ elsif method
86
+ %{$(this).link_to({method: '#{method}'}); return false;}
87
+ else
88
+ nil
89
+ end
90
+
91
+ if onclick and ActionController::Base.defer_static_scripts?
92
+ html_options['class'] ||= ""
93
+ end
94
+
95
+ if confirm
96
+ onclick = if onclick
97
+ "if (#{confirm_javascript_function(confirm)}) { #{onclick} };return false;"
98
+ else
99
+ "return #{confirm_javascript_function(confirm)};"
100
+ end
101
+ end
102
+
103
+ html_options["onclick"] = onclick if onclick
104
+ end
105
+ end
@@ -0,0 +1,20 @@
1
+ # Merges default_scopes and accepts blocks
2
+ if defined?(ActiveRecord)
3
+ ActiveRecord::Base.class_eval do
4
+ class << self
5
+ def default_scoping
6
+ hash_poser = HashPoser.new do
7
+ hashes = merged_default_scopes.collect do |scope|
8
+ scope = scope.is_a?(Proc) ? scope.call : scope
9
+ scope[:create] ||= {}
10
+ scope
11
+ end
12
+
13
+ merged = hashes.inject({}, :deep_merge)
14
+ { :find => merged, :create => (merged[:conditions] || {})}
15
+ end
16
+ [hash_poser]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ # By default Rails optimizes named routes and doesn't adds default_url_options, so we fix this.
2
+ ActionController::Base.send :helper_method, :default_url_options
3
+
4
+ ActionController::Routing::Optimisation::PositionalArguments.send :class_eval do
5
+ def guard_conditions_with_def_url_opt
6
+ guard_conditions_without_def_url_opt << "default_url_options(nil).blank?"
7
+ end
8
+ alias_method_chain :guard_conditions, :def_url_opt
9
+ end
10
+
11
+ ActionController::Routing::Optimisation::PositionalArgumentsWithAdditionalParams.send :class_eval do
12
+ def guard_conditions_with_def_url_opt
13
+ guard_conditions_without_def_url_opt << "default_url_options(nil).blank?"
14
+ end
15
+ alias_method_chain :guard_conditions, :def_url_opt
16
+ end
@@ -0,0 +1,2 @@
1
+ # Allow layout for RJS
2
+ ActionView::Template.send(:class_variable_set, :@@exempt_from_layout, Set.new)
@@ -0,0 +1,45 @@
1
+ Addressable::URI.class_eval do
2
+ def request_uri
3
+ return nil if self.absolute? && self.scheme !~ /^https?$/
4
+ return (
5
+ (self.path != "" ? self.path : "/") +
6
+ (self.query ? "?#{self.query}" : "")
7
+ )
8
+ end
9
+
10
+ def self.normalize_host host
11
+ host.gsub(/^www\./, "")
12
+ end
13
+
14
+ def normalized_host
15
+ host ? host : host.gsub(/^www\./, '')
16
+ end
17
+
18
+ # Delete 'nil' keys
19
+ def query_values_with_skip_nil= options
20
+ to_delete = []
21
+ options.each{|k, v| to_delete << k if v.nil?}
22
+ to_delete.each{|k| options.delete k}
23
+
24
+ self.query_values_without_skip_nil = options
25
+ end
26
+ alias_method_chain :query_values=, :skip_nil
27
+
28
+
29
+ # Override original to fix:
30
+ # - extra '?' sign (/some_path?) if there's empty but not-nil query
31
+ def to_s
32
+ @uri_string ||= (begin
33
+ uri_string = ""
34
+ uri_string << "#{self.scheme}:" if self.scheme != nil
35
+ uri_string << "//#{self.authority}" if self.authority != nil
36
+ uri_string << self.path.to_s
37
+ uri_string << "?#{self.query}" unless self.query.blank?
38
+ uri_string << "##{self.fragment}" if self.fragment != nil
39
+ if uri_string.respond_to?(:force_encoding)
40
+ uri_string.force_encoding(Encoding::UTF_8)
41
+ end
42
+ uri_string
43
+ end)
44
+ end
45
+ end
@@ -0,0 +1,18 @@
1
+ # Converts any non standart fname.yml file in /config folder into FNAME constant with loaded YAML content wrapped into SafeHash.
2
+ config_dir = "#{RAILS_ROOT}/config/"
3
+ files = Dir.glob("#{config_dir}*.yml")
4
+ ignore = ["asset_packages\\.yml", "\\..+\\."].collect{|expr| Regexp.new expr}
5
+ files.delete_if{|fname| ignore.any?{|template| template =~ fname}}
6
+ files.delete_if{|fname| /^[a-zA-Z0-9_]+\.yml$/ !~ fname.sub(config_dir, '')}
7
+
8
+ files.each do |fname|
9
+ const = fname.sub(config_dir, '').sub('.yml', '').upcase
10
+
11
+ setting = if (data = YAML.load_file(fname)).is_a? Hash
12
+ SafeHash.new data
13
+ else
14
+ data
15
+ end
16
+
17
+ Object.const_set const, setting
18
+ end
@@ -0,0 +1,11 @@
1
+ module RailsExt
2
+ class << self
3
+ def create_public_symlinks! root = RAILS_ROOT
4
+ public_rails_ext_path = File.expand_path "#{File.dirname __FILE__}/../../../public/rails_ext"
5
+ raise "File #{public_rails_ext_path} don't exist!" unless File.exist? public_rails_ext_path
6
+ public_rails_path = File.expand_path "#{root}/public/rails_ext"
7
+
8
+ system "ln -nfs #{public_rails_ext_path} #{public_rails_path}"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,50 @@
1
+ ActionController::Base.class_eval do
2
+ def self.defer_static_scripts
3
+ before_filter :defer_static_scripts
4
+ end
5
+
6
+ def defer_static_scripts
7
+ Thread.current[:deferred_static_scripts_called] = false
8
+ Thread.current[:defer_static_scripts] = (request.xhr? or request.format == 'js') ? false : true
9
+ end
10
+
11
+ def self.defer_static_scripts?
12
+ !!Thread.current[:defer_static_scripts]
13
+ end
14
+ end
15
+
16
+ ActionView::Base.class_eval do
17
+ def defer_static_scripts?
18
+ ActionController::Base.defer_static_scripts?
19
+ end
20
+
21
+ def initialize_deferred_static_scripts
22
+ return "" unless defer_static_scripts?
23
+ not_deferred_static_script do
24
+ javascript_tag "var deferred_static_scripts = [];"
25
+ end
26
+ end
27
+
28
+ def not_deferred_static_script &block
29
+ before = Thread.current[:defer_static_scripts]
30
+ begin
31
+ Thread.current[:defer_static_scripts] = false
32
+ block.call
33
+ ensure
34
+ Thread.current[:defer_static_scripts] = before
35
+ end
36
+ end
37
+
38
+ def call_deferred_static_scripts
39
+ return "" unless defer_static_scripts?
40
+ Thread.current[:deferred_static_scripts_called] = true
41
+ content = <<END
42
+ $.each(deferred_static_scripts, function(){this()});
43
+ deferred_static_scripts = [];
44
+ END
45
+ not_deferred_static_script do
46
+ javascript_tag content
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,8 @@
1
+ # Load mail configuration if not in test environment
2
+ if RAILS_ENV != 'test'
3
+ filename = "#{RAILS_ROOT}/config/email.yml"
4
+ if File.exist? filename
5
+ email_settings = YAML::load(File.open(filename))
6
+ ActionMailer::Base.smtp_settings = email_settings[RAILS_ENV] unless email_settings[RAILS_ENV].nil?
7
+ end
8
+ end
@@ -0,0 +1,143 @@
1
+ begin
2
+ Globalize # should be defined
3
+
4
+ # Russian pluralization
5
+ I18n.backend.add_pluralizer :ru, lambda{|n|
6
+ # Правило плюрализации для русского языка, взято из CLDR, http://unicode.org/cldr/
7
+ #
8
+ #
9
+ # Russian language pluralization rules, taken from CLDR project, http://unicode.org/cldr/
10
+ #
11
+ # one -> n mod 10 is 1 and n mod 100 is not 11;
12
+ # few -> n mod 10 in 2..4 and n mod 100 not in 12..14;
13
+ # many -> n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14;
14
+ # other -> everything else
15
+ #
16
+ # Пример
17
+ #
18
+ # :one = 1, 21, 31, 41, 51, 61...
19
+ # :few = 2-4, 22-24, 32-34...
20
+ # :many = 0, 5-20, 25-30, 35-40...
21
+ # :other = 1.31, 2.31, 5.31...
22
+ n % 10 == 1 && n % 100 != 11 ? :one : [2, 3, 4].include?(n % 10) && ![12, 13, 14].include?(n % 100) ? :few : n % 10 == 0 || [5, 6, 7, 8, 9].include?(n % 10) || [11, 12, 13, 14].include?(n % 100) ? :many : :other
23
+ }
24
+
25
+ # t() and t_scope()
26
+ list = [Object, ActionController::Base, ActionView::Base, ActionMailer::Base]
27
+ list << ActiveRecord::Base if defined?(ActiveRecord)
28
+ list.each do |aclass|
29
+ aclass.class_eval do
30
+
31
+ # def self.t_scope_value; end # hack, becouse of rails method_missing magic it causes error
32
+ # def t_scope_value; end # hack, becouse of rails method_missing magic it causes error
33
+ #
34
+ # def self.t_scope *scopes
35
+ # class_inheritable_accessor :t_scope_value unless respond_to? :t_scope_value
36
+ # self.t_scope_value = scopes.collect{|scope| scope + "_scope"}
37
+ # end
38
+
39
+ # finding translation in all class hierarchy
40
+ # def t message, params = {}
41
+ # # begin
42
+ # # p([message, respond_to(:t_scope_value)])
43
+ # # rescue
44
+ # # p([self.t_scope_value])
45
+ # # end
46
+ #
47
+ # result = nil
48
+ #
49
+ # aclass = self.is_a?(Class) ? self : self.class
50
+ # list = aclass.ancestors
51
+ # list.unshift self unless self.is_a?(Class) # hack for ActionView and ActionMailer
52
+ #
53
+ # catch :found do
54
+ # list.each do |c|
55
+ # t_scope = begin
56
+ # c.respond_to(:t_scope_value)
57
+ # rescue NameError # hack for rails method_missing magic
58
+ # begin
59
+ # c.t_scope_value
60
+ # rescue NoMethodError
61
+ # nil
62
+ # end
63
+ # end
64
+ #
65
+ # next unless t_scope
66
+ #
67
+ # t_scope.each do |ts|
68
+ # begin
69
+ # result = I18n.t "#{ts}.#{message}", params.merge(:raise => true)
70
+ # rescue I18n::MissingTranslationData
71
+ # end
72
+ # throw :found if result
73
+ # end
74
+ # end
75
+ # end
76
+ #
77
+ # result ||= I18n.t message, params
78
+ # result.to_s # Globalize2 uses Translation::Static instead of String
79
+ # end
80
+
81
+ def t *args
82
+ # Globalize2 uses Translation::Static instead of String
83
+ I18n.t(*args).to_s
84
+ end
85
+
86
+ end
87
+ end
88
+
89
+ # ActionController::Base.class_eval do
90
+ # # Becouse we need to transfer @t_scope also to View
91
+ # def initialize_with_t_scope *args, &block
92
+ # initialize_without_t_scope *args, &block
93
+ # t_scope = self.class.t_scope_value
94
+ # @t_scope_value = t_scope if t_scope
95
+ # end
96
+ # alias_method_chain :initialize, :t_scope
97
+ # end
98
+
99
+ ActionView::Base.class_eval do
100
+ # def t_scope_value
101
+ # controller.class.t_scope_value if controller.class.respond_to? :t_scope_value
102
+ # end
103
+ end
104
+
105
+ ActionMailer::Base.class_eval do
106
+ # def t_scope_value
107
+ # controller.class.t_scope_value if controller.class.respond_to? :t_scope_value
108
+ # end
109
+ # def t_scope scope
110
+ # raise 'stub! use the same'
111
+ # @t_scope = scope
112
+ # @body[:t_scope] = @t_scope
113
+ # end
114
+ end
115
+
116
+ # Prepare locale in Controller
117
+ # module ActionController
118
+ # module Acts
119
+ # module Localized
120
+ # def self.included(base)
121
+ # base.extend(ClassMethods)
122
+ # end
123
+ #
124
+ # module ClassMethods
125
+ # def acts_as_localized
126
+ # include ActionController::Acts::Localized::InstanceMethods
127
+ #
128
+ # before_filter :prepare_locale
129
+ # end
130
+ # end
131
+ #
132
+ # module InstanceMethods
133
+ # def prepare_locale
134
+ # I18n.locale = params[:l] unless params[:l].blank?
135
+ # end
136
+ # end
137
+ # end
138
+ # end
139
+ # end
140
+ # ActionController::Base.send :include, ActionController::Acts::Localized
141
+ # rescue NameError
142
+ # puts "i18n_helper (from rails_commons) disabled"
143
+ end
@@ -0,0 +1,4 @@
1
+ def rails_require arg
2
+ files = arg.is_a?(Array) ? arg : [arg]
3
+ files.each{|file| Rails.development? ? load(file) : require(file)}
4
+ end
@@ -0,0 +1,104 @@
1
+ require 'singleton'
2
+
3
+ class SafeHash < BlankSlate
4
+ attr_reader :hash
5
+
6
+ def initialize hash = {}
7
+ reinitialize hash
8
+ end
9
+
10
+ def []= key, value
11
+ value = SafeHash.new value if value.is_a? Hash
12
+ @hash[key.to_s] = value
13
+ end
14
+
15
+ def include? key
16
+ @hash.include? key.to_s
17
+ end
18
+
19
+ def [] key, *args
20
+ key = key.to_s
21
+ if key.last == '!'
22
+ key = key[0..key.size-2]
23
+ if (result = @hash[key]).eql? nil
24
+ raise "No key #{key}"
25
+ else
26
+ result
27
+ end
28
+ elsif key.last == '?'
29
+ key = key[0..key.size-2]
30
+ @hash.include? key
31
+ elsif (result = @hash[key]).eql? nil
32
+ if args.empty?
33
+ SafeNil.instance
34
+ else
35
+ return *args
36
+ end
37
+ else
38
+ result
39
+ end
40
+ end
41
+
42
+ def reinitialize hash
43
+ @hash = {}
44
+ hash.each do |k, v|
45
+ v = SafeHash.new v if v.is_a? Hash
46
+ @hash[k.to_s] = v
47
+ end
48
+ # @hash.freeze
49
+ end
50
+
51
+ def method_missing m, *args
52
+ self[m, *args]
53
+ end
54
+
55
+ def to_yaml *args
56
+ @hash.to_yaml *args
57
+ end
58
+
59
+ def inspect
60
+ @hash.inspect
61
+ end
62
+
63
+ def to_h
64
+ @hash
65
+ end
66
+
67
+ class SafeNil < BlankSlate
68
+ include Singleton
69
+
70
+ def [] key, *args
71
+ if key.to_s.last == '!'
72
+ raise "No key #{key}"
73
+ elsif args.empty?
74
+ SafeNil.instance
75
+ else
76
+ return *args
77
+ end
78
+ end
79
+
80
+ def method_missing m, *args
81
+ self[m, *args]
82
+ end
83
+
84
+ def include? key
85
+ false
86
+ end
87
+
88
+ def to_b
89
+ false
90
+ end
91
+
92
+ def to_yaml *args
93
+ nil.to_yaml *args
94
+ end
95
+
96
+ def to_h
97
+ {}
98
+ end
99
+
100
+ def inspect
101
+ nil.inspect
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,17 @@
1
+ require 'rails_ext/basic'
2
+
3
+ require 'rails_ext/micelaneous/safe_hash'
4
+ require 'rails_ext/micelaneous/config_files'
5
+
6
+ require 'rails_ext/micelaneous/defer_static_javascripts'
7
+ require 'rails_ext/hacks/defer_static_javascripts'
8
+
9
+ require 'rails_ext/micelaneous/email_config'
10
+
11
+ require 'rails_ext/micelaneous/rails_require'
12
+
13
+ require 'rails_ext/micelaneous/create_public_symlinks'
14
+
15
+ require 'addressable/uri'
16
+ require 'rails_ext/micelaneous/addressable_uri'
17
+ ::Uri = Addressable::URI
@@ -0,0 +1,2 @@
1
+ .hidden{display: none;}
2
+ .todo{background: #ffa;}