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,28 @@
1
+ require 'action_controller'
2
+
3
+ begin
4
+ require 'reference_tracking'
5
+ rescue LoadError
6
+ end
7
+
8
+ # Stub methods for ReferenceTracking. Will only be used if ReferenceTracking
9
+ # (which is only required by adva-cache) is not available.
10
+
11
+ module Adva
12
+ module Controller
13
+ module References
14
+ module Stubs
15
+ def self.included(base)
16
+ base.class_eval do
17
+ def self.tracks(*); end
18
+ def self.purges(*); end
19
+ end
20
+ end
21
+ def purge?(*); end
22
+ end
23
+
24
+ ActionController::Base.send(:include, Stubs) unless defined?(ReferenceTracking)
25
+ end
26
+ end
27
+ end
28
+
@@ -0,0 +1,84 @@
1
+ require 'rails'
2
+ require 'rails/engine'
3
+ require 'adva'
4
+
5
+ require 'simple_form'
6
+ require 'simple_slugs'
7
+ require 'simple_nested_set'
8
+ require 'simple_slugs'
9
+ require 'has_many_polymorphs'
10
+ require 'minimal'
11
+ require 'silence_log_tailer'
12
+
13
+ require 'routing_filter'
14
+ require 'adva/routing_filters/section_path'
15
+ require 'adva/routing_filters/section_root'
16
+ require 'adva/controller/abstract_actions'
17
+ require 'adva/controller/references'
18
+ require 'adva/active_record/has_options'
19
+ require 'adva/view/tabs'
20
+ require 'adva/view/form'
21
+
22
+ require 'core_ext/ruby/module/include_anonymous'
23
+ require 'core_ext/rails/action_view/has_many_through_collection_helpers'
24
+ require 'core_ext/rails/active_record/skip_callbacks'
25
+
26
+ module Adva
27
+ class Core < ::Rails::Engine
28
+ include Adva::Engine
29
+
30
+ initializer 'adva-core.register_middlewares.static' do
31
+ config.app_middleware.insert_before 'Rack::Lock', Adva::Rack::Static
32
+ end
33
+
34
+ initializer 'adva-core.require_section_types' do
35
+ config.to_prepare { require_dependency 'page' }
36
+ end
37
+
38
+ initializer 'adva-core.setup_minimal' do
39
+ require 'inherited_resources/helpers'
40
+
41
+ Minimal::Template::FormBuilderProxy::PROXY_TAGS << :simple_form_for << :simple_fields_for
42
+ Minimal::Template.class_eval do
43
+ include Minimal::Template::FormBuilderProxy
44
+ include Minimal::Template::TranslatedTags
45
+ include InheritedResources::Helpers::LinkTo
46
+ include FormHelper
47
+ end
48
+ ActionView::Template.register_template_handler('rb', Minimal::Template::Handler)
49
+ end
50
+
51
+ initializer 'adva-core.register_asset_expansions' do
52
+ ActionView::Helpers::AssetTagHelper.register_javascript_expansion(
53
+ :common => %w(),
54
+ :simple => %w(),
55
+ :default => %w(),
56
+ :admin => %w( adva-core/jquery/jquery-1.4.2.min.js
57
+ adva-core/jquery/jquery.tablednd_0_5.js
58
+ adva-core/jquery/jquery.table_tree.js
59
+ adva-core/rails
60
+ adva-core/admin )
61
+ )
62
+
63
+ ActionView::Helpers::AssetTagHelper.register_stylesheet_expansion(
64
+ :common => %w( adva-core/common/reset
65
+ adva-core/common/layout
66
+ adva-core/common/styles
67
+ adva-core/common/forms ),
68
+
69
+ :simple => %w( adva-core/simple/layout ),
70
+
71
+ :default => %w( adva-core/default/layout
72
+ adva-core/default/styles ),
73
+
74
+ :admin => %w( adva-core/common/reset
75
+ adva-core/admin/layout
76
+ adva-core/admin/navigation
77
+ adva-core/admin/sidebar
78
+ adva-core/admin/styles
79
+ adva-core/admin/forms
80
+ adva-core/admin/lists )
81
+ )
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,64 @@
1
+ # Common behaviour that we want included in all adva engines
2
+
3
+ module Adva
4
+ module Engine
5
+ autoload :SlicedModels, 'adva/engine/sliced_models'
6
+
7
+ class << self
8
+ def included(base)
9
+ base.class_eval do
10
+ include Initializations # ugh. why does these need to be both class
11
+ extend Initializations # and instance methods?
12
+
13
+ engine_name = base.name.underscore.split('/').last
14
+
15
+ config.autoload_paths << paths.app.views.to_a.first
16
+
17
+ paths.lib.tasks = Dir[root.join('lib/adva/tasks/*.*')]
18
+
19
+ initializer "adva-#{engine_name}.require_patches" do |app|
20
+ require_patches
21
+ end
22
+
23
+ initializer "adva-#{engine_name}.load_redirects" do |app|
24
+ load_redirects
25
+ end
26
+
27
+ initializer "adva-#{engine_name}.preload_sliced_models" do |app|
28
+ engine = self
29
+ config.to_prepare { engine.preload_sliced_models }
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ module Initializations
36
+ include SlicedModels
37
+
38
+ def engine_name
39
+ name = is_a?(Class) ? self.name : self.class.name # ughugh.
40
+ name.underscore.split('/').last
41
+ end
42
+
43
+ def require_patches
44
+ Dir[root.join('lib/patches/**/*.rb')].each { |patch| require patch }
45
+ end
46
+
47
+ def load_redirects
48
+ begin
49
+ load root.join('config/redirects.rb')
50
+ rescue LoadError
51
+ end
52
+ end
53
+
54
+ def copy_migrations
55
+ Dir[root.join('db/migrate/*')].map do |source|
56
+ target = File.expand_path(source.gsub(root.to_s, '.'))
57
+ FileUtils.mkdir_p(File.dirname(target))
58
+ FileUtils.cp(source, target)
59
+ target
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,35 @@
1
+ module Adva
2
+ module Engine
3
+ module SlicedModels
4
+ # TODO while preloading seems to work fine, it slows the dev mode down
5
+ # quite a bit. should be replace with an approace which lazyloads sliced
6
+ # models in Dependencies maybe an after-load hook in Dependencies would
7
+ # work.
8
+ def preload_sliced_models
9
+ types = %w(helpers controllers models views)
10
+ paths = types.map { |type| self.paths.app.send(type).to_a.first }
11
+ pattern = %r((?:#{paths.join('|')})/((?:\w+/)*\w+_slice(?:.\w+)*).rb$)
12
+
13
+ Dir["{#{paths.join(',')}}/**/*.rb"].each do |filename|
14
+ if filename =~ pattern
15
+ begin
16
+ require_dependency $1.gsub(%r(_slice), '')
17
+ require_dependency filename
18
+ rescue LoadError
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ require 'rails'
28
+
29
+ Rails::Application.class_eval do
30
+ include Adva::Engine::SlicedModels
31
+
32
+ initializer "application.preload_sliced_models" do |app|
33
+ config.to_prepare { app.preload_sliced_models }
34
+ end
35
+ end
@@ -0,0 +1,8 @@
1
+ module Adva
2
+ module Generators
3
+ autoload :App, 'adva/generators/app'
4
+ autoload :Engine, 'adva/generators/engine'
5
+ autoload :Gemfile, 'adva/generators/gemfile'
6
+ autoload :Install, 'adva/generators/install'
7
+ end
8
+ end
@@ -0,0 +1,121 @@
1
+ STDOUT.sync = true
2
+
3
+ require 'fileutils'
4
+ require 'active_record'
5
+ require 'active_support/core_ext/hash/reverse_merge'
6
+ require 'rails/generators'
7
+ require 'rails/generators/rails/app/app_generator'
8
+ require 'core_ext/ruby/module/option_reader'
9
+
10
+ module Adva
11
+ module Generators
12
+ class App
13
+ DEFAULT_OPTIONS = {
14
+ :source => File.expand_path('../../../../..', __FILE__),
15
+ :target => File.expand_path('.'),
16
+ :template => File.expand_path('../templates/app/app_template.rb', __FILE__),
17
+ :engines => [:all],
18
+ :resources => false,
19
+ :migrate => false,
20
+ :bundle => false,
21
+ :force => false
22
+ }
23
+
24
+ def initialize(name, options = {}, &block)
25
+ @options = options.reverse_merge!(DEFAULT_OPTIONS)
26
+ @name = name || File.basename(source)
27
+ raise ArgumentError, "#{source.inspect} is not a directory" unless File.directory?(source)
28
+ end
29
+
30
+ def invoke
31
+ if force? || build?
32
+ build
33
+ generate_resources if generate_resources?
34
+ bundle if bundle?
35
+ load_environment if block_given? || migrate?
36
+ exec(&block) if block_given?
37
+ install
38
+ migrate if migrate?
39
+ else
40
+ load_environment
41
+ end
42
+ end
43
+
44
+ protected
45
+
46
+ attr_reader :name
47
+ option_reader :source, :target, :template, :engines, :resources, :migrate, :bundle, :force
48
+
49
+ def root
50
+ "#{target}/#{name}"
51
+ end
52
+
53
+ def build
54
+ puts "Building application ..."
55
+ FileUtils.rm_r(root) if File.exists?(root)
56
+ in_root do
57
+ options = force? || ENV.key?('REGENERATE_APP') ? ['-f'] : []
58
+ generator = Rails::Generators::AppGenerator.new([root], options, :shell => shell)
59
+ generator.invoke_all
60
+ generator.apply(template, :source => Pathname.new(source))
61
+ FileUtils.cp("#{source}/Thorfile", "#{root}/Thorfile")
62
+ end
63
+ end
64
+
65
+ def install
66
+ puts "Installing adva engines ..."
67
+ in_root { Adva::Generators::Install.new(engines).invoke }
68
+ end
69
+
70
+ def migrate
71
+ puts "Migrating database ..."
72
+ in_root { ActiveRecord::Migrator.migrate('db/migrate/') }
73
+ end
74
+
75
+ def bundle
76
+ puts "Bundling gems ..."
77
+ in_root { run 'bundle install' }
78
+ end
79
+
80
+ def load_environment
81
+ puts "Loading environment ..."
82
+ in_root { require "config/environment" }
83
+ end
84
+
85
+ def generate_resources
86
+ puts "Generating resources ..."
87
+ FileUtils.cp(resources, "#{root}/config/resource_layout.rb")
88
+ run "rails generate resource_layout --generator=ingoweiss:scaffold"
89
+ end
90
+
91
+ def exec(&block)
92
+ in_root { self.instance_exec(&block) }
93
+ end
94
+
95
+ def build?
96
+ ENV.key?('REGENERATE_APP') || !exists?
97
+ end
98
+
99
+ def generate_resources?
100
+ resources && File.exists?(resources)
101
+ end
102
+
103
+ def exists?
104
+ File.exists?(root)
105
+ end
106
+
107
+ def in_root(&block)
108
+ FileUtils.mkdir_p(root) unless File.directory?(root)
109
+ Dir.chdir(root) { yield }
110
+ end
111
+
112
+ def run(command, &block)
113
+ in_root { system "#{command}" }
114
+ end
115
+
116
+ def shell
117
+ Thor::Shell::Color.new
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,58 @@
1
+ require 'rails/generators'
2
+
3
+ module Adva
4
+ module Generators
5
+ class Engine < Rails::Generators::Base
6
+ source_root File.expand_path('../templates/engine', __FILE__)
7
+
8
+ attr_reader :name
9
+
10
+ def initialize(name, options = {})
11
+ @name = name
12
+ super()
13
+ end
14
+
15
+ def build
16
+ empty_directory "adva-#{name}"
17
+ template "gemspec.erb", "adva-#{name}/adva-#{name}.gemspec"
18
+ template 'Gemfile.erb', "adva-#{name}/Gemfile"
19
+
20
+ empty_directory "adva-#{name}/app"
21
+ empty_directory "adva-#{name}/app/controllers"
22
+ empty_directory "adva-#{name}/app/models"
23
+ empty_directory "adva-#{name}/app/views"
24
+
25
+ empty_directory "adva-#{name}/config"
26
+ empty_directory "adva-#{name}/config/locales"
27
+ template 'en.yml.erb', "adva-#{name}/config/locales/en.yml"
28
+ template 'redirects.rb.erb', "adva-#{name}/config/redirects.rb"
29
+ template 'routes.rb.erb', "adva-#{name}/config/routes.rb"
30
+
31
+ empty_directory "adva-#{name}/db/migrate"
32
+ template 'migration.rb.erb', "adva-#{name}/db/migrate/#{migration_timestamp}_adva_#{name}_create_tables.rb"
33
+
34
+ empty_directory "adva-#{name}/lib/adva"
35
+ create_file "adva-#{name}/lib/adva-#{name}.rb", "require 'adva/#{name}'"
36
+ template 'engine.rb.erb', "adva-#{name}/lib/adva/#{name}.rb"
37
+
38
+ empty_directory "adva-#{name}/test"
39
+ template 'all.rb', "adva-#{name}/test/all.rb"
40
+ template 'test_helper.rb.erb', "adva-#{name}/test/test_helper.rb"
41
+ end
42
+
43
+ protected
44
+
45
+ def migration_timestamp
46
+ Time.now.strftime('%Y%m%d%H%M%S')
47
+ end
48
+
49
+ def table_name
50
+ name.tableize
51
+ end
52
+
53
+ def class_name
54
+ name.camelize
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,50 @@
1
+ module Adva
2
+ module Generators
3
+ class Gemfile
4
+ attr_reader :source, :target, :engines
5
+
6
+ def initialize(target, options = {})
7
+ self.engines = options[:engines]
8
+ @target = Pathname.new(target)
9
+ @source = options[:source] || raise('no source given') # TODO should bubble up to find the current Gemfile
10
+ @engines = engines
11
+ end
12
+
13
+ def write
14
+ File.open(target, 'w+') { |f| f.write(with_engines) }
15
+ end
16
+
17
+ protected
18
+
19
+ def engines=(engines)
20
+ engines = engine_names if engines.blank? || Array(engines).include?(:all)
21
+ engines.unshift(:core) unless engines.include?(:core)
22
+ @engines = engines.map(&:to_sym).uniq
23
+ end
24
+
25
+ def with_engines
26
+ lines.join.sub(adva_gem_lines.join, engine_lines.join("\n"))
27
+ end
28
+
29
+ def engine_lines
30
+ engines.map { |engine| engine_line(engine) }
31
+ end
32
+
33
+ def engine_line(engine)
34
+ "gem 'adva-#{engine}', :path => '#{File.expand_path("../adva-#{engine}", source)}'"
35
+ end
36
+
37
+ def engine_names
38
+ Adva.engines.map { |engine| engine.name.demodulize.underscore.to_sym }
39
+ end
40
+
41
+ def adva_gem_lines
42
+ @adva_gem_lines ||= lines.select { |line| line =~ /gem ("|')adva-/ }
43
+ end
44
+
45
+ def lines
46
+ @lines ||= File.readlines(source)
47
+ end
48
+ end
49
+ end
50
+ end