activeadmin 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (277) hide show
  1. data/.gitignore +34 -0
  2. data/.travis.yml +4 -0
  3. data/.yardopts +8 -0
  4. data/CHANGELOG.md +177 -0
  5. data/Gemfile +21 -32
  6. data/Guardfile +8 -0
  7. data/README.rdoc +75 -14
  8. data/Rakefile +7 -100
  9. data/activeadmin.gemspec +21 -353
  10. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/admin_notes_icon.png +0 -0
  11. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  12. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  16. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/loading.gif +0 -0
  17. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow.gif +0 -0
  18. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow_dark.gif +0 -0
  19. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/orderable.png +0 -0
  20. data/app/assets/javascripts/active_admin/base.js +12 -0
  21. data/{lib/generators/active_admin/install/templates/active_admin_vendor.js → app/assets/javascripts/active_admin/vendor.js} +0 -0
  22. data/{lib/active_admin/stylesheets/active_admin.scss → app/assets/stylesheets/active_admin/_base.css.scss} +58 -82
  23. data/{lib/active_admin/stylesheets/active_admin/_forms.scss → app/assets/stylesheets/active_admin/_forms.css.scss} +94 -5
  24. data/{lib/active_admin/stylesheets/active_admin/_header.scss → app/assets/stylesheets/active_admin/_header.css.scss} +13 -11
  25. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  26. data/{lib/active_admin/stylesheets/active_admin/_typography.scss → app/assets/stylesheets/active_admin/_typography.css.scss} +0 -0
  27. data/{lib/active_admin/stylesheets/active_admin/_comments.scss → app/assets/stylesheets/active_admin/components/_comments.css.scss} +0 -0
  28. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  29. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
  30. data/{lib/active_admin/stylesheets/active_admin/mixins/_all.scss → app/assets/stylesheets/active_admin/mixins/_all.css.scss} +0 -0
  31. data/{lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss → app/assets/stylesheets/active_admin/mixins/_buttons.css.scss} +0 -0
  32. data/{lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss → app/assets/stylesheets/active_admin/mixins/_gradients.css.scss} +8 -0
  33. data/{lib/active_admin/stylesheets/active_admin/mixins/_icons.scss → app/assets/stylesheets/active_admin/mixins/_icons.css.scss} +0 -0
  34. data/{lib/active_admin/stylesheets/active_admin/mixins/_reset.scss → app/assets/stylesheets/active_admin/mixins/_reset.css.scss} +0 -0
  35. data/{lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss → app/assets/stylesheets/active_admin/mixins/_rounded.css.scss} +0 -0
  36. data/{lib/active_admin/stylesheets/active_admin/mixins/_sections.scss → app/assets/stylesheets/active_admin/mixins/_sections.css.scss} +9 -2
  37. data/{lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss → app/assets/stylesheets/active_admin/mixins/_shadows.css.scss} +1 -1
  38. data/{lib/active_admin/stylesheets/active_admin/mixins/_variables.scss → app/assets/stylesheets/active_admin/mixins/_variables.css.scss} +12 -3
  39. data/{lib/active_admin/views/templates/active_admin_dashboard → app/views/active_admin/dashboard}/index.html.arb +0 -0
  40. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/reset_password_instructions.html.erb +0 -0
  41. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/unlock_instructions.html.erb +0 -0
  42. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/edit.html.erb +0 -0
  43. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/new.html.erb +0 -0
  44. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/sessions/new.html.erb +1 -1
  45. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/shared/_links.erb +0 -0
  46. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/unlocks/new.html.erb +0 -0
  47. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/edit.html.arb +0 -0
  48. data/app/views/active_admin/resource/index.csv.erb +20 -0
  49. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/index.html.arb +0 -0
  50. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/new.html.arb +0 -0
  51. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/show.html.arb +0 -0
  52. data/app/views/layouts/active_admin.html.arb +1 -0
  53. data/{lib/active_admin/views/templates → app/views}/layouts/active_admin_logged_out.html.erb +8 -4
  54. data/docs/0-installation.md +50 -0
  55. data/docs/1-general-configuration.md +43 -0
  56. data/docs/2-resource-customization.md +35 -0
  57. data/docs/3-index-pages.md +55 -0
  58. data/docs/3-index-pages/index-as-block.md +16 -0
  59. data/docs/3-index-pages/index-as-blog.md +61 -0
  60. data/docs/3-index-pages/index-as-grid.md +21 -0
  61. data/docs/3-index-pages/index-as-table.md +90 -0
  62. data/docs/4-csv-format.md +14 -0
  63. data/docs/5-forms.md +39 -0
  64. data/docs/6-show-screens.md +22 -0
  65. data/docs/7-sidebars.md +35 -0
  66. data/docs/8-custom-actions.md +123 -0
  67. data/features/comments/commenting.feature +31 -4
  68. data/features/edit_page.feature +30 -1
  69. data/features/index/filters.feature +35 -0
  70. data/features/index/format_as_csv.feature +46 -0
  71. data/features/index/formats.feature +2 -0
  72. data/features/index/index_as_block.feature +1 -1
  73. data/features/index/index_as_grid.feature +1 -1
  74. data/features/index/index_as_table.feature +2 -0
  75. data/features/index/index_blank_slate.feature +56 -0
  76. data/features/index/pagination.feature +0 -6
  77. data/features/registering_assets.feature +2 -2
  78. data/features/sidebar_sections.feature +7 -8
  79. data/features/specifying_actions.feature +72 -1
  80. data/features/step_definitions/action_item_steps.rb +2 -2
  81. data/features/step_definitions/additional_web_steps.rb +26 -16
  82. data/features/step_definitions/attribute_steps.rb +5 -7
  83. data/features/step_definitions/configuration_steps.rb +9 -9
  84. data/features/step_definitions/factory_steps.rb +4 -3
  85. data/features/step_definitions/format_steps.rb +29 -1
  86. data/features/step_definitions/layout_steps.rb +3 -0
  87. data/features/step_definitions/menu_steps.rb +2 -2
  88. data/features/step_definitions/sidebar_steps.rb +1 -5
  89. data/features/step_definitions/user_steps.rb +8 -2
  90. data/features/step_definitions/web_steps.rb +82 -90
  91. data/features/sti_resource.feature +12 -0
  92. data/features/support/env.rb +12 -10
  93. data/features/support/paths.rb +2 -0
  94. data/features/support/selectors.rb +45 -0
  95. data/lib/active_admin.rb +33 -263
  96. data/lib/active_admin/application.rb +228 -0
  97. data/lib/active_admin/arbre.rb +10 -10
  98. data/lib/active_admin/arbre/{html.rb → builder.rb} +29 -2
  99. data/lib/active_admin/arbre/context.rb +8 -0
  100. data/lib/active_admin/arbre/{attributes.rb → html/attributes.rb} +0 -0
  101. data/lib/active_admin/arbre/{class_list.rb → html/class_list.rb} +0 -0
  102. data/lib/active_admin/arbre/{collection.rb → html/collection.rb} +0 -0
  103. data/lib/active_admin/arbre/{document.rb → html/document.rb} +0 -0
  104. data/lib/active_admin/arbre/{element.rb → html/element.rb} +6 -6
  105. data/lib/active_admin/arbre/{html5_elements.rb → html/html5_elements.rb} +0 -0
  106. data/lib/active_admin/arbre/{tag.rb → html/tag.rb} +0 -0
  107. data/lib/active_admin/arbre/{text_node.rb → html/text_node.rb} +0 -0
  108. data/lib/active_admin/asset_registration.rb +1 -1
  109. data/lib/active_admin/callbacks.rb +5 -3
  110. data/lib/active_admin/comments.rb +3 -3
  111. data/lib/active_admin/comments/comment.rb +6 -0
  112. data/lib/active_admin/comments/configuration.rb +8 -6
  113. data/lib/active_admin/comments/namespace_helper.rb +1 -1
  114. data/lib/active_admin/comments/views/active_admin_comments.rb +1 -1
  115. data/lib/active_admin/csv_builder.rb +45 -0
  116. data/lib/active_admin/dashboards.rb +1 -1
  117. data/lib/active_admin/dashboards/dashboard_controller.rb +3 -10
  118. data/lib/active_admin/dependency_checker.rb +28 -0
  119. data/lib/active_admin/deprecation.rb +36 -0
  120. data/lib/active_admin/devise.rb +14 -3
  121. data/lib/active_admin/dsl.rb +26 -4
  122. data/lib/active_admin/engine.rb +4 -0
  123. data/lib/active_admin/form_builder.rb +18 -9
  124. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  125. data/lib/active_admin/helpers/settings.rb +70 -0
  126. data/lib/active_admin/locales/cs.yml +34 -0
  127. data/lib/active_admin/locales/da.yml +28 -0
  128. data/lib/active_admin/locales/en.yml +40 -0
  129. data/lib/active_admin/locales/es.yml +40 -0
  130. data/lib/active_admin/locales/fr.yml +40 -0
  131. data/lib/active_admin/locales/it.yml +39 -0
  132. data/lib/active_admin/locales/pl.yml +34 -0
  133. data/lib/active_admin/locales/pt-BR.yml +41 -0
  134. data/lib/active_admin/locales/ru.yml +40 -0
  135. data/lib/active_admin/locales/zh_cn.yml +40 -0
  136. data/lib/active_admin/menu_item.rb +6 -0
  137. data/lib/active_admin/namespace.rb +14 -5
  138. data/lib/active_admin/reloader.rb +30 -0
  139. data/lib/active_admin/renderer.rb +1 -1
  140. data/lib/active_admin/resource.rb +45 -88
  141. data/lib/active_admin/resource/action_items.rb +88 -0
  142. data/lib/active_admin/resource/menu.rb +45 -0
  143. data/lib/active_admin/resource/naming.rb +46 -0
  144. data/lib/active_admin/resource/scopes.rb +33 -0
  145. data/lib/active_admin/resource/sidebars.rb +36 -0
  146. data/lib/active_admin/resource_controller.rb +32 -37
  147. data/lib/active_admin/resource_controller/action_builder.rb +1 -1
  148. data/lib/active_admin/resource_controller/actions.rb +66 -40
  149. data/lib/active_admin/resource_controller/callbacks.rb +1 -1
  150. data/lib/active_admin/resource_controller/collection.rb +9 -14
  151. data/lib/active_admin/resource_controller/filters.rb +1 -1
  152. data/lib/active_admin/resource_controller/form.rb +1 -1
  153. data/lib/active_admin/resource_controller/menu.rb +1 -1
  154. data/lib/active_admin/resource_controller/page_configurations.rb +2 -2
  155. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  156. data/lib/active_admin/resource_controller/sidebars.rb +1 -21
  157. data/lib/active_admin/router.rb +85 -0
  158. data/lib/active_admin/sass/active_admin.scss +3 -0
  159. data/lib/active_admin/sass/css_loader.rb +16 -0
  160. data/lib/active_admin/sass/helpers.rb +45 -0
  161. data/lib/active_admin/scope.rb +16 -2
  162. data/lib/active_admin/sidebar_section.rb +41 -0
  163. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  164. data/lib/active_admin/version.rb +1 -1
  165. data/lib/active_admin/view_factory.rb +5 -3
  166. data/lib/active_admin/view_helpers.rb +1 -2
  167. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  168. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  169. data/lib/active_admin/view_helpers/display_helper.rb +1 -1
  170. data/lib/active_admin/view_helpers/filter_form_helper.rb +26 -14
  171. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  172. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
  173. data/lib/active_admin/views/components/attributes_table.rb +2 -2
  174. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  175. data/lib/active_admin/views/components/columns.rb +1 -3
  176. data/lib/active_admin/views/components/paginated_collection.rb +26 -8
  177. data/lib/active_admin/views/components/scopes.rb +13 -8
  178. data/lib/active_admin/views/components/sidebar_section.rb +1 -3
  179. data/lib/active_admin/views/components/status_tag.rb +55 -0
  180. data/lib/active_admin/views/components/table_for.rb +25 -6
  181. data/lib/active_admin/views/header_renderer.rb +20 -4
  182. data/lib/active_admin/views/index_as_block.rb +12 -7
  183. data/lib/active_admin/views/index_as_blog.rb +61 -21
  184. data/lib/active_admin/views/index_as_grid.rb +22 -1
  185. data/lib/active_admin/views/index_as_table.rb +97 -6
  186. data/lib/active_admin/views/pages/base.rb +20 -9
  187. data/lib/active_admin/views/pages/dashboard.rb +7 -4
  188. data/lib/active_admin/views/pages/edit.rb +3 -2
  189. data/lib/active_admin/views/pages/index.rb +30 -5
  190. data/lib/active_admin/views/pages/layout.rb +26 -0
  191. data/lib/active_admin/views/pages/new.rb +3 -2
  192. data/lib/active_admin/views/pages/show.rb +1 -1
  193. data/lib/active_admin/views/tabbed_navigation.rb +94 -0
  194. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  195. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  196. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  197. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  198. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  199. data/lib/generators/active_admin/install/install_generator.rb +2 -4
  200. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +26 -4
  201. data/lib/generators/active_admin/install/templates/dashboards.rb +4 -2
  202. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +2 -2
  203. data/script/local +44 -0
  204. data/script/use_rails +46 -0
  205. data/spec/integration/belongs_to_spec.rb +1 -1
  206. data/spec/integration/default_namespace.rb +77 -0
  207. data/spec/integration/javascript_spec.rb +20 -0
  208. data/spec/integration/stylesheets_spec.rb +41 -0
  209. data/spec/spec_helper.rb +21 -11
  210. data/spec/support/detect_rails_version.rb +10 -0
  211. data/spec/support/integration_example_group.rb +1 -1
  212. data/spec/support/jslint.yml +80 -0
  213. data/spec/support/rails_template.rb +1 -1
  214. data/spec/support/rails_template_with_data.rb +2 -1
  215. data/spec/support/templates/cucumber.rb +0 -4
  216. data/spec/unit/active_admin_spec.rb +8 -44
  217. data/spec/unit/application_spec.rb +78 -0
  218. data/spec/unit/arbre/context_spec.rb +22 -0
  219. data/spec/unit/arbre/html/element_finder_methods_spec.rb +2 -2
  220. data/spec/unit/arbre/html/element_spec.rb +2 -3
  221. data/spec/unit/arbre/html/tag_attributes_spec.rb +2 -2
  222. data/spec/unit/arbre/html/tag_spec.rb +2 -2
  223. data/spec/unit/arbre/html_spec.rb +2 -3
  224. data/spec/unit/auto_link_spec.rb +2 -1
  225. data/spec/unit/belongs_to_spec.rb +2 -1
  226. data/spec/unit/comments_spec.rb +43 -39
  227. data/spec/unit/controller_filters_spec.rb +11 -3
  228. data/spec/unit/csv_builder_spec.rb +83 -0
  229. data/spec/unit/devise_spec.rb +66 -0
  230. data/spec/unit/display_name_spec.rb +2 -2
  231. data/spec/unit/filter_form_builder_spec.rb +6 -3
  232. data/spec/unit/form_builder_spec.rb +20 -2
  233. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  234. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  235. data/spec/unit/helpers/settings_spec.rb +30 -0
  236. data/spec/unit/menu_item_spec.rb +6 -0
  237. data/spec/unit/namespace_spec.rb +68 -19
  238. data/spec/unit/rails_spec.rb +43 -0
  239. data/spec/unit/registration_spec.rb +18 -27
  240. data/spec/unit/reloader_spec.rb +28 -0
  241. data/spec/unit/resource/action_items_spec.rb +62 -0
  242. data/spec/unit/resource/menu_spec.rb +80 -0
  243. data/spec/unit/resource/naming_spec.rb +64 -0
  244. data/spec/unit/resource/scopes_spec.rb +30 -0
  245. data/spec/unit/resource/sidebars_spec.rb +50 -0
  246. data/spec/unit/resource_controller/collection_spec.rb +1 -1
  247. data/spec/unit/resource_controller_spec.rb +29 -24
  248. data/spec/unit/resource_spec.rb +78 -94
  249. data/spec/unit/sass/helpers_spec.rb +47 -0
  250. data/spec/unit/scope_spec.rb +11 -1
  251. data/spec/unit/view_factory_spec.rb +4 -1
  252. data/spec/unit/{components → views/components}/attributes_table_spec.rb +2 -2
  253. data/spec/unit/views/components/blank_slate_spec.rb +15 -0
  254. data/spec/unit/{components → views/components}/columns_spec.rb +2 -2
  255. data/spec/unit/{components → views/components}/panel_spec.rb +1 -3
  256. data/spec/unit/{components → views/components}/sidebar_section_spec.rb +3 -3
  257. data/spec/unit/views/components/status_tag_spec.rb +79 -0
  258. data/spec/unit/{components → views/components}/table_for_spec.rb +2 -1
  259. data/spec/unit/views/pages/layout_spec.rb +22 -0
  260. data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
  261. data/tasks/docs.rake +39 -0
  262. data/tasks/test.rake +55 -0
  263. data/tasks/yard.rake +6 -0
  264. metadata +310 -189
  265. data/CHANGELOG.rdoc +0 -76
  266. data/lib/active_admin/action_items.rb +0 -37
  267. data/lib/active_admin/sidebar.rb +0 -39
  268. data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +0 -13
  269. data/lib/active_admin/view_helpers/status_tag_helper.rb +0 -13
  270. data/lib/active_admin/view_helpers/table_helper.rb +0 -12
  271. data/lib/active_admin/views/tabs_renderer.rb +0 -52
  272. data/lib/active_admin/views/templates/active_admin_default/index.csv.erb +0 -2
  273. data/lib/active_admin/views/templates/layouts/active_admin.html.erb +0 -39
  274. data/lib/generators/active_admin/install/templates/active_admin.js +0 -51
  275. data/spec/controllers/index_as_csv_spec.rb +0 -35
  276. data/spec/unit/action_items_spec.rb +0 -27
  277. data/spec/unit/tabs_renderer_spec.rb +0 -56
