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,58 @@
1
+ module Adva
2
+ module Testing
3
+ autoload :Engine, 'adva/testing/engine'
4
+
5
+ Rails::Engine.extend(Engine)
6
+
7
+ class << self
8
+ def setup(options = {})
9
+ Adva.out = StringIO.new('')
10
+ setup_logging(options)
11
+ setup_active_record
12
+
13
+ each_engine { |e| e.setup_load_paths }
14
+ ActiveSupport::Slices.register
15
+
16
+ each_engine { |e| e.new.require_patches }
17
+ each_engine { |e| e.migrate }
18
+
19
+ load_assertions
20
+ load_factories
21
+ end
22
+
23
+ def each_engine(&block)
24
+ Adva.engines.each(&block)
25
+ end
26
+
27
+ def load_assertions
28
+ Adva.engines.each { |e| e.load_assertions }
29
+ end
30
+
31
+ def load_factories
32
+ Adva.engines.each { |e| e.load_factories }
33
+ end
34
+
35
+ def load_cucumber_support
36
+ Adva.engines.each { |e| e.load_cucumber_support }
37
+ end
38
+
39
+ def load_helpers
40
+ Adva.engines.each { |e| e.load_helpers }
41
+ end
42
+
43
+ def setup_logging(options)
44
+ if log = options[:log]
45
+ FileUtils.touch(log) unless File.exists?(log)
46
+ ActiveRecord::Base.logger = Logger.new(log)
47
+ ActiveRecord::LogSubscriber.attach_to(:active_record)
48
+ end
49
+ end
50
+
51
+ def setup_active_record
52
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
53
+ ActiveRecord::Migration.verbose = false
54
+ DatabaseCleaner.strategy = :truncation
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,37 @@
1
+ module Adva
2
+ module Testing
3
+ module Engine
4
+ def setup_load_paths
5
+ paths.app.each { |path| $:.unshift(path) if File.directory?(path) }
6
+ ActiveSupport::Dependencies.autoload_paths.unshift(*paths.app)
7
+ end
8
+
9
+ def migrate
10
+ ActiveRecord::Migrator.up(root.join('db/migrate'))
11
+ end
12
+
13
+ def load_assertions
14
+ load_all('lib/testing/assertions')
15
+ end
16
+
17
+ def load_factories
18
+ load_all('lib/testing/factories')
19
+ end
20
+
21
+ def load_cucumber_support
22
+ load_all('lib/testing/step_definitions')
23
+ load_all('lib/testing/paths')
24
+ end
25
+
26
+ def load_helpers
27
+ load_all('lib/testing/helpers')
28
+ end
29
+
30
+ def load_all(search)
31
+ Pathname.glob(root.join("#{search}{.rb,/*.rb}")).each do |file|
32
+ require(file) if file.exist?
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
data/lib/adva/view.rb ADDED
@@ -0,0 +1,7 @@
1
+ module Adva
2
+ module View
3
+ autoload :Form, 'adva/view/form'
4
+ autoload :Menu, 'adva/view/menu'
5
+ autoload :Tabs, 'adva/view/tabs'
6
+ end
7
+ end
@@ -0,0 +1,44 @@
1
+ module Adva
2
+ module View
3
+ class Form < Minimal::Template
4
+ autoload :Tabs, 'adva/view/form/tabs'
5
+ include Tabs
6
+
7
+ attr_reader :form
8
+
9
+ def to_html
10
+ form_tag
11
+ end
12
+
13
+ def form_tag
14
+ simple_form_for(*form_arguments) do |form|
15
+ @form = form
16
+ fields
17
+ button_group
18
+ end
19
+ end
20
+
21
+ def form_arguments
22
+ [resources]
23
+ end
24
+
25
+ def button_group
26
+ content_tag(:div, :class => 'buttons') do
27
+ buttons
28
+ end
29
+ end
30
+
31
+ def buttons
32
+ form.button :submit
33
+ end
34
+
35
+ def return_here
36
+ hidden_field_tag :return_to, request.url
37
+ end
38
+
39
+ def pass_return_to
40
+ hidden_field_tag :return_to, params[:return_to]
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,46 @@
1
+ module Adva
2
+ module View
3
+ class Form
4
+ module Tabs
5
+ def form_for(*args, &block)
6
+ super(*args, &with_tabs(block))
7
+ end
8
+
9
+ def simple_form_for(*args, &block)
10
+ super(*args, &with_tabs(block))
11
+ end
12
+
13
+ def with_tabs(block)
14
+ if respond_to?(:sidebar)
15
+ lambda do |*args|
16
+ block.call(*args)
17
+ sidebar
18
+
19
+ div :class => :tabs do
20
+ ul do
21
+ controller.tabs.each do |tab|
22
+ li(:class => tab.active? ? :active : '') do
23
+ link_to(:"admin.tabs.#{tab.name}", "##{tab.name}")
24
+ end
25
+ end
26
+ end
27
+ controller.tabs.each do |tab|
28
+ div :id => "tab_#{tab.name}", :class => "tab #{tab.active? ? :active : ''}" do
29
+ tab.blocks.each { |block| block.call }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ else
35
+ block
36
+ end
37
+ end
38
+
39
+ # should store the tabs on the form builder object instead of the controller
40
+ def tab(*args, &block)
41
+ controller.tabs.tab(*args, &block)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,10 @@
1
+ I18n::Backend::Simple.send(:include, I18n::Backend::Cascade)
2
+
3
+ # should be a module, but i have no idea how/where to include one :/
4
+ ActionView::Base.class_eval do
5
+ def translate(key, options = {})
6
+ super(key, options.merge(:cascade => { :offset => 2, :skip_root => false }))
7
+ end
8
+ alias t translate
9
+ end
10
+
@@ -0,0 +1,73 @@
1
+ module Adva
2
+ module View
3
+ class Menu < Minimal::Template
4
+ autoload :Admin, 'adva/view/menu/admin'
5
+ autoload :Items, 'adva/view/menu/items'
6
+
7
+ def to_html
8
+ build
9
+ render_items
10
+ end
11
+
12
+ def item(text, url = nil, options = {}, &block)
13
+ items.insert(text, url, options, block)
14
+ end
15
+
16
+ def label(text, url = nil, options = {}, &block)
17
+ item(text, url, options.merge(:type => :label), &block)
18
+ end
19
+
20
+ protected
21
+ def items
22
+ @items ||= Items.new
23
+ end
24
+
25
+ def render_items
26
+ items, @items = self.items, Items.new
27
+ items.each { |args| render_item(*args) }
28
+ end
29
+
30
+ def render_item(text, url, options, block)
31
+ options.merge!(:class => text.to_s.split('.').last) if text.is_a?(Symbol)
32
+ url = url_for(url) unless url.is_a?(String) || options[:type] == :label
33
+
34
+ li(:class => active?(url, options) ? 'active' : nil) do
35
+ options[:type] == :label ? h4(text, options) : link_to(text, url, options)
36
+ render_block(block) if block
37
+ end
38
+ end
39
+
40
+ def render_block(block)
41
+ self << capture do
42
+ instance_eval(&block)
43
+ render_items
44
+ end
45
+ end
46
+
47
+ def name
48
+ @name ||= self.class.name.demodulize.underscore
49
+ end
50
+
51
+ def css_classes
52
+ ['menu', name].uniq
53
+ end
54
+
55
+ def active?(url, options)
56
+ activate = options.key?(:activate) ? options.delete(:activate) : true
57
+ delete = options[:method] == :delete
58
+ activate && !delete && active_paths.include?(url)
59
+ end
60
+
61
+ def active_paths
62
+ @active_paths ||= path_and_parents(controller.request.fullpath)
63
+ end
64
+
65
+ def path_and_parents(path)
66
+ path.split('/').inject([]) do |paths, segment|
67
+ path = [paths.last == '/' ? '' : paths.last, segment].compact.join('/')
68
+ paths << (path.empty? ? '/' : path)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,100 @@
1
+ # Base class for admin menus. Encapsulates assumptions made by the admin layout.
2
+
3
+ module Adva
4
+ module View
5
+ class Menu
6
+ class Admin < Menu
7
+ def self.id(id)
8
+ write_inheritable_attribute(:id, id)
9
+ end
10
+
11
+ class Actions < Admin
12
+ id :actions
13
+ end
14
+
15
+ def build
16
+ div :id => id, :class => 'menus' do
17
+ ul :class => 'menu main' do
18
+ main
19
+ render_items
20
+ end
21
+ ul :class => 'menu right' do
22
+ right
23
+ render_items
24
+ end
25
+ end
26
+ end
27
+
28
+ def main
29
+ end
30
+
31
+ def right
32
+ end
33
+
34
+ protected
35
+
36
+ def id
37
+ self.class.read_inheritable_attribute(:id)
38
+ end
39
+
40
+ def resource_label
41
+ label("#{resource.name}:")
42
+ end
43
+
44
+ def resource_section_label
45
+ label("#{resource.section.name}:")
46
+ end
47
+
48
+ def parent_resource_label
49
+ label("#{parent_resource.name}:")
50
+ end
51
+
52
+ def index
53
+ item(:".#{resource.class.name.pluralize.underscore}", index_path)
54
+ end
55
+
56
+ def show
57
+ item(:".#{resource.class.name.underscore}", show_path)
58
+ end
59
+
60
+ def edit
61
+ item(:'.edit', edit_path)
62
+ end
63
+
64
+ def edit_parent
65
+ item(:".edit_#{parent_resource.class.base_class.name.underscore}", edit_parent_path)
66
+ end
67
+
68
+ def categories(url = nil, options = { :before => :'.edit_section' })
69
+ item(:'.categories', url || index_path(:categories), options)
70
+ end
71
+
72
+ def new
73
+ item(:'.new', new_path)
74
+ end
75
+
76
+ def reorder(options = {})
77
+ item(:'.reorder', index_path, options.merge(:activate => false))
78
+ end
79
+
80
+ def destroy
81
+ item(:'.destroy', resource_path, :method => :delete, :confirm => t(:'.confirm_destroy', :model_name => resource.class.model_name.human))
82
+ end
83
+
84
+ def persisted?
85
+ resource.try(:persisted?)
86
+ end
87
+
88
+ def collection?
89
+ index? || new? || create?
90
+ end
91
+
92
+ %w(index show new create edit update).each do |action|
93
+ define_method(:"#{action}?") do
94
+ params[:action] == action
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,26 @@
1
+ module Adva
2
+ module View
3
+ class Menu
4
+ class Items < Array
5
+ def insert(text, url, options, block)
6
+ item = [text, url, options, block]
7
+ if ix = options.delete(:at)
8
+ super(ix, item)
9
+ elsif ix = index(options.delete(:before))
10
+ super(ix, item)
11
+ elsif ix = index(options.delete(:after))
12
+ super(ix + 1, item)
13
+ elsif ix = index(options.delete(:replace))
14
+ self[ix] = item
15
+ else
16
+ push(item)
17
+ end
18
+ end
19
+
20
+ def index(text)
21
+ each_with_index { |item, ix| return ix if item[0] == text } and nil
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ module Adva
2
+ module View
3
+ class Tabs < Array
4
+ class Tab
5
+ attr_reader :tabs, :name
6
+
7
+ def initialize(tabs, name)
8
+ @tabs = tabs
9
+ @name = name
10
+ end
11
+
12
+ def active?
13
+ self == tabs.first
14
+ end
15
+
16
+ def blocks
17
+ @blocks ||= []
18
+ end
19
+ end
20
+
21
+ def tab(name, &block)
22
+ tab = detect { |tab| tab.name == name }
23
+ self << tab = Tab.new(self, name) unless tab
24
+ tab.blocks << block
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ module AdvaCore
2
+ VERSION = "0.0.4"
3
+ end