adva-core 0.0.1

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 (279) hide show
  1. data/app/controllers/admin/base_controller.rb +21 -0
  2. data/app/controllers/admin/pages_controller.rb +9 -0
  3. data/app/controllers/admin/sections_controller.rb +36 -0
  4. data/app/controllers/admin/sites_controller.rb +18 -0
  5. data/app/controllers/articles_controller.rb +3 -0
  6. data/app/controllers/base_controller.rb +22 -0
  7. data/app/controllers/installations_controller.rb +28 -0
  8. data/app/controllers/pages_controller.rb +2 -0
  9. data/app/controllers/sections_controller.rb +3 -0
  10. data/app/helpers/form_helper.rb +13 -0
  11. data/app/helpers/sections_helper.rb +7 -0
  12. data/app/helpers/url_helper.rb +18 -0
  13. data/app/models/account.rb +3 -0
  14. data/app/models/article.rb +2 -0
  15. data/app/models/content.rb +4 -0
  16. data/app/models/page.rb +17 -0
  17. data/app/models/section.rb +59 -0
  18. data/app/models/site.rb +26 -0
  19. data/app/views/admin/pages/_menu.html.rb +30 -0
  20. data/app/views/admin/pages/new.html.rb +19 -0
  21. data/app/views/admin/pages/show.html.rb +25 -0
  22. data/app/views/admin/sections/_menu.html.rb +12 -0
  23. data/app/views/admin/sections/_section.html.rb +7 -0
  24. data/app/views/admin/sections/_select_type.html.rb +16 -0
  25. data/app/views/admin/sections/index.html.rb +28 -0
  26. data/app/views/admin/sites/_menu.html.rb +6 -0
  27. data/app/views/admin/sites/edit.html.rb +22 -0
  28. data/app/views/admin/sites/index.html.rb +12 -0
  29. data/app/views/admin/sites/new.html.rb +39 -0
  30. data/app/views/admin/sites/show.html.rb +7 -0
  31. data/app/views/installations/new.html.rb +39 -0
  32. data/app/views/installations/show.html.rb +9 -0
  33. data/app/views/layouts/_flash.html.rb +9 -0
  34. data/app/views/layouts/admin.rb +38 -0
  35. data/app/views/layouts/admin/_header.rb +48 -0
  36. data/app/views/layouts/admin/_tabs.html.rb +18 -0
  37. data/app/views/layouts/admin/_top.rb +56 -0
  38. data/app/views/layouts/base.rb +58 -0
  39. data/app/views/layouts/default.rb +31 -0
  40. data/app/views/layouts/default/_menu.rb +24 -0
  41. data/app/views/layouts/simple.rb +16 -0
  42. data/app/views/pages/show.html.rb +7 -0
  43. data/config/initializers/simple_form.rb +53 -0
  44. data/config/locales/en.yml +137 -0
  45. data/config/redirects.rb +8 -0
  46. data/config/routes.rb +21 -0
  47. data/lib/adva-core.rb +1 -0
  48. data/lib/adva.rb +37 -0
  49. data/lib/adva/active_record/has_options.rb +55 -0
  50. data/lib/adva/cli.rb +16 -0
  51. data/lib/adva/controller.rb +7 -0
  52. data/lib/adva/controller/abstract_actions.rb +87 -0
  53. data/lib/adva/controller/internal_redirect.rb +26 -0
  54. data/lib/adva/controller/references.rb +28 -0
  55. data/lib/adva/core.rb +84 -0
  56. data/lib/adva/engine.rb +64 -0
  57. data/lib/adva/engine/sliced_models.rb +35 -0
  58. data/lib/adva/generators.rb +8 -0
  59. data/lib/adva/generators/app.rb +121 -0
  60. data/lib/adva/generators/engine.rb +58 -0
  61. data/lib/adva/generators/gemfile.rb +50 -0
  62. data/lib/adva/generators/install.rb +31 -0
  63. data/lib/adva/generators/templates/app/app_template.rb +3 -0
  64. data/lib/adva/generators/templates/engine/Gemfile.erb +3 -0
  65. data/lib/adva/generators/templates/engine/all.rb +1 -0
  66. data/lib/adva/generators/templates/engine/en.yml.erb +2 -0
  67. data/lib/adva/generators/templates/engine/engine.rb.erb +11 -0
  68. data/lib/adva/generators/templates/engine/gemspec.erb +21 -0
  69. data/lib/adva/generators/templates/engine/migration.rb.erb +11 -0
  70. data/lib/adva/generators/templates/engine/redirects.rb.erb +3 -0
  71. data/lib/adva/generators/templates/engine/routes.rb.erb +3 -0
  72. data/lib/adva/generators/templates/engine/test_helper.rb.erb +3 -0
  73. data/lib/adva/rack.rb +5 -0
  74. data/lib/adva/rack/static.rb +50 -0
  75. data/lib/adva/registry.rb +62 -0
  76. data/lib/adva/responder.rb +21 -0
  77. data/lib/adva/responder/redirect.rb +31 -0
  78. data/lib/adva/routing_filters/section_path.rb +72 -0
  79. data/lib/adva/routing_filters/section_root.rb +65 -0
  80. data/lib/adva/tasks/core.rake +9 -0
  81. data/lib/adva/tasks/core.rb +160 -0
  82. data/lib/adva/testing.rb +57 -0
  83. data/lib/adva/testing/engine.rb +37 -0
  84. data/lib/adva/view.rb +7 -0
  85. data/lib/adva/view/form.rb +44 -0
  86. data/lib/adva/view/form/tabs.rb +46 -0
  87. data/lib/adva/view/menu.rb +51 -0
  88. data/lib/adva/view/menu/admin.rb +48 -0
  89. data/lib/adva/view/tabs.rb +28 -0
  90. data/lib/core_ext/rails/action_view/has_many_through_collection_helpers.rb +27 -0
  91. data/lib/core_ext/rails/active_record/skip_callbacks.rb +51 -0
  92. data/lib/core_ext/ruby/array/flatten_once.rb +9 -0
  93. data/lib/core_ext/ruby/kernel/silence_stream.rb +17 -0
  94. data/lib/core_ext/ruby/module/include_anonymous.rb +36 -0
  95. data/lib/core_ext/ruby/module/option_reader.rb +9 -0
  96. data/lib/patches/arel/table_initialization_fixes.rb +68 -0
  97. data/lib/patches/inherited_resources.rb +34 -0
  98. data/lib/patches/rails/arel_table_options_fix.rb +13 -0
  99. data/lib/patches/rails/asset_expansion_multiple_registrations.rb +21 -0
  100. data/lib/patches/rails/recognize_path_env.rb +43 -0
  101. data/lib/patches/rails/route_set_to_param.rb +25 -0
  102. data/lib/patches/rails/sti_associations.rb +17 -0
  103. data/lib/patches/rails/template_resolver_caching.rb +9 -0
  104. data/lib/patches/rails/url_for.rb +60 -0
  105. data/lib/patches/simple_form.rb +37 -0
  106. data/lib/patches/thor/core_ext/hash.rb +7 -0
  107. data/lib/patches/thor/group/symbolized_options.rb +8 -0
  108. data/lib/patches/webrat/links-data-method.rb +19 -0
  109. data/lib/patches/webrat/logger.rb +19 -0
  110. data/lib/patches/webrat/upload_file.rb +28 -0
  111. data/lib/testing/assertions.rb +19 -0
  112. data/lib/testing/factories.rb +30 -0
  113. data/lib/testing/helpers/global_helpers.rb +9 -0
  114. data/lib/testing/paths.rb +54 -0
  115. data/lib/testing/step_definitions/common_steps.rb +279 -0
  116. data/lib/testing/step_definitions/menu_steps.rb +11 -0
  117. data/lib/testing/step_definitions/routes_steps.rb +18 -0
  118. data/lib/testing/step_definitions/transforms.rb +43 -0
  119. data/lib/testing/step_definitions/webrat_steps.rb +291 -0
  120. data/lib/testing/step_definitions/within_steps.rb +17 -0
  121. data/lib/webrat/integrations/rails.rb +33 -0
  122. data/public/images/adva-core/admin/header_bg.png +0 -0
  123. data/public/images/adva-core/admin/menu_checkmark.png +0 -0
  124. data/public/images/adva-core/admin/section_menu_bg.png +0 -0
  125. data/public/images/adva-core/admin/tab_action_active.png +0 -0
  126. data/public/images/adva-core/admin/tab_main_active.png +0 -0
  127. data/public/images/adva-core/admin/tab_sidebar_active.png +0 -0
  128. data/public/images/adva-core/admin/tab_top_active.png +0 -0
  129. data/public/images/adva-core/asset_selected.png +0 -0
  130. data/public/images/adva-core/avatar.gif +0 -0
  131. data/public/images/adva-core/feed.mini.png +0 -0
  132. data/public/images/adva-core/filter-bg.png +0 -0
  133. data/public/images/adva-core/grid.png +0 -0
  134. data/public/images/adva-core/icons/accept.png +0 -0
  135. data/public/images/adva-core/icons/add.png +0 -0
  136. data/public/images/adva-core/icons/arrow_cross.png +0 -0
  137. data/public/images/adva-core/icons/arrow_cross_2.png +0 -0
  138. data/public/images/adva-core/icons/arrow_cross_3.png +0 -0
  139. data/public/images/adva-core/icons/arrow_up_down.png +0 -0
  140. data/public/images/adva-core/icons/assets/audio.png +0 -0
  141. data/public/images/adva-core/icons/assets/doc.png +0 -0
  142. data/public/images/adva-core/icons/assets/pdf.png +0 -0
  143. data/public/images/adva-core/icons/assets/video.png +0 -0
  144. data/public/images/adva-core/icons/attach.png +0 -0
  145. data/public/images/adva-core/icons/bin.png +0 -0
  146. data/public/images/adva-core/icons/bin_closed.png +0 -0
  147. data/public/images/adva-core/icons/bin_empty.png +0 -0
  148. data/public/images/adva-core/icons/bullet_black.png +0 -0
  149. data/public/images/adva-core/icons/bullet_delete.png +0 -0
  150. data/public/images/adva-core/icons/bullet_error.png +0 -0
  151. data/public/images/adva-core/icons/bullet_go.png +0 -0
  152. data/public/images/adva-core/icons/bullet_red.png +0 -0
  153. data/public/images/adva-core/icons/bullet_white.png +0 -0
  154. data/public/images/adva-core/icons/bullet_yellow.png +0 -0
  155. data/public/images/adva-core/icons/cancel.png +0 -0
  156. data/public/images/adva-core/icons/comment.gif +0 -0
  157. data/public/images/adva-core/icons/comment.png +0 -0
  158. data/public/images/adva-core/icons/comment_add.png +0 -0
  159. data/public/images/adva-core/icons/comment_blue.gif +0 -0
  160. data/public/images/adva-core/icons/comment_delete.png +0 -0
  161. data/public/images/adva-core/icons/comment_edit.png +0 -0
  162. data/public/images/adva-core/icons/comment_yellow.gif +0 -0
  163. data/public/images/adva-core/icons/cross.png +0 -0
  164. data/public/images/adva-core/icons/delete.png +0 -0
  165. data/public/images/adva-core/icons/eye.png +0 -0
  166. data/public/images/adva-core/icons/favorites.png +0 -0
  167. data/public/images/adva-core/icons/help.png +0 -0
  168. data/public/images/adva-core/icons/hourglass.png +0 -0
  169. data/public/images/adva-core/icons/icon_attachment.gif +0 -0
  170. data/public/images/adva-core/icons/icon_padlock.gif +0 -0
  171. data/public/images/adva-core/icons/link.png +0 -0
  172. data/public/images/adva-core/icons/lock.png +0 -0
  173. data/public/images/adva-core/icons/magnifier.png +0 -0
  174. data/public/images/adva-core/icons/minus.gif +0 -0
  175. data/public/images/adva-core/icons/page_add.png +0 -0
  176. data/public/images/adva-core/icons/page_delete.png +0 -0
  177. data/public/images/adva-core/icons/page_edit.png +0 -0
  178. data/public/images/adva-core/icons/page_favorites.png +0 -0
  179. data/public/images/adva-core/icons/page_go.png +0 -0
  180. data/public/images/adva-core/icons/page_green.png +0 -0
  181. data/public/images/adva-core/icons/page_red.png +0 -0
  182. data/public/images/adva-core/icons/page_white_add.png +0 -0
  183. data/public/images/adva-core/icons/page_white_delete.png +0 -0
  184. data/public/images/adva-core/icons/page_white_edit.png +0 -0
  185. data/public/images/adva-core/icons/page_white_go.png +0 -0
  186. data/public/images/adva-core/icons/page_white_link.png +0 -0
  187. data/public/images/adva-core/icons/page_white_magnify.png +0 -0
  188. data/public/images/adva-core/icons/pencil.png +0 -0
  189. data/public/images/adva-core/icons/star.png +0 -0
  190. data/public/images/adva-core/icons/stop.png +0 -0
  191. data/public/images/adva-core/icons/tag_green.png +0 -0
  192. data/public/images/adva-core/icons/tick.png +0 -0
  193. data/public/images/adva-core/icons/zoom.png +0 -0
  194. data/public/images/adva-core/indicator.gif +0 -0
  195. data/public/images/adva-core/lines.png +0 -0
  196. data/public/images/adva-core/preview.png +0 -0
  197. data/public/images/adva-core/rails.png +0 -0
  198. data/public/images/adva-core/sortable_tree/drag.png +0 -0
  199. data/public/images/adva-core/theme_selected.png +0 -0
  200. data/public/javascripts/adva-core/admin.js +21 -0
  201. data/public/javascripts/adva-core/jquery/jquery-1.4.2.min.js +154 -0
  202. data/public/javascripts/adva-core/jquery/jquery.table_tree.js +292 -0
  203. data/public/javascripts/adva-core/jquery/jquery.tablednd_0_5.js +386 -0
  204. data/public/javascripts/adva-core/rails.js +127 -0
  205. data/public/javascripts/backup/admin/jquery.admin.js +77 -0
  206. data/public/javascripts/backup/admin/jquery.article.js +22 -0
  207. data/public/javascripts/backup/admin/jquery.cached_pages.js +14 -0
  208. data/public/javascripts/backup/admin/jquery.table_tree.backup.js +279 -0
  209. data/public/javascripts/backup/admin/jquery.table_tree.js +10 -0
  210. data/public/javascripts/backup/application.js +38 -0
  211. data/public/javascripts/backup/application.prototype.js +135 -0
  212. data/public/javascripts/backup/builder.js +136 -0
  213. data/public/javascripts/backup/controls.js +965 -0
  214. data/public/javascripts/backup/cookie.js +49 -0
  215. data/public/javascripts/backup/dragdrop.js +975 -0
  216. data/public/javascripts/backup/effects.js +1130 -0
  217. data/public/javascripts/backup/flash.js +49 -0
  218. data/public/javascripts/backup/jquery.dates.js +49 -0
  219. data/public/javascripts/backup/jquery.flash.js +40 -0
  220. data/public/javascripts/backup/jquery.roles.js +23 -0
  221. data/public/javascripts/backup/jquery/jquery-lowpro.js +224 -0
  222. data/public/javascripts/backup/jquery/jquery-ui.js +273 -0
  223. data/public/javascripts/backup/jquery/jquery.js +19 -0
  224. data/public/javascripts/backup/jquery/jquery.qtip.min.js +15 -0
  225. data/public/javascripts/backup/json.js +139 -0
  226. data/public/javascripts/backup/lowpro.js +320 -0
  227. data/public/javascripts/backup/parseuri.js +39 -0
  228. data/public/javascripts/backup/prototype.js +4320 -0
  229. data/public/javascripts/backup/roles.js +16 -0
  230. data/public/javascripts/backup/scriptaculous.js +60 -0
  231. data/public/javascripts/backup/slider.js +275 -0
  232. data/public/javascripts/backup/sound.js +55 -0
  233. data/public/javascripts/backup/unittest.js +568 -0
  234. data/public/stylesheets/adva-core/admin/forms.css +172 -0
  235. data/public/stylesheets/adva-core/admin/layout.css +38 -0
  236. data/public/stylesheets/adva-core/admin/lists.css +54 -0
  237. data/public/stylesheets/adva-core/admin/navigation.css +234 -0
  238. data/public/stylesheets/adva-core/admin/sidebar.css +87 -0
  239. data/public/stylesheets/adva-core/admin/styles.css +128 -0
  240. data/public/stylesheets/adva-core/common/forms.css +174 -0
  241. data/public/stylesheets/adva-core/common/layout.css +93 -0
  242. data/public/stylesheets/adva-core/common/reset.css +42 -0
  243. data/public/stylesheets/adva-core/common/styles.css +41 -0
  244. data/public/stylesheets/adva-core/default/layout.css +0 -0
  245. data/public/stylesheets/adva-core/default/styles.css +30 -0
  246. data/public/stylesheets/adva-core/simple/layout.css +11 -0
  247. data/public/stylesheets/backup/alternate/common.css +76 -0
  248. data/public/stylesheets/backup/alternate/forms.css +121 -0
  249. data/public/stylesheets/backup/alternate/header.css +125 -0
  250. data/public/stylesheets/backup/alternate/layout.css +103 -0
  251. data/public/stylesheets/backup/alternate/lists.css +153 -0
  252. data/public/stylesheets/backup/alternate/sidebar.css +65 -0
  253. data/public/stylesheets/backup/alternate/top.css +123 -0
  254. data/public/stylesheets/backup/content.css +11 -0
  255. data/public/stylesheets/backup/helptip.css +35 -0
  256. data/public/stylesheets/backup/jquery/alternate/jquery.tooltip.css +13 -0
  257. data/public/stylesheets/backup/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  258. data/public/stylesheets/backup/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  259. data/public/stylesheets/backup/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  260. data/public/stylesheets/backup/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  261. data/public/stylesheets/backup/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  262. data/public/stylesheets/backup/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  263. data/public/stylesheets/backup/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  264. data/public/stylesheets/backup/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  265. data/public/stylesheets/backup/jquery/images/ui-icons_222222_256x240.png +0 -0
  266. data/public/stylesheets/backup/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
  267. data/public/stylesheets/backup/jquery/images/ui-icons_454545_256x240.png +0 -0
  268. data/public/stylesheets/backup/jquery/images/ui-icons_888888_256x240.png +0 -0
  269. data/public/stylesheets/backup/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
  270. data/public/stylesheets/backup/jquery/jquery-ui.css +406 -0
  271. data/public/stylesheets/backup/jquery/jquery.tooltip.css +10 -0
  272. data/public/stylesheets/backup/layout.css +22 -0
  273. data/public/stylesheets/backup/lists.css +17 -0
  274. data/public/stylesheets/backup/menu.css +129 -0
  275. data/public/stylesheets/backup/projection.css +118 -0
  276. data/public/stylesheets/backup/screen/top.css +8 -0
  277. data/public/stylesheets/backup/themes.css +49 -0
  278. data/public/stylesheets/backup/users.css +40 -0
  279. metadata +536 -0