@@ -0,0 +1,30 @@
1
+ module ActiveAdmin
2
+ # Deals with reloading Active Admin on each request in
3
+ # development and once in production.
4
+ class Reloader
5
+
6
+ # @param [String] rails_version
7
+ # The version of Rails we're using. We use this to switch between
8
+ # the correcr Rails reloader class.
9
+ def initialize(rails_version)
10
+ @rails_version = rails_version.to_s
11
+ end
12
+
13
+ # Attach to Rails and perform the reload on each request.
14
+ def attach!
15
+ reloader_class.to_prepare do
16
+ ActiveAdmin.application.unload!
17
+ Rails.application.reload_routes!
18
+ end
19
+ end
20
+
21
+ def reloader_class
22
+ if @rails_version[0..2] == '3.1'
23
+ ActionDispatch::Reloader
24
+ else
25
+ ActionDispatch::Callbacks
26
+ end
27
+ end
28
+
29
+ end
30
+ end
@@ -2,7 +2,7 @@ module ActiveAdmin
2
2
  class Renderer
3
3
 
4
4
  include ::ActiveAdmin::ViewHelpers::RendererHelper
5
- include Arbre::HTML
5
+ include Arbre::Builder
6
6
 
7
7
  attr_accessor :view, :assigns
8
8
 
