adva-core 0.0.3 → 0.0.4

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 (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
+