adva-core 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (285) hide show
  1. data/app/controllers/admin/base_controller.rb +20 -0
  2. data/app/controllers/admin/pages_controller.rb +7 -0
  3. data/app/controllers/admin/sections_controller.rb +22 -0
  4. data/app/controllers/admin/sites_controller.rb +16 -0
  5. data/app/controllers/articles_controller.rb +3 -0
  6. data/app/controllers/base_controller.rb +18 -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 +9 -0
  17. data/app/models/section.rb +49 -0
  18. data/app/models/site.rb +24 -0
  19. data/app/views/admin/contents/_menu.html.rb +17 -0
  20. data/app/views/admin/pages/_menu.html.rb +10 -0
  21. data/app/views/admin/pages/new.html.rb +19 -0
  22. data/app/views/admin/pages/show.html.rb +25 -0
  23. data/app/views/admin/sections/_menu.html.rb +45 -0
  24. data/app/views/admin/sections/_section.html.rb +7 -0
  25. data/app/views/admin/sections/_select_type.html.rb +16 -0
  26. data/app/views/admin/sections/index.html.rb +28 -0
  27. data/app/views/admin/sites/_menu.html.rb +2 -0
  28. data/app/views/admin/sites/edit.html.rb +22 -0
  29. data/app/views/admin/sites/index.html.rb +24 -0
  30. data/app/views/admin/sites/new.html.rb +39 -0
  31. data/app/views/admin/sites/show.html.rb +7 -0
  32. data/app/views/installations/new.html.rb +39 -0
  33. data/app/views/installations/show.html.rb +9 -0
  34. data/app/views/layouts/admin.rb +55 -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 +62 -0
  38. data/app/views/layouts/base.rb +64 -0
  39. data/app/views/layouts/default.rb +46 -0
  40. data/app/views/layouts/default/_menu.rb +19 -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 +129 -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 +40 -0
  49. data/lib/adva/active_record/has_one_default.rb +40 -0
  50. data/lib/adva/active_record/has_options.rb +55 -0
  51. data/lib/adva/cli.rb +16 -0
  52. data/lib/adva/controller.rb +7 -0
  53. data/lib/adva/controller/abstract_actions.rb +92 -0
  54. data/lib/adva/controller/internal_redirect.rb +26 -0
  55. data/lib/adva/controller/references.rb +28 -0
  56. data/lib/adva/core.rb +94 -0
  57. data/lib/adva/engine.rb +44 -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 +58 -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/helper/i18n.rb +10 -0
  88. data/lib/adva/view/menu.rb +73 -0
  89. data/lib/adva/view/menu/admin.rb +100 -0
  90. data/lib/adva/view/menu/items.rb +26 -0
  91. data/lib/adva/view/tabs.rb +28 -0
  92. data/lib/adva_core/version.rb +3 -0
  93. data/lib/core_ext/rails/action_view/has_many_through_collection_helpers.rb +27 -0
  94. data/lib/core_ext/rails/active_record/skip_callbacks.rb +51 -0
  95. data/lib/core_ext/ruby/array/flatten_once.rb +9 -0
  96. data/lib/core_ext/ruby/kernel/silence_stream.rb +17 -0
  97. data/lib/core_ext/ruby/module/include_anonymous.rb +36 -0
  98. data/lib/core_ext/ruby/module/option_reader.rb +9 -0
  99. data/lib/patches/inherited_resources.rb +35 -0
  100. data/lib/patches/rails/asset_expansion_multiple_registrations.rb +21 -0
  101. data/lib/patches/rails/integretion_runner_respond_to.rb +13 -0
  102. data/lib/patches/rails/polymorphic_url_for.rb +115 -0
  103. data/lib/patches/rails/recognize_path_env.rb +42 -0
  104. data/lib/patches/rails/route_set_to_param.rb +25 -0
  105. data/lib/patches/rails/route_set_trailing_segment.rb +13 -0
  106. data/lib/patches/rails/sti_associations.rb +17 -0
  107. data/lib/patches/rails/template_resolver_caching.rb +9 -0
  108. data/lib/patches/rails/translation_helper.rb +18 -0
  109. data/lib/patches/responders/flash_responder.rb +17 -0
  110. data/lib/patches/simple_form.rb +37 -0
  111. data/lib/patches/thor/core_ext/hash.rb +7 -0
  112. data/lib/patches/thor/group/symbolized_options.rb +8 -0
  113. data/lib/patches/webrat/links-data-method.rb +15 -0
  114. data/lib/patches/webrat/logger.rb +14 -0
  115. data/lib/patches/webrat/upload_file.rb +23 -0
  116. data/lib/testing/assertions.rb +19 -0
  117. data/lib/testing/env.rb +41 -0
  118. data/lib/testing/factories.rb +28 -0
  119. data/lib/testing/helpers/global_helpers.rb +9 -0
  120. data/lib/testing/paths.rb +54 -0
  121. data/lib/testing/step_definitions/common_steps.rb +287 -0
  122. data/lib/testing/step_definitions/debug_steps.rb +22 -0
  123. data/lib/testing/step_definitions/menu_steps.rb +11 -0
  124. data/lib/testing/step_definitions/routes_steps.rb +18 -0
  125. data/lib/testing/step_definitions/transforms.rb +50 -0
  126. data/lib/testing/step_definitions/webrat_steps.rb +284 -0
  127. data/lib/testing/step_definitions/within_steps.rb +16 -0
  128. data/lib/webrat/integrations/rails.rb +33 -0
  129. data/public/images/adva-core/admin/header_bg.png +0 -0
  130. data/public/images/adva-core/admin/menu_checkmark.png +0 -0
  131. data/public/images/adva-core/admin/section_menu_bg.png +0 -0
  132. data/public/images/adva-core/admin/tab_action_active.png +0 -0
  133. data/public/images/adva-core/admin/tab_main_active.png +0 -0
  134. data/public/images/adva-core/admin/tab_sidebar_active.png +0 -0
  135. data/public/images/adva-core/admin/tab_top_active.png +0 -0
  136. data/public/images/adva-core/asset_selected.png +0 -0
  137. data/public/images/adva-core/avatar.gif +0 -0
  138. data/public/images/adva-core/feed.mini.png +0 -0
  139. data/public/images/adva-core/filter-bg.png +0 -0
  140. data/public/images/adva-core/grid.png +0 -0
  141. data/public/images/adva-core/icons/accept.png +0 -0
  142. data/public/images/adva-core/icons/add.png +0 -0
  143. data/public/images/adva-core/icons/arrow_cross.png +0 -0
  144. data/public/images/adva-core/icons/arrow_cross_2.png +0 -0
  145. data/public/images/adva-core/icons/arrow_cross_3.png +0 -0
  146. data/public/images/adva-core/icons/arrow_up_down.png +0 -0
  147. data/public/images/adva-core/icons/assets/audio.png +0 -0
  148. data/public/images/adva-core/icons/assets/doc.png +0 -0
  149. data/public/images/adva-core/icons/assets/pdf.png +0 -0
  150. data/public/images/adva-core/icons/assets/video.png +0 -0
  151. data/public/images/adva-core/icons/attach.png +0 -0
  152. data/public/images/adva-core/icons/bin.png +0 -0
  153. data/public/images/adva-core/icons/bin_closed.png +0 -0
  154. data/public/images/adva-core/icons/bin_empty.png +0 -0
  155. data/public/images/adva-core/icons/bullet_black.png +0 -0
  156. data/public/images/adva-core/icons/bullet_delete.png +0 -0
  157. data/public/images/adva-core/icons/bullet_error.png +0 -0
  158. data/public/images/adva-core/icons/bullet_go.png +0 -0
  159. data/public/images/adva-core/icons/bullet_red.png +0 -0
  160. data/public/images/adva-core/icons/bullet_white.png +0 -0
  161. data/public/images/adva-core/icons/bullet_yellow.png +0 -0
  162. data/public/images/adva-core/icons/cancel.png +0 -0
  163. data/public/images/adva-core/icons/comment.gif +0 -0
  164. data/public/images/adva-core/icons/comment.png +0 -0
  165. data/public/images/adva-core/icons/comment_add.png +0 -0
  166. data/public/images/adva-core/icons/comment_blue.gif +0 -0
  167. data/public/images/adva-core/icons/comment_delete.png +0 -0
  168. data/public/images/adva-core/icons/comment_edit.png +0 -0
  169. data/public/images/adva-core/icons/comment_yellow.gif +0 -0
  170. data/public/images/adva-core/icons/cross.png +0 -0
  171. data/public/images/adva-core/icons/delete.png +0 -0
  172. data/public/images/adva-core/icons/eye.png +0 -0
  173. data/public/images/adva-core/icons/favorites.png +0 -0
  174. data/public/images/adva-core/icons/help.png +0 -0
  175. data/public/images/adva-core/icons/hourglass.png +0 -0
  176. data/public/images/adva-core/icons/icon_attachment.gif +0 -0
  177. data/public/images/adva-core/icons/icon_padlock.gif +0 -0
  178. data/public/images/adva-core/icons/link.png +0 -0
  179. data/public/images/adva-core/icons/lock.png +0 -0
  180. data/public/images/adva-core/icons/magnifier.png +0 -0
  181. data/public/images/adva-core/icons/minus.gif +0 -0
  182. data/public/images/adva-core/icons/page_add.png +0 -0
  183. data/public/images/adva-core/icons/page_delete.png +0 -0
  184. data/public/images/adva-core/icons/page_edit.png +0 -0
  185. data/public/images/adva-core/icons/page_favorites.png +0 -0
  186. data/public/images/adva-core/icons/page_go.png +0 -0
  187. data/public/images/adva-core/icons/page_green.png +0 -0
  188. data/public/images/adva-core/icons/page_red.png +0 -0
  189. data/public/images/adva-core/icons/page_white_add.png +0 -0
  190. data/public/images/adva-core/icons/page_white_delete.png +0 -0
  191. data/public/images/adva-core/icons/page_white_edit.png +0 -0
  192. data/public/images/adva-core/icons/page_white_go.png +0 -0
  193. data/public/images/adva-core/icons/page_white_link.png +0 -0
  194. data/public/images/adva-core/icons/page_white_magnify.png +0 -0
  195. data/public/images/adva-core/icons/pencil.png +0 -0
  196. data/public/images/adva-core/icons/star.png +0 -0
  197. data/public/images/adva-core/icons/stop.png +0 -0
  198. data/public/images/adva-core/icons/tag_green.png +0 -0
  199. data/public/images/adva-core/icons/tick.png +0 -0
  200. data/public/images/adva-core/icons/zoom.png +0 -0
  201. data/public/images/adva-core/indicator.gif +0 -0
  202. data/public/images/adva-core/lines.png +0 -0
  203. data/public/images/adva-core/preview.png +0 -0
  204. data/public/images/adva-core/theme_selected.png +0 -0
  205. data/public/javascripts/adva-core/admin.js +22 -0
  206. data/public/javascripts/adva-core/jquery/jquery-1.4.2.min.js +154 -0
  207. data/public/javascripts/adva-core/jquery/jquery.table_tree.js +296 -0
  208. data/public/javascripts/adva-core/jquery/jquery.tablednd_0_5.js +385 -0
  209. data/public/javascripts/adva-core/rails.js +127 -0
  210. data/public/javascripts/backup/admin/jquery.admin.js +75 -0
  211. data/public/javascripts/backup/admin/jquery.article.js +22 -0
  212. data/public/javascripts/backup/admin/jquery.cached_pages.js +14 -0
  213. data/public/javascripts/backup/admin/jquery.table_tree.backup.js +279 -0
  214. data/public/javascripts/backup/admin/jquery.table_tree.js +10 -0
  215. data/public/javascripts/backup/application.js +38 -0
  216. data/public/javascripts/backup/application.prototype.js +135 -0
  217. data/public/javascripts/backup/builder.js +136 -0
  218. data/public/javascripts/backup/controls.js +965 -0
  219. data/public/javascripts/backup/cookie.js +49 -0
  220. data/public/javascripts/backup/dragdrop.js +975 -0
  221. data/public/javascripts/backup/effects.js +1130 -0
  222. data/public/javascripts/backup/flash.js +49 -0
  223. data/public/javascripts/backup/jquery.dates.js +49 -0
  224. data/public/javascripts/backup/jquery.flash.js +40 -0
  225. data/public/javascripts/backup/jquery.roles.js +23 -0
  226. data/public/javascripts/backup/jquery/jquery-lowpro.js +224 -0
  227. data/public/javascripts/backup/jquery/jquery-ui.js +273 -0
  228. data/public/javascripts/backup/jquery/jquery.js +19 -0
  229. data/public/javascripts/backup/jquery/jquery.qtip.min.js +15 -0
  230. data/public/javascripts/backup/json.js +139 -0
  231. data/public/javascripts/backup/lowpro.js +320 -0
  232. data/public/javascripts/backup/parseuri.js +39 -0
  233. data/public/javascripts/backup/prototype.js +4320 -0
  234. data/public/javascripts/backup/roles.js +16 -0
  235. data/public/javascripts/backup/scriptaculous.js +60 -0
  236. data/public/javascripts/backup/slider.js +275 -0
  237. data/public/javascripts/backup/sound.js +55 -0
  238. data/public/javascripts/backup/unittest.js +568 -0
  239. data/public/stylesheets/adva-core/admin/forms.css +172 -0
  240. data/public/stylesheets/adva-core/admin/layout.css +38 -0
  241. data/public/stylesheets/adva-core/admin/lists.css +54 -0
  242. data/public/stylesheets/adva-core/admin/navigation.css +234 -0
  243. data/public/stylesheets/adva-core/admin/sidebar.css +87 -0
  244. data/public/stylesheets/adva-core/admin/styles.css +130 -0
  245. data/public/stylesheets/adva-core/common/forms.css +174 -0
  246. data/public/stylesheets/adva-core/common/layout.css +93 -0
  247. data/public/stylesheets/adva-core/common/reset.css +42 -0
  248. data/public/stylesheets/adva-core/common/styles.css +41 -0
  249. data/public/stylesheets/adva-core/default/layout.css +0 -0
  250. data/public/stylesheets/adva-core/default/styles.css +0 -0
  251. data/public/stylesheets/adva-core/simple/layout.css +11 -0
  252. data/public/stylesheets/backup/alternate/common.css +76 -0
  253. data/public/stylesheets/backup/alternate/forms.css +121 -0
  254. data/public/stylesheets/backup/alternate/header.css +125 -0
  255. data/public/stylesheets/backup/alternate/layout.css +103 -0
  256. data/public/stylesheets/backup/alternate/lists.css +153 -0
  257. data/public/stylesheets/backup/alternate/sidebar.css +65 -0
  258. data/public/stylesheets/backup/alternate/top.css +123 -0
  259. data/public/stylesheets/backup/content.css +11 -0
  260. data/public/stylesheets/backup/helptip.css +35 -0
  261. data/public/stylesheets/backup/jquery/alternate/jquery.tooltip.css +13 -0
  262. data/public/stylesheets/backup/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  263. data/public/stylesheets/backup/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  264. data/public/stylesheets/backup/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  265. data/public/stylesheets/backup/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  266. data/public/stylesheets/backup/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  267. data/public/stylesheets/backup/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  268. data/public/stylesheets/backup/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  269. data/public/stylesheets/backup/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  270. data/public/stylesheets/backup/jquery/images/ui-icons_222222_256x240.png +0 -0
  271. data/public/stylesheets/backup/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
  272. data/public/stylesheets/backup/jquery/images/ui-icons_454545_256x240.png +0 -0
  273. data/public/stylesheets/backup/jquery/images/ui-icons_888888_256x240.png +0 -0
  274. data/public/stylesheets/backup/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
  275. data/public/stylesheets/backup/jquery/jquery-ui.css +405 -0
  276. data/public/stylesheets/backup/jquery/jquery.tooltip.css +10 -0
  277. data/public/stylesheets/backup/layout.css +22 -0
  278. data/public/stylesheets/backup/lists.css +17 -0
  279. data/public/stylesheets/backup/menu.css +129 -0
  280. data/public/stylesheets/backup/projection.css +118 -0
  281. data/public/stylesheets/backup/screen/top.css +8 -0
  282. data/public/stylesheets/backup/themes.css +49 -0
  283. data/public/stylesheets/backup/users.css +40 -0
  284. metadata +338 -40
  285. data/lib/bundler/repository.rb +0 -118