@@ -1,3 +1,9 @@
1
+ require 'active_admin/resource/action_items'
2
+ require 'active_admin/resource/menu'
3
+ require 'active_admin/resource/naming'
4
+ require 'active_admin/resource/scopes'
5
+ require 'active_admin/resource/sidebars'
6
+
1
7
  module ActiveAdmin
2
8
 
3
9
  # Resource is the primary data storage for resource configuration in Active Admin
@@ -31,9 +37,6 @@ module ActiveAdmin
31
37
  # An array of collection actions defined for this resource
32
38
  attr_reader :collection_actions
33
39
 
34
- # The titleized name to use for this resource
35
- attr_accessor :resource_name
36
-
37
40
  # The default sort order to use in the controller
38
41
  attr_accessor :sort_order
39
42
 
@@ -46,44 +49,30 @@ module ActiveAdmin
46
49
  # Set to false to turn off admin notes
47
50
  attr_accessor :admin_notes
48
51
 
49
-
50
- def initialize(namespace, resource, options = {})
51
- @namespace = namespace
52
- @resource = resource
53
- @options = default_options.merge(options)
54
- @sort_order = @options[:sort_order]
55
- @page_configs = {}
56
- @menu_options = {}
57
- @member_actions, @collection_actions = [], []
58
- @scopes = []
59
- end
60
-
61
- # An underscored safe representation internally for this resource
62
- def underscored_resource_name
63
- @underscored_resource_name ||= if @options[:as]
64
- @options[:as].gsub(' ', '').underscore.singularize
65
- else
66
- resource.name.gsub('::','').underscore
52
+ # Set the configuration for the CSV
53
+ attr_writer :csv_builder
54
+
55
+ module Base
56
+ def initialize(namespace, resource, options = {})
57
+ @namespace = namespace
58
+ @resource = resource
59
+ @options = default_options.merge(options)
60
+ @sort_order = @options[:sort_order]
61
+ @page_configs = {}
62
+ @member_actions, @collection_actions = [], []
67
63
  end