@@ -0,0 +1,9 @@
1
+ Module.class_eval do
2
+ def option_reader(*names)
3
+ options = names.last.is_a?(Hash) ? names.last : {}
4
+ names.each do |name|
5
+ define_method(name) { @options[name.to_sym] }
6
+ define_method(:"#{name}?") { !!@options[name.to_sym] }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,68 @@
1
+ require 'gem_patching'
2
+
3
+ # Arel 1.0.0.rc1 Arel::Table#initialize and #table_exists? does not support
4
+ # instantiating an Arel::Table before the database table has been created.
5
+ #
6
+ # This happens in adva-cms2 during the setup of the cucumber test application
7
+ # where the environment has to be loaded (and thus models will be loaded) and
8
+ # migrations will only be run afterwards.
9
+ #
10
+ # see http://github.com/rails/arel/commit/19c5a95f1093653d2628dfb2f53637b0425dbba4#commitcomment-133903
11
+ #
12
+ # Also, in Arel 1.0.0.rc1 Arel::Table#initialize @options won't be initialized
13
+ # if the second argument is an engine, so #as will crash subsequently.
14
+ #
15
+ # These issues have been fixed in:
16
+ #
17
+ # http://github.com/svenfuchs/arel/commit/4b476404cbbecfedc255039c66c6eececb667d7f
18
+ # http://github.com/svenfuchs/arel/commit/3b1b24551106bc116cba404c992b513c5fbd137b
19
+
20
+ Gem.patching('arel', '1.0.1') do
21
+ Arel::Table.class_eval do
22
+ def initialize(name, options = {})
23
+ @name = name.to_s
24
+ @table_exists = nil
25
+ @table_alias = nil
26
+ @christener = Arel::Sql::Christener.new
27
+ @attributes = nil
28
+ @matching_attributes = nil
29
+
30
+ if options.is_a?(Hash)
31
+ @options = options
32
+ @engine = options[:engine] || Arel::Table.engine
33
+
34
+ if options[:as]
35
+ as = options[:as].to_s
36
+ @table_alias = as unless as == @name
37
+ end
38
+ else
39
+ @engine = options # Table.new('foo', engine)
40
+ @options = {}
41
+ end
42
+
43
+ if @engine.connection
44
+ begin
45
+ require "arel/engines/sql/compilers/#{@engine.adapter_name.downcase}_compiler"
46
+ rescue LoadError
47
+ begin
48
+ # try to load an externally defined compiler, in case this adapter has defined the compiler on its own.
49
+ require "#{@engine.adapter_name.downcase}/arel_compiler"
50
+ rescue LoadError
51
+ raise "#{@engine.adapter_name} is not supported by Arel."
52
+ end
53
+ end
54
+
55
+ @@tables ||= engine.connection.tables
56
+ end
57
+ end
58
+
59
+ def as(table_alias)
60
+ @options ||= {}
61
+ Arel::Table.new(name, options.merge(:as => table_alias))
62
+ end
63
+
64
+ def table_exists?
65
+ @table_exists ||= @@tables.include?(name) || engine.connection.table_exists?(name)
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,34 @@
1
+ require 'inherited_resources'
2
+
3
+ Gem.patching('inherited_resources', '1.1.2') do
4
+ InheritedResources::Actions.module_eval do
5
+ module Actions
6
+ def index(options={}, &block)
7
+ respond_with(*(with_chain(resource_class) << options), &block)
8
+ end
9
+ alias :index! :index
10
+ end
11
+ end
12
+
13
+ InheritedResources::BaseHelpers.module_eval do
14
+ def collection
15
+ get_collection_ivar || begin
16
+ collection = end_of_association_chain
17
+ collection = collection.find(:all) unless collection.respond_to?(:each)
18
+ set_collection_ivar(collection)
19
+ end
20
+ end
21
+
22
+ def build_resource
23
+ get_resource_ivar || begin
24
+ resource = end_of_association_chain.send(method_for_build, params[resource_instance_name] || {})
25
+ # check if resource is included to prevent deleting from a relation
26
+ if method_for_build == :build && end_of_association_chain.include?(resource)
27
+ end_of_association_chain.delete(resource)
28
+ end
29
+ set_resource_ivar(resource)
30
+ end
31
+ end
32
+ end
33
+ end
34
+
@@ -0,0 +1,13 @@
1
+ # require 'gem_patching'
2
+ #
3
+ # # Arel w/ Rails 3.0.0.rc2 breaks when #as is called on a table that was initialized w/
4
+ # # an engine as second parameter
5
+ # Gem.patching('rails', '3.0.0.rc2') do
6
+ # Arel::Table.class_eval do
7
+ # def initialize_with_options_fix(name, options = {})
8
+ # initialize_without_options_fix(name, options)
9
+ # @options ||= {}
10
+ # end
11
+ # alias_method_chain :initialize, :options_fix
12
+ # end
13
+ # end
@@ -0,0 +1,21 @@
1
+ # Allow to register javascript/stylesheet_expansions to existing symbols
2
+ #
3
+ # see https://rails.lighthouseapp.com/projects/8994/tickets/1975-allow-to-register-javascriptstylesheet_expansions-to-existing-symbols
4
+
5
+ require 'action_view/helpers/asset_tag_helper'
6
+
7
+ module ActionView::Helpers::AssetTagHelper
8
+ def self.register_javascript_expansion(expansions)
9
+ expansions.each do |key, values|
10
+ @@javascript_expansions[key] ||= []
11
+ @@javascript_expansions[key] += Array(values)
12
+ end
13
+ end
14
+
15
+ def self.register_stylesheet_expansion(expansions)
16
+ expansions.each do |key, values|
17
+ @@stylesheet_expansions[key] ||= []
18
+ @@stylesheet_expansions[key] += Array(values)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,43 @@
1
+ require 'action_dispatch/routing/mapper'
2
+ require 'action_dispatch/routing/route_set'
3
+
4
+ module ActionDispatch
5
+ module Routing
6
+ class RouteSet
7
+ def recognize_path(path, environment = {})
8
+ method = (environment[:method] || "GET").to_s.upcase
9
+ path = Rack::Mount::Utils.normalize_path(path)
10
+
11
+ begin
12
+
13
+ # TODO submit a rails patch
14
+
15
+ # env = Rack::MockRequest.env_for(path, {:method => method})
16
+ env = Rack::MockRequest.env_for(path, {:method => method}).merge(environment)
17
+ rescue URI::InvalidURIError => e
18
+ raise ActionController::RoutingError, e.message
19
+ end
20
+
21
+ req = Rack::Request.new(env)
22
+ @set.recognize(req) do |route, matches, params|
23
+ params.each do |key, value|
24
+ if value.is_a?(String)
25
+ value = value.dup.force_encoding(Encoding::BINARY) if value.encoding_aware?
26
+ params[key] = URI.unescape(value)
27
+ end
28
+ end
29
+
30
+ dispatcher = route.app
31
+ dispatcher = dispatcher.app while dispatcher.is_a?(Mapper::Constraints)
32
+
33
+ if dispatcher.is_a?(Dispatcher) && dispatcher.controller(params, false)
34
+ dispatcher.prepare_params!(params)
35
+ return params
36
+ end
37
+ end
38
+
39
+ raise ActionController::RoutingError, "No route matches #{path.inspect}"
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,25 @@
1
+ # make route_set generator pass the current segment/param name to to_param
2
+ # if arity allows it. so we can use param names in routes and distinguish them
3
+ # in the model.
4
+
5
+ require 'action_dispatch/routing/route_set'
6
+
7
+ ActionDispatch::Routing::RouteSet::Generator.class_eval do
8
+ def opts
9
+ parameterize = lambda do |name, value|
10
+ if name == :controller
11
+ value
12
+ elsif value.is_a?(Array)
13
+ value.map { |v| Rack::Mount::Utils.escape_uri(to_param(name, v)) }.join('/')
14
+ else
15
+ return nil unless param = to_param(name, value)
16
+ param.split('/').map { |v| Rack::Mount::Utils.escape_uri(v) }.join("/")
17
+ end
18
+ end
19
+ {:parameterize => parameterize}
20
+ end
21
+
22
+ def to_param(name, value)
23
+ value.method(:to_param).arity == 1 ? value.to_param(name) : value.to_param
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ require 'gem_patching'
2
+
3
+ # Make build associations have their given type
4
+ # i.e.: site.sections.build(:type => 'Page').class == Page
5
+ # http://pragmatig.com/2010/06/04/fixing-rails-nested-attributes-on-collections-with-sti
6
+
7
+ Gem.patching('rails', '3.0.0') do
8
+ class ActiveRecord::Reflection::AssociationReflection
9
+ def build_association(*options)
10
+ if options.first.is_a?(Hash) && options.first[:type].present?
11
+ options.first[:type].to_s.constantize.new(*options)
12
+ else
13
+ klass.new(*options)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ # Gem.patching('rails', '3.0.0.rc') do
2
+ # require 'action_view/template/resolver'
3
+ # ActionView::Resolver.class_eval do
4
+ # def caching?
5
+ # # @caching ||= !defined?(Rails.application) || Rails.application.config.cache_classes
6
+ # @caching ||= !defined?(Rails.application) || Rails.application.nil? || Rails.application.config.cache_classes
7
+ # end
8
+ # end
9
+ # end
@@ -0,0 +1,60 @@
1
+ require 'gem_patching'
2
+
3
+ # remove trailing segments '.1' and query params '?=1' from url
4
+ Gem.patching('rails', '3.0.0') do
5
+ ActionDispatch::Routing::RouteSet.class_eval do
6
+ def url_for_with_singleton_resource_patch(options)
7
+ url_for_without_singleton_resource_patch(options).
8
+ sub(/\.\d+(\Z|\?)/) { $1 || '' }.
9
+ sub(/\?=\d+$/, '')
10
+ end
11
+ alias_method_chain :url_for, :singleton_resource_patch
12
+ end
13
+ end
14
+
15
+ # walks up the inheritance chain for given records if the generated named route
16
+ # helper does not exist
17
+ # see https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/2986-polymorphic_url-should-handle-sti-better
18
+ Gem.patching('rails', '3.0.0') do
19
+ require 'action_dispatch/routing/polymorphic_routes'
20
+
21
+ ActionDispatch::Routing::PolymorphicRoutes.module_eval do
22
+ def build_named_route_call_with_sti_fallbacks(records, inflection, options = {})
23
+ # FIXME should cache successful transformation for reuse
24
+ # FIXME currently only works if records is an array (also might be a single record or a Hash)
25
+ original_records = records
26
+ records = records.dup unless records.is_a?(Symbol)
27
+ method = build_named_route_call_without_sti_fallbacks(records, inflection, options)
28
+ if !respond_to?(method, true) && original_records.is_a?(Array) && records = walk_sti_for_named_route_call(original_records.dup)
29
+ build_named_route_call_with_sti_fallbacks(records, inflection, options)
30
+ else
31
+ method
32
+ end
33
+ end
34
+ alias_method_chain :build_named_route_call, :sti_fallbacks
35
+
36
+ def walk_sti_for_named_route_call(records)
37
+ walked = []
38
+ while record = records.pop
39
+ if record.is_a?(ActiveRecord::Base) && record.class.superclass != ActiveRecord::Base
40
+ return records + [record.becomes(record.class.superclass)] + walked
41
+ end
42
+ walked << record
43
+ end
44
+ nil
45
+ end
46
+ end
47
+ end
48
+
49
+ # ActionDispatch::Integration::Runner defines method_missing but no accompaning
50
+ # respond_to? method. It thus doesn't respond_to? to named route url helpers even
51
+ # though it actually responds to them. Happens with the PolymorphicRoutes patch
52
+ # above, so this patch is here as well.
53
+ Gem.patching('rails', '3.0.0') do
54
+ ActionDispatch::Integration::Runner.module_eval do
55
+ def respond_to?(method, include_private = false)
56
+ @integration_session.respond_to?(method, include_private) || super
57
+ end
58
+ end
59
+ end
60
+
@@ -0,0 +1,37 @@
1
+ require 'gem_patching'
2
+
3
+ # add "blog edit_blog" as css classes. should propose a patch to simple_form
4
+
5
+ Gem.patching('simple_form', '1.2.2') do
6
+ SimpleForm::ActionViewExtensions::FormHelper.module_eval do
7
+ [:form_for, :fields_for, :remote_form_for].each do |helper|
8
+ class_eval <<-METHOD, __FILE__, __LINE__
9
+ def simple_#{helper}(record_or_name_or_array, *args, &block)
10
+ css_classes = simple_css_classes(record_or_name_or_array)
11
+
12
+ options = args.extract_options!
13
+ options[:builder] = SimpleForm::FormBuilder
14
+ options[:html] ||= {}
15
+ options[:html][:class] = "simple_form \#{css_classes} \#{options[:html][:class]}".strip
16
+
17
+ with_custom_field_error_proc do
18
+ #{helper}(record_or_name_or_array, *(args << options), &block)
19
+ end
20
+ end
21
+ METHOD
22
+
23
+ def simple_css_classes(record_or_name_or_array)
24
+ css_classes = case record_or_name_or_array
25
+ when String, Symbol
26
+ record_or_name_or_array.to_s
27
+ when Array
28
+ record = record_or_name_or_array.last
29
+ action = record.new_record? ? 'new' : 'edit'
30
+ [dom_class(record), dom_class(record, action)].join(' ')
31
+ else
32
+ dom_class(record_or_name_or_array)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,7 @@
1
+ require 'thor/core_ext/hash_with_indifferent_access'
2
+
3
+ Thor::CoreExt::HashWithIndifferentAccess.class_eval do
4
+ def to_hash
5
+ Hash.new.merge(self)
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ require 'thor/group'
2
+
3
+ Thor::Group.class_eval do
4
+ protected
5
+ def symbolized_options
6
+ options.to_hash.symbolize_keys
7
+ end
8
+ end
@@ -0,0 +1,19 @@
1
+ begin
2
+ require 'webrat'
3
+ rescue LoadError
4
+ end
5
+ require 'gem_patching'
6
+
7
+ Gem.patching('webrat', '0.7.0') do
8
+ Webrat::Link.class_eval do
9
+ def http_method
10
+ if !@element["data-method"].blank?
11
+ @element["data-method"]
12
+ elsif !onclick.blank? && onclick.include?("f.submit()")
13
+ http_method_from_js_form
14
+ else
15
+ :get
16
+ end
17
+ end
18
+ end
19
+ end if defined?(Webrat)
@@ -0,0 +1,19 @@
1
+ begin
2
+ require 'webrat'
3
+ rescue LoadError
4
+ end
5
+ # require 'webrat/core/logging'
6
+ require 'gem_patching'
7
+
8
+ Gem.patching('webrat', '0.7.0') do
9
+ Webrat::Logging.class_eval do
10
+ def logger
11
+ case Webrat.configuration.mode
12
+ when :rails
13
+ defined?(Rails) ? Rails.logger : nil
14
+ else
15
+ super
16
+ end
17
+ end
18
+ end
19
+ end if defined?(Webrat)
@@ -0,0 +1,28 @@
1
+ begin
2
+ require 'webrat'
3
+ rescue LoadError
4
+ end
5
+ # require 'webrat/core/logging'
6
+ require 'gem_patching'
7
+
8
+ Gem.patching('webrat', '0.7.0') do
9
+ Webrat::FileField.class_eval do
10
+ include ActionDispatch::TestProcess
11
+
12
+ def test_uploaded_file
13
+ return "" if @value.blank?
14
+
15
+ case Webrat.configuration.mode
16
+ when :rails
17
+ if content_type
18
+ # Rails 3 does not have an ActionController::TestUploadedFile anymore
19
+ Rack::Test::UploadedFile.new(@value, content_type)
20
+ else
21
+ Rack::Test::UploadedFile.new(@value)
22
+ end
23
+ when :rack, :merb
24
+ Rack::Test::UploadedFile.new(@value, content_type)
25
+ end
26
+ end
27
+ end
28
+ end if defined?(Webrat)
@@ -0,0 +1,19 @@
1
+ def assert_email_sent(attributes)
2
+ emails = ::ActionMailer::Base.deliveries
3
+ assert !emails.empty?, "No emails were sent"
4
+ matching_emails = emails.select do |email|
5
+ attributes.all? do |name, value|
6
+ case name
7
+ when 'body'
8
+ value.split(',').map(&:strip).all? { |value| email.body.include?(value) }
9
+ else
10
+ email.send(name).to_s == value
11
+ end
12
+ end
13
+ end
14
+ assert !matching_emails.empty?, begin
15
+ msg = ["None of the #{emails.size} emails matched #{attributes.inspect}.\nInstead, there are the following emails:"]
16
+ msg += emails.map { |email| attributes.keys.map { |key| [key, email.send(key)] }.map { |key, value| "#{key}: #{value}" }.join(',') }
17
+ msg.join("\n")
18
+ end
19
+ end