@@ -0,0 +1,19 @@
1
+ class Layouts::Default::Menu < Adva::View::Menu
2
+ include do
3
+ def build
4
+ ul(:id => :menu) do
5
+ site.sections.each do |section|
6
+ item(section.name, url_for(section))
7
+ end
8
+ render_items
9
+ end
10
+ end
11
+
12
+ protected
13
+
14
+ def active?(url, options)
15
+ return false if url =~ %r(/admin/sites(/\d+)?$) && request.fullpath != url
16
+ super
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ class Layouts::Simple < Layouts::Base
2
+ include do
3
+ def body
4
+ div do
5
+ div :id => 'page' do
6
+ div :class => 'main' do
7
+ div :id => 'content' do
8
+ flash
9
+ content
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ class Pages::Show < Minimal::Template
2
+ include do
3
+ def to_html
4
+ self << resource.article.body.html_safe
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,53 @@
1
+ require 'simple_form'
2
+ # Use this setup block to configure all options available in SimpleForm.
3
+ SimpleForm.setup do |config|
4
+
5
+ # Components used by the form builder to generate a complete input. You can remove
6
+ # any of them, change the order, or even add your own components to the stack.
7
+ # config.components = [ :label_input, :hint, :error ]
8
+
9
+ # Default tag used on hints.
10
+ # config.hint_tag = :span
11
+
12
+ # Default tag used on errors.
13
+ # config.error_tag = :span
14
+
15
+ # Method used to tidy up errors.
16
+ # config.error_method = :first
17
+
18
+ # Default tag used for error notification helper.
19
+ # config.error_notification_tag = :p
20
+
21
+ # You can wrap all inputs in a pre-defined tag.
22
+ # config.wrapper_tag = :div
23
+
24
+ # CSS class to add to all wrapper tags.
25
+ # config.wrapper_class = :input
26
+
27
+ # CSS class to add to the wrapper if the field has errors.
28
+ # config.wrapper_error_class = :field_with_errors
29
+
30
+ # How the label text should be generated altogether with the required text.
31
+ config.label_text = lambda { |label, required| "#{label}#{required}" }
32
+
33
+ # Whether attributes are required by default (or not). Default is true.
34
+ # config.required_by_default = true
35
+
36
+ # Series of attemps to detect a default label method for collection.
37
+ # config.collection_label_methods = [ :to_label, :name, :title, :to_s ]
38
+
39
+ # Series of attemps to detect a default value method for collection.
40
+ # config.collection_value_methods = [ :id, :to_s ]
41
+
42
+ # Collection of methods to detect if a file type was given.
43
+ # config.file_methods = [ :file?, :public_filename ]
44
+
45
+ # Default priority for time_zone inputs.
46
+ # config.time_zone_priority = nil
47
+
48
+ # Default priority for country inputs.
49
+ # config.country_priority = nil
50
+
51
+ # Default size for text inputs.
52
+ # config.default_input_size = 50
53
+ end
@@ -0,0 +1,129 @@
1
+ en:
2
+ a_or_b: '%{a} or %{b}'
3
+
4
+ flash:
5
+ create:
6
+ notice: '%{resource_name} successfully created.'
7
+ alert: '%{resource_name} could not be created.'
8
+ update:
9
+ notice: '%{resource_name} successfully updated.'
10
+ alert: '%{resource_name} could not be updated.'
11
+ destroy:
12
+ notice: '%{resource_name} successfully deleted.'
13
+ alert: '%{resource_name} could not be deleted.'
14
+ installation:
15
+ protected: "Installation for %{host} is already complete. Please log in with your admin account."
16
+
17
+ confirmations:
18
+ destroy: 'Do you really want to delete this %{model_name}?'
19
+
20
+ menu:
21
+ sections: Sections
22
+ page: Page
23
+ view: View
24
+ new: New
25
+ edit: Edit
26
+ edit_section: Settings
27
+ destroy: Delete
28
+ reorder: Reorder
29
+ confirm_destroy: "Do you really want to delete this %{model_name}?"
30
+
31
+ columns:
32
+ published: Published
33
+ author: Author
34
+
35
+ status:
36
+ published: Published
37
+
38
+ actions:
39
+ view: View
40
+ edit: Edit
41
+ destroy: Delete
42
+
43
+ section:
44
+ types:
45
+ page: Page
46
+ default_name: Home
47
+
48
+ installations:
49
+ new:
50
+ title: adva-cms installation
51
+ welcome: |
52
+ Welcome to the adva-cms less-than-one-minute installation process:
53
+ Just fill in a name for your site below and you're done.
54
+ Don't worry. You can always change everything later.
55
+ section_name: Section Name
56
+ show:
57
+ title: Success!
58
+ confirm: You have successfully created your site. Enjoy!
59
+ link_to_admin: "Manage your new site &raquo;"
60
+
61
+ admin:
62
+ sites:
63
+ index:
64
+ title: Sites
65
+ new:
66
+ title: Create a New Site
67
+ section_name: Section Name
68
+ edit:
69
+ title: Site Settings
70
+ show:
71
+ section:
72
+ new: New Section
73
+ site:
74
+ new: New Site
75
+ sections:
76
+ index:
77
+ title: Sections
78
+ published: Published
79
+ new:
80
+ title: Create a New Section
81
+ pages:
82
+ show:
83
+ title: Edit Page
84
+ new:
85
+ title: Create a New Section
86
+ tabs:
87
+ options: Options
88
+ assets: Assets
89
+
90
+ layouts:
91
+ default:
92
+ made_with: "Made with <a href=\"http://github.com/svenfuchs/adva-cms2\">adva cms 2</a>"
93
+ admin:
94
+ top:
95
+ sites: Sites
96
+ new_site: New Site
97
+ site: Overview
98
+ sections: Sections
99
+ new_section: New Section
100
+ settings: Settings
101
+ assets: Assets
102
+ header:
103
+ sign_in: "Sign in"
104
+ sign_out: "Sign out %{user}"
105
+ change_language: "Change language:"
106
+ website: "Website »"
107
+
108
+ simple_form:
109
+ "yes": 'Yes'
110
+ "no": 'No'
111
+ required:
112
+ text: required
113
+ mark: '*'
114
+ # You can uncomment the line below if you need to overwrite the whole required html.
115
+ # When using html, text and mark won't be used.
116
+ # html: '<abbr title="required">*</abbr>'
117
+ error_notification:
118
+ default_message: "Some errors were found, please take a look:"
119
+ # Labels and hints examples
120
+ # labels:
121
+ # password: 'Password'
122
+ # user:
123
+ # new:
124
+ # email: 'E-mail para efetuar o sign in.'
125
+ # edit:
126
+ # email: 'E-mail.'
127
+ # hints:
128
+ # username: 'User name to sign in.'
129
+ # password: 'No special characters, please.'
@@ -0,0 +1,8 @@
1
+ Adva::Registry.set :redirect, {
2
+ 'installations#create' => lambda { |c| c.installation_url(c.resource) },
3
+ 'articles#show' => lambda { |c| c.show_parent_url },
4
+
5
+ 'admin/sites#update' => lambda { |c| c.edit_url },
6
+ 'admin/pages#update' => lambda { |c| c.show_url },
7
+ 'admin/pages#destroy' => lambda { |c| c.index_url }
8
+ }
data/config/routes.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'routing_filter'
2
+ require 'adva/routing_filters/section_root'
3
+ require 'adva/routing_filters/section_path'
4
+
5
+ Rails.application.routes.draw do
6
+ filter :section_path, :section_root
7
+
8
+ namespace :admin do
9
+ resources :sites do
10
+ resources :sections, :only => [:index, :new, :create]
11
+ resources :pages
12
+ end
13
+ end
14
+
15
+ match 'pages/:id', :to => 'pages#show', :as => :page
16
+ match 'pages/:page_id/article', :to => 'articles#show', :as => :page_article
17
+
18
+ resources :installations, :only => [:new, :create, :show]
19
+
20
+ root :to => redirect('/installations/new') # should only match if no root section is present
21
+ end
data/lib/adva-core.rb ADDED
@@ -0,0 +1 @@
1
+ require 'adva/core'
data/lib/adva.rb ADDED
@@ -0,0 +1,40 @@
1
+ require 'rails/engine'
2
+
3
+ module Adva
4
+ autoload :Engine, 'adva/engine'
5
+ autoload :Generators, 'adva/generators'
6
+ autoload :Rack, 'adva/rack'
7
+ autoload :Registry, 'adva/registry'
8
+ autoload :Responder, 'adva/responder'
9
+ autoload :Tasks, 'adva/tasks/core'
10
+ autoload :Testing, 'adva/testing'
11
+ autoload :View, 'adva/view'
12
+
13
+ mattr_accessor :out
14
+ self.out = $stdout
15
+
16
+ class << self
17
+ def engines
18
+ @engines ||= constants.map do |name|
19
+ constant = const_get(name)
20
+ constant if constant != Adva::Core && constant.is_a?(Class) && constant < ::Rails::Engine
21
+ end.compact.sort { |lft, rgt| lft.name <=> rgt.name }.unshift(Adva::Core)
22
+ end
23
+
24
+ def engine(name)
25
+ name = "Adva::#{name.camelize}" unless name.to_s.starts_with?('Adva::')
26
+ engines.detect { |engine| engine.name == name }
27
+ end
28
+
29
+ def engine_names
30
+ @engine_names ||= engines.map { |constant| constant.name.split('::').last.underscore.to_sym }
31
+ end
32
+
33
+ def engine?(name)
34
+ engine_names.include?(name)
35
+ end
36
+ alias :installed? :engine?
37
+ end
38
+ end
39
+
40
+
@@ -0,0 +1,40 @@
1
+ # Extends has_one associations to allow for a :default option.
2
+ #
3
+ # This will make the page.article association always build a default article
4
+ # unless an article is already set or persisted.
5
+ #
6
+ # class Page < ActiveRecord::Base
7
+ # has_one :article, :default => :build_default_article
8
+ #
9
+ # def build_default_article
10
+ # build_article(:title => 'default title', :body => 'default body')
11
+ # end
12
+ # end
13
+ #
14
+ # Note that we also include a default scope that includes the associated record
15
+ # to avoid n+1 queries.
16
+
17
+ module ActiveRecord
18
+ module Associations
19
+ module HasOneDefault
20
+ def has_one(association_id, options = {})
21
+ default = options.delete(:default)
22
+ super
23
+ has_one_default(association_id, default) if default
24
+ end
25
+
26
+ def has_one_default(association_id, default)
27
+ default_scope includes(association_id) rescue nil # would raise during migrations. how to remove the rescue clause?
28
+ validates_presence_of association_id
29
+
30
+ define_method(:"#{association_id}_with_default") do
31
+ send(:"#{association_id}_without_default") || send(:"#{association_id}=", send(default))
32
+ end
33
+ alias_method_chain association_id, :default
34
+ end
35
+
36
+ ActiveRecord::Base.extend(self)
37
+ end
38
+ end
39
+ end
40
+
@@ -0,0 +1,55 @@
1
+ module HasOptions
2
+ def has_option(*names)
3
+ unless respond_to?(:option_definitions)
4
+ include InstanceMethods
5
+ class_inheritable_accessor :option_definitions
6
+ self.option_definitions = {}
7
+ serialize :options
8
+ end
9
+
10
+ definition = names.extract_options!
11
+ names.map(&:to_sym).each do |name|
12
+ self.option_definitions[name] = definition
13
+
14
+ class_eval <<-rb, __FILE__, __LINE__
15
+ def #{name}
16
+ self.options ||= {}
17
+ options.key?(:#{name}) ? options[:#{name}] : option_default(:#{name})
18
+ end
19
+ # alias #{name}_before_type_cast #{name}
20
+
21
+ def #{name}=(value)
22
+ options_will_change!
23
+ self.options ||= {}
24
+ options[:#{name}] = option_type_cast(:#{name}, value)
25
+ end
26
+ rb
27
+ end
28
+ end
29
+
30
+ module InstanceMethods
31
+ OPTION_DEFAULTS = { :default => nil, :type => :string }
32
+
33
+ [:type, :default].each do |reader|
34
+ define_method(:"option_#{reader}") do |name|
35
+ self.class.option_definitions[name].key?(reader) ? self.class.option_definitions[name][reader] : OPTION_DEFAULTS[reader]
36
+ end
37
+ end
38
+
39
+ define_method :option_type_cast do |name, value|
40
+ return nil if value.nil?
41
+ case option_type(name)
42
+ when :string then value.to_s
43
+ when :integer then value.to_i rescue value ? 1 : 0
44
+ when :float then value.to_f
45
+ when :datetime then ActiveRecord::ConnectionAdapters::Column.string_to_time(value)
46
+ when :time then ActiveRecord::ConnectionAdapters::Column.string_to_dummy_time(value)
47
+ when :date then ActiveRecord::ConnectionAdapters::Column.string_to_date(value)
48
+ when :boolean then ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value)
49
+ else value
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ ActiveRecord::Base.extend(HasOptions)
data/lib/adva/cli.rb ADDED
@@ -0,0 +1,16 @@
1
+ # TODO [cli] needs to use the local Gemfile if we're in an app
2
+ ENV['BUNDLE_GEMFILE'] = File.expand_path('../../../../Gemfile', __FILE__)
3
+
4
+ require 'rubygems'
5
+ require 'bundler/setup'
6
+ Bundler.require(:default)
7
+
8
+ Adva.engines.each { |engine| engine.new.load_tasks }
9
+
10
+ if task = Thor::Util.find_by_namespace("adva:#{ARGV.first}")
11
+ ARGV.shift
12
+ else
13
+ task = Thor::Util.find_by_namespace("adva:app")
14
+ end
15
+
16
+ task.start
@@ -0,0 +1,7 @@
1
+ module Adva
2
+ module Controller
3
+ autoload :AbstractActions, 'adva/controller/abstract_actions'
4
+ autoload :References, 'adva/controller/references'
5
+ autoload :InternalRedirect, 'adva/controller/internal_redirect'
6
+ end
7
+ end
@@ -0,0 +1,92 @@
1
+ require 'action_controller'
2
+
3
+ # abstract_actions makes a base controller transparently use a concrete controller
4
+ # for certain actions. E.g. with an sti base model like Section and concrete model
5
+ # like Page if the route points to the SectionsController it still will use a
6
+ # PagesController if the current resource is a Page.
7
+
8
+ module Adva
9
+ module Controller
10
+ module AbstractActions
11
+ module ActMacro
12
+ def abstract_actions(options = {})
13
+ unless abstract_actions?
14
+ include InternalRedirect
15
+ include InstanceMethods
16
+
17
+ class_inheritable_accessor :abstract_action_options
18
+ self.abstract_action_options = options.reverse_merge(:except => [])
19
+
20
+ before_filter :internal_redirect
21
+ end
22
+ end
23
+
24
+ def abstract_actions?
25
+ included_modules.include?(InstanceMethods)
26
+ end
27
+ end
28
+
29
+ module InstanceMethods
30
+ def internal_redirect
31
+ if redirect_to_concretion?
32
+ internal_redirect_to_concretion
33
+ elsif redirect_to_abstraction?
34
+ internal_redirect_to_abstraction
35
+ end
36
+ end
37
+
38
+ protected
39
+
40
+ def redirect_to_abstraction?
41
+ concrete_controller? && !concrete_action?
42
+ end
43
+
44
+ def redirect_to_concretion?
45
+ !concrete_controller? && concrete_action?
46
+ end
47
+
48
+ def internal_redirect_to_abstraction
49
+ merge_params(abstract_instance_name, instance_name)
50
+ internal_redirect_to("#{abstract_controller_class.controller_path}##{params[:action]}")
51
+ end
52
+
53
+ def internal_redirect_to_concretion
54
+ merge_params(instance_name, abstract_instance_name)
55
+ internal_redirect_to("#{controller_namespace}/#{collection_name}##{params[:action]}")
56
+ end
57
+
58
+ def merge_params(to, from)
59
+ params[to] ||= {}
60
+ params[to].merge!(params.delete(from) || {})
61
+ end
62
+
63
+ def concrete_controller?
64
+ !self.instance_of?(abstract_controller_class)
65
+ end
66
+
67
+ def concrete_action?
68
+ !Array(abstract_action_options[:except]).include?(params[:action].to_sym)
69
+ end
70
+
71
+ def abstract_controller_class
72
+ @abstract_controller_class ||= begin
73
+ abstract = self.class
74
+ abstract = abstract.superclass until abstract.superclass.controller_name == 'base'
75
+ abstract
76
+ end
77
+ end
78
+
79
+ def abstract_instance_name
80
+ @abstract_instance_name ||= abstract_controller_class.controller_name.singularize
81
+ end
82
+
83
+ def controller_namespace
84
+ @controller_namespace ||= controller_path.split('/')[0..-2].join('/')
85
+ end
86
+ end
87
+
88
+ ActionController::Base.extend(ActMacro)
89
+ end
90
+ end
91
+ end
92
+