68
64
  end
69
65
 
70
- # A camelized safe representation for this resource
71
- def camelized_resource_name
72
- underscored_resource_name.camelize
73
- end
74
-
75
- # Returns the name to call this resource
76
- def resource_name
77
- @resource_name ||= underscored_resource_name.titleize
78
- end
66
+ include Base
67
+ include ActionItems
68
+ include Menu
69
+ include Naming
70
+ include Scopes
71
+ include Sidebars
79
72
 
80
- # Returns the plural version of this resource
81
- def plural_resource_name
82
- @plural_resource_name ||= resource_name.pluralize
83
- end
84
73
 
85
74
  def resource_table_name
86
- resource.table_name
75
+ resource.quoted_table_name
87
76
  end
88
77
 
89
78
  # Returns a properly formatted controller name for this
@@ -105,7 +94,15 @@ module ActiveAdmin
105
94
  # Returns a symbol for the route to use to get to the
106
95
  # collection of this resource
107
96
  def route_collection_path
108
- [route_prefix, controller.resources_configuration[:self][:route_collection_name], 'path'].compact.join('_').to_sym
97
+ route = [route_prefix, controller.resources_configuration[:self][:route_collection_name]]
98
+
99
+ if controller.resources_configuration[:self][:route_collection_name] ==
100
+ controller.resources_configuration[:self][:route_instance_name]
101
+ route << "index"
102
+ end
103
+
104
+ route << 'path'
105
+ route.compact.join('_').to_sym
109
106
  end
110
107
 
111
108
  # Returns the named route for an instance of this resource
@@ -113,30 +110,6 @@ module ActiveAdmin
113
110
  [route_prefix, controller.resources_configuration[:self][:route_instance_name], 'path'].compact.join('_').to_sym
114
111
  end
115
112
 
116
- # Set the menu options. To not add this resource to the menu, just
117
- # call #menu(false)
118
- def menu(options = {})
119
- options = options == false ? { :display => false } : options
120
- @menu_options = options
121
- end
122
-
123
- # Returns the name to put this resource under in the menu
124
- def parent_menu_item_name
125
- @menu_options[:parent]
126
- end
127
-
128
- # Returns the name to be displayed in the menu for this resource
129
- def menu_item_name
130
- @menu_options[:label] || plural_resource_name
131
- end
132
-
133
- # Should this resource be added to the menu system?
134
- def include_in_menu?
135
- return false if @menu_options[:display] == false
136
- !(belongs_to? && !belongs_to_config.optional?)
137
- end
138
-
139
-
140
113
  # Clears all the member actions this resource knows about
141
114
  def clear_member_actions!
142
115
  @member_actions = []
@@ -146,30 +119,6 @@ module ActiveAdmin
146
119
  @collection_actions = []
147
120
  end
148
121
 
149
- # Return an array of scopes for this resource
150
- def scopes
151
- @scopes
152
- end
153
-
154
- # Returns a scope for this object by its identifier
155
- def get_scope_by_id(id)
156
- id = id.to_s
157
- @scopes.find{|s| s.id == id }
158
- end
159
-
160
- def default_scope
161
- @default_scope
162
- end
163
-
164
- # Create a new scope object for this resource
165
- def scope(*args, &block)
166
- options = args.extract_options!
167
- @scopes << ActiveAdmin::Scope.new(*args, &block)
168
- if options[:default]
169
- @default_scope = @scopes.last
170
- end
171
- end
172
-
173
122
  # Are admin notes turned on for this resource
174
123
  def admin_notes?
175
124
  admin_notes.nil? ? ActiveAdmin.admin_notes : admin_notes
@@ -189,14 +138,22 @@ module ActiveAdmin
189
138
  !belongs_to_config.nil?
190
139
  end
191
140
 
141
+ # The csv builder for this resource
142
+ def csv_builder
143
+ @csv_builder || default_csv_builder
144
+ end
145
+
192
146
  private
193
147
 
194
148
  def default_options
195
149
  {
196
- :namespace => ActiveAdmin.default_namespace,
197
- :sort_order => ActiveAdmin.default_sort_order,
150
+ :namespace => ActiveAdmin.application.default_namespace,
151
+ :sort_order => "#{resource.respond_to?(:primary_key) ? resource.primary_key : 'id'}_desc"
198
152
  }
199
153
  end
200
154
 
201
- end
202
- end
155
+ def default_csv_builder
156
+ @default_csv_builder ||= CSVBuilder.default_for_resource(resource)
157
+ end
158
+ end # class Resource
159
+ end # module ActiveAdmin
@@ -0,0 +1,88 @@
1
+ require 'active_admin/helpers/optional_display'
2
+
3
+ module ActiveAdmin
4
+
5
+ class Resource
6
+ module ActionItems
7
+
8
+ # Add the default action items to a resource when it's
9
+ # initialized
10
+ def initialize(*args)
11
+ super
12
+ add_default_action_items
13
+ end
14
+
15
+ # @return [Array] The set of action items for this resource
16
+ def action_items
17
+ @action_items ||= []
18
+ end
19
+
20
+ # Add a new action item to a resource
21
+ #
22
+ # @param [Hash] options valid keys include:
23
+ # :only: A single or array of controller actions to display
24
+ # this action item on.
25
+ # :except: A single or array of controller actions not to
26
+ # display this action item on.
27
+ def add_action_item(options = {}, &block)
28
+ self.action_items << ActiveAdmin::ActionItem.new(options, &block)
29
+ end
30
+
31
+ # Returns a set of action items to display for a specific controller action
32
+ #
33
+ # @param [String, Symbol] action the action to retrieve action items for
34
+ #
35
+ # @return [Array] Array of ActionItems for the controller actions
36
+ def action_items_for(action)
37
+ action_items.select{|item| item.display_on?(action) }
38
+ end
39
+
40
+ # Clears all the existing action items for this resource
41
+ def clear_action_items!
42
+ @action_items = []
43
+ end
44
+
45
+ private
46
+
47
+ # Adds the default action items to each resource
48
+ def add_default_action_items
49
+ # New Link on all actions except :new and :show
50
+ add_action_item :except => [:new, :show] do
51
+ if controller.action_methods.include?('new')
52
+ link_to(I18n.t('active_admin.new_model', :model => active_admin_config.resource_name), new_resource_path)
53
+ end
54
+ end
55
+
56
+ # Edit link on show
57
+ add_action_item :only => :show do
58
+ if controller.action_methods.include?('edit')
59
+ link_to(I18n.t('active_admin.edit_model', :model => active_admin_config.resource_name), edit_resource_path(resource))
60
+ end
61
+ end
62
+
63
+ # Destroy link on show
64
+ add_action_item :only => :show do
65
+ if controller.action_methods.include?("destroy")
66
+ link_to(I18n.t('active_admin.delete_model', :model => active_admin_config.resource_name),
67
+ resource_path(resource),
68
+ :method => :delete, :confirm => I18n.t('active_admin.delete_confirmation'))
69
+ end
70
+ end
71
+ end
72
+
73
+ end
74
+ end
75
+
76
+ # Model class to store the data for ActionItems
77
+ class ActionItem
78
+ include ActiveAdmin::OptionalDisplay
79
+
80
+ attr_accessor :block
81
+
82
+ def initialize(options = {}, &block)
83
+ @options, @block = options, block
84
+ normalize_display_options!
85
+ end
86
+ end
87
+
88
+ end
@@ -0,0 +1,45 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Menu
4
+
5
+ # Set the menu options. To not add this resource to the menu, just
6
+ # call #menu(false)
7
+ def menu(options = {})
8
+ options = options == false ? { :display => false } : options
9
+ @menu_options = options
10
+ end
11
+
12
+ # The options to use for the menu
13
+ def menu_options
14
+ @menu_options ||= {}
15
+ end
16
+
17
+ # Returns the name to put this resource under in the menu
18
+ def parent_menu_item_name
19
+ menu_options[:parent]
20
+ end
21
+
22
+ # Returns the name to be displayed in the menu for this resource
23
+ def menu_item_name
24
+ menu_options[:label] || plural_resource_name
25
+ end
26
+
27
+ # Returns the items priority for altering the default sort order
28
+ def menu_item_priority
29
+ menu_options[:priority] || 10
30
+ end
31
+
32
+ # Returns a proc for deciding whether to display the menu item or not in the view
33
+ def menu_item_display_if
34
+ menu_options[:if] || proc { true }
35
+ end
36
+
37
+ # Should this resource be added to the menu system?
38
+ def include_in_menu?
39
+ return false if menu_options[:display] == false
40
+ !(belongs_to? && !belongs_to_config.optional?)
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,46 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Naming
4
+
5
+ # An underscored safe representation internally for this resource
6
+ def underscored_resource_name
7
+ @underscored_resource_name ||= if @options[:as]
8
+ @options[:as].gsub(' ', '').underscore.singularize
9
+ else
10
+ resource.name.gsub('::','').underscore
11
+ end
12
+ end
13
+
14
+ # A camelized safe representation for this resource
15
+ def camelized_resource_name
16
+ underscored_resource_name.camelize
17
+ end
18
+
19
+ # Returns the name to call this resource.
20
+ # By default will use resource.model_name.human
21
+ def resource_name
22
+ @resource_name ||= if @options[:as] || !resource.respond_to?(:model_name)
23
+ underscored_resource_name.titleize
24
+ else
25
+ resource.model_name.human.titleize
26
+ end
27
+ end
28
+
29
+ # Returns the plural version of this resource
30
+ def plural_resource_name
31
+ @plural_resource_name ||= if @options[:as] || !resource.respond_to?(:model_name)
32
+ resource_name.pluralize
33
+ else
34
+ # Check if we have a translation available otherwise pluralize
35
+ begin
36
+ I18n.translate!("activerecord.models.#{resource.model_name.downcase}")
37
+ resource.model_name.human(:count => 3)
38
+ rescue I18n::MissingTranslationData
39
+ resource_name.pluralize
40
+ end
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,33 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Scopes
4
+
5
+ # Return an array of scopes for this resource
6
+ def scopes
7
+ @scopes ||= []
8
+ end
9
+
10
+ # Returns a scope for this object by its identifier
11
+ def get_scope_by_id(id)
12
+ id = id.to_s
13
+ scopes.find{|s| s.id == id }
14
+ end
15
+
16
+ def default_scope
17
+ @default_scope
18
+ end
19
+
20
+ # Create a new scope object for this resource.
21
+ # If you want to internationalize the scope name, you can add
22
+ # to your i18n files a key like "active_admin.scopes.scope_method".
23
+ def scope(*args, &block)
24
+ options = args.extract_options!
25
+ self.scopes << ActiveAdmin::Scope.new(*args, &block)
26
+ if options[:default]
27
+ @default_scope = scopes.last
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,36 @@
1
+ require 'active_admin/helpers/optional_display'
2
+
3
+ module ActiveAdmin
4
+
5
+ class Resource
6
+ module Sidebars
7
+
8
+ def initialize(*args)
9
+ super
10
+ add_default_sidebar_sections
11
+ end
12
+
13
+ def sidebar_sections
14
+ @sidebar_sections ||= []
15
+ end
16
+
17
+ def clear_sidebar_sections!
18
+ @sidebar_sections = []
19
+ end
20
+
21
+ def sidebar_sections_for(action)
22
+ sidebar_sections.select{|section| section.display_on?(action) }
23
+ end
24
+
25
+ private
26
+
27
+ def add_default_sidebar_sections
28
+ self.sidebar_sections << ActiveAdmin::SidebarSection.new(:filters, :only => :index) do
29
+ active_admin_filters_form_for assigns["search"], filters_config
30
+ end
31
+ end
32
+
33
+ end
34
+ end
35
+
36
+ end