activeadmin 0.4.4 → 0.5.0.pre

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 (310) hide show
  1. data/.gitignore +3 -0
  2. data/.travis.yml +5 -0
  3. data/CHANGELOG.md +50 -0
  4. data/CONTRIBUTING.md +2 -4
  5. data/Gemfile +10 -4
  6. data/Guardfile +0 -1
  7. data/LICENSE +1 -1
  8. data/README.rdoc +19 -8
  9. data/Rakefile +10 -1
  10. data/activeadmin.gemspec +2 -1
  11. data/app/assets/javascripts/active_admin/application.js +3 -9
  12. data/app/assets/javascripts/active_admin/base.js +1 -0
  13. data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +64 -0
  14. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +107 -0
  15. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +100 -0
  16. data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +27 -0
  17. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
  18. data/app/assets/javascripts/active_admin/pages/application.js.coffee +13 -0
  19. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
  20. data/app/assets/stylesheets/active_admin/_base.css.scss +32 -26
  21. data/app/assets/stylesheets/active_admin/_forms.css.scss +12 -5
  22. data/app/assets/stylesheets/active_admin/_header.css.scss +1 -2
  23. data/app/assets/stylesheets/active_admin/_typography.css.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  25. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -2
  26. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  27. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +3 -3
  28. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  29. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +1 -1
  30. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +20 -27
  31. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +1 -0
  32. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +38 -36
  33. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +5 -5
  34. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +7 -3
  35. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +19 -17
  36. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +2 -2
  37. data/app/assets/stylesheets/active_admin/print.css.scss +290 -0
  38. data/app/views/active_admin/dashboard/index.html.arb +1 -1
  39. data/app/views/active_admin/devise/passwords/edit.html.erb +17 -14
  40. data/app/views/active_admin/devise/passwords/new.html.erb +4 -4
  41. data/app/views/active_admin/devise/sessions/new.html.erb +6 -6
  42. data/app/views/active_admin/devise/shared/_links.erb +6 -6
  43. data/app/views/active_admin/page/index.html.arb +1 -1
  44. data/app/views/active_admin/resource/edit.html.arb +1 -1
  45. data/app/views/active_admin/resource/index.csv.erb +1 -1
  46. data/app/views/active_admin/resource/index.html.arb +1 -1
  47. data/app/views/active_admin/resource/new.html.arb +1 -1
  48. data/app/views/active_admin/resource/show.html.arb +1 -1
  49. data/app/views/layouts/active_admin.html.arb +1 -1
  50. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  51. data/cucumber.yml +1 -1
  52. data/docs/0-installation.md +10 -1
  53. data/docs/{9-custom-pages.md → 10-custom-pages.md} +0 -0
  54. data/docs/2-resource-customization.md +19 -1
  55. data/docs/3-index-pages.md +31 -0
  56. data/docs/4-csv-format.md +9 -0
  57. data/docs/6-show-screens.md +1 -1
  58. data/docs/9-batch-actions.md +161 -0
  59. data/features/dashboard.feature +31 -8
  60. data/features/development_reloading.feature +1 -1
  61. data/features/edit_page.feature +3 -3
  62. data/features/i18n.feature +35 -0
  63. data/features/index/batch_actions.feature +98 -0
  64. data/features/index/filters.feature +26 -0
  65. data/features/index/format_as_csv.feature +35 -0
  66. data/features/index/index_as_table.feature +30 -2
  67. data/features/index/index_blank_slate.feature +8 -3
  68. data/features/index/index_scopes.feature +130 -24
  69. data/features/index/page_title.feature +12 -0
  70. data/features/new_page.feature +3 -3
  71. data/features/registering_pages.feature +61 -0
  72. data/features/root_to.feature +17 -0
  73. data/features/show/default_content.feature +1 -1
  74. data/features/show/page_title.feature +14 -0
  75. data/features/sidebar_sections.feature +26 -0
  76. data/features/site_title.feature +1 -1
  77. data/features/specifying_actions.feature +7 -6
  78. data/features/step_definitions/action_link_steps.rb +1 -1
  79. data/features/step_definitions/additional_web_steps.rb +7 -1
  80. data/features/step_definitions/batch_action_steps.rb +94 -0
  81. data/features/step_definitions/configuration_steps.rb +30 -8
  82. data/features/step_definitions/factory_steps.rb +12 -0
  83. data/features/step_definitions/format_steps.rb +6 -2
  84. data/features/step_definitions/i18n_steps.rb +3 -0
  85. data/features/step_definitions/table_steps.rb +114 -0
  86. data/features/step_definitions/user_steps.rb +30 -4
  87. data/features/support/env.rb +54 -15
  88. data/features/support/paths.rb +2 -0
  89. data/features/users/logging_in.feature +1 -1
  90. data/features/users/logging_out.feature +2 -1
  91. data/features/users/resetting_password.feature +34 -0
  92. data/lib/active_admin.rb +46 -7
  93. data/lib/active_admin/application.rb +30 -15
  94. data/lib/active_admin/base_controller/menu.rb +3 -3
  95. data/lib/active_admin/batch_actions.rb +17 -0
  96. data/lib/active_admin/batch_actions/controller.rb +25 -0
  97. data/lib/active_admin/batch_actions/resource_extension.rb +126 -0
  98. data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
  99. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
  100. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +63 -0
  101. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  102. data/lib/active_admin/comments.rb +5 -2
  103. data/lib/active_admin/comments/comment.rb +4 -3
  104. data/lib/active_admin/comments/views/active_admin_comments.rb +5 -5
  105. data/lib/active_admin/component.rb +1 -18
  106. data/lib/active_admin/csv_builder.rb +8 -3
  107. data/lib/active_admin/dashboards.rb +21 -4
  108. data/lib/active_admin/dashboards/dashboard_controller.rb +1 -5
  109. data/lib/active_admin/dependency_checker.rb +1 -1
  110. data/lib/active_admin/dsl.rb +61 -4
  111. data/lib/active_admin/engine.rb +1 -1
  112. data/lib/active_admin/filters.rb +8 -0
  113. data/lib/active_admin/filters/dsl.rb +12 -0
  114. data/lib/active_admin/filters/forms.rb +93 -0
  115. data/lib/active_admin/filters/resource_extension.rb +92 -0
  116. data/lib/active_admin/form_builder.rb +88 -33
  117. data/lib/active_admin/helpers/collection.rb +23 -0
  118. data/lib/active_admin/helpers/optional_display.rb +1 -1
  119. data/lib/active_admin/inputs/filter_select_input.rb +1 -1
  120. data/lib/active_admin/locales/bg.yml +37 -1
  121. data/lib/active_admin/locales/ca.yml +36 -0
  122. data/lib/active_admin/locales/cs.yml +36 -0
  123. data/lib/active_admin/locales/da.yml +36 -0
  124. data/lib/active_admin/locales/de.yml +42 -0
  125. data/lib/active_admin/locales/en.yml +27 -2
  126. data/lib/active_admin/locales/es.yml +45 -4
  127. data/lib/active_admin/locales/fr.yml +22 -0
  128. data/lib/active_admin/locales/{he_il.yml → he.yml} +37 -2
  129. data/lib/active_admin/locales/hr.yml +49 -5
  130. data/lib/active_admin/locales/hu.yml +21 -0
  131. data/lib/active_admin/locales/it.yml +36 -1
  132. data/lib/active_admin/locales/ja.yml +36 -0
  133. data/lib/active_admin/locales/ko.yml +36 -1
  134. data/lib/active_admin/locales/lv.yml +28 -2
  135. data/lib/active_admin/locales/nl.yml +42 -1
  136. data/lib/active_admin/locales/no-NB.yml +15 -0
  137. data/lib/active_admin/locales/pl.yml +45 -1
  138. data/lib/active_admin/locales/pt-BR.yml +36 -1
  139. data/lib/active_admin/locales/ro.yml +67 -0
  140. data/lib/active_admin/locales/ru.yml +43 -3
  141. data/lib/active_admin/locales/sv-SE.yml +41 -1
  142. data/lib/active_admin/locales/tr.yml +80 -0
  143. data/lib/active_admin/locales/vi.yml +80 -0
  144. data/lib/active_admin/locales/{zh_cn.yml → zh-CN.yml} +42 -2
  145. data/lib/active_admin/locales/zh-TW.yml +36 -1
  146. data/lib/active_admin/menu.rb +55 -30
  147. data/lib/active_admin/menu_builder.rb +65 -0
  148. data/lib/active_admin/menu_item.rb +55 -14
  149. data/lib/active_admin/namespace.rb +25 -55
  150. data/lib/active_admin/page.rb +15 -10
  151. data/lib/active_admin/resource.rb +9 -0
  152. data/lib/active_admin/resource/action_items.rb +4 -4
  153. data/lib/active_admin/resource/controllers.rb +1 -1
  154. data/lib/active_admin/resource/menu.rb +19 -21
  155. data/lib/active_admin/resource/naming.rb +55 -45
  156. data/lib/active_admin/resource/sidebars.rb +0 -13
  157. data/lib/active_admin/resource_collection.rb +10 -10
  158. data/lib/active_admin/resource_controller.rb +5 -5
  159. data/lib/active_admin/resource_controller/actions.rb +2 -0
  160. data/lib/active_admin/resource_controller/collection.rb +13 -4
  161. data/lib/active_admin/resource_dsl.rb +12 -6
  162. data/lib/active_admin/router.rb +27 -8
  163. data/lib/active_admin/scope.rb +1 -0
  164. data/lib/active_admin/sidebar_section.rb +2 -6
  165. data/lib/active_admin/version.rb +1 -1
  166. data/lib/active_admin/view_factory.rb +18 -13
  167. data/lib/active_admin/view_helpers.rb +0 -2
  168. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  169. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +24 -25
  170. data/lib/active_admin/view_helpers/display_helper.rb +1 -1
  171. data/lib/active_admin/view_helpers/fields_for.rb +44 -0
  172. data/lib/active_admin/view_helpers/form_helper.rb +6 -0
  173. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
  174. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  175. data/lib/active_admin/views/components/attributes_table.rb +6 -2
  176. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  177. data/lib/active_admin/views/components/paginated_collection.rb +13 -14
  178. data/lib/active_admin/views/components/popover.rb +27 -0
  179. data/lib/active_admin/views/components/scopes.rb +8 -13
  180. data/lib/active_admin/views/components/sidebar_section.rb +1 -1
  181. data/lib/active_admin/views/components/site_title.rb +55 -0
  182. data/lib/active_admin/views/components/status_tag.rb +4 -4
  183. data/lib/active_admin/views/components/table_for.rb +18 -18
  184. data/lib/active_admin/views/dashboard_section_renderer.rb +1 -1
  185. data/lib/active_admin/views/footer.rb +18 -0
  186. data/lib/active_admin/views/header.rb +31 -0
  187. data/lib/active_admin/views/index_as_block.rb +3 -0
  188. data/lib/active_admin/views/index_as_blog.rb +4 -0
  189. data/lib/active_admin/views/index_as_grid.rb +2 -0
  190. data/lib/active_admin/views/index_as_table.rb +19 -6
  191. data/lib/active_admin/views/pages/base.rb +14 -48
  192. data/lib/active_admin/views/pages/form.rb +3 -3
  193. data/lib/active_admin/views/pages/index.rb +56 -24
  194. data/lib/active_admin/views/pages/layout.rb +2 -2
  195. data/lib/active_admin/views/pages/page.rb +10 -4
  196. data/lib/active_admin/views/pages/show.rb +11 -8
  197. data/lib/active_admin/views/tabbed_navigation.rb +3 -3
  198. data/lib/active_admin/views/title_bar.rb +50 -0
  199. data/lib/active_admin/views/utility_nav.rb +41 -0
  200. data/lib/generators/active_admin/assets/assets_generator.rb +1 -1
  201. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +1 -0
  202. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +26 -3
  203. data/lib/generators/active_admin/devise/devise_generator.rb +2 -2
  204. data/lib/generators/active_admin/install/install_generator.rb +10 -10
  205. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +21 -1
  206. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +20 -0
  207. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  208. data/lib/generators/active_admin/resource/templates/admin.rb +1 -1
  209. data/spec/integration/memory_spec.rb +1 -11
  210. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  211. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  212. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  213. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  214. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  215. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  216. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  217. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  218. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  219. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  220. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  221. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  222. data/spec/javascripts/support/jasmine.yml +74 -0
  223. data/spec/javascripts/support/jasmine_config.rb +23 -0
  224. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  225. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  226. data/spec/javascripts/support/jquery.min.js +4 -0
  227. data/spec/spec_helper.rb +13 -13
  228. data/spec/spec_helper_without_rails.rb +2 -3
  229. data/spec/support/detect_rails_version.rb +16 -10
  230. data/spec/support/rails_template.rb +13 -1
  231. data/spec/support/templates/admin/stores.rb +1 -0
  232. data/spec/support/templates/en.yml +6 -0
  233. data/spec/unit/action_builder_spec.rb +38 -0
  234. data/spec/unit/application_spec.rb +12 -16
  235. data/spec/unit/base_controller_shared_examples.rb +3 -6
  236. data/spec/unit/batch_actions/resource_spec.rb +91 -0
  237. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  238. data/spec/unit/breadcrumbs_spec.rb +33 -0
  239. data/spec/unit/comments_spec.rb +6 -0
  240. data/spec/unit/config_shared_examples.rb +17 -64
  241. data/spec/unit/csv_builder_spec.rb +12 -2
  242. data/spec/unit/dashboard_controller_spec.rb +11 -5
  243. data/spec/unit/dsl_include_spec.rb +20 -0
  244. data/spec/unit/{filter_form_builder_spec.rb → filters/filter_form_builder_spec.rb} +10 -7
  245. data/spec/unit/filters/resource_spec.rb +60 -0
  246. data/spec/unit/form_builder_spec.rb +180 -28
  247. data/spec/unit/helpers/collection_spec.rb +65 -0
  248. data/spec/unit/menu_item_spec.rb +48 -53
  249. data/spec/unit/menu_spec.rb +46 -32
  250. data/spec/unit/namespace/register_page_spec.rb +0 -6
  251. data/spec/unit/namespace/register_resource_spec.rb +1 -8
  252. data/spec/unit/namespace_spec.rb +8 -2
  253. data/spec/unit/page_spec.rb +20 -8
  254. data/spec/unit/resource/naming_spec.rb +27 -26
  255. data/spec/unit/resource/sidebars_spec.rb +0 -7
  256. data/spec/unit/resource_collection_spec.rb +11 -11
  257. data/spec/unit/resource_controller/collection_spec.rb +23 -1
  258. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  259. data/spec/unit/resource_controller_spec.rb +43 -0
  260. data/spec/unit/resource_registration_spec.rb +2 -13
  261. data/spec/unit/resource_spec.rb +0 -42
  262. data/spec/unit/routing_spec.rb +60 -14
  263. data/spec/unit/scope_spec.rb +7 -0
  264. data/spec/unit/view_factory_spec.rb +9 -6
  265. data/spec/unit/view_helpers/fields_for_spec.rb +41 -0
  266. data/spec/unit/view_helpers/form_helper_spec.rb +18 -0
  267. data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
  268. data/spec/unit/views/components/attributes_table_spec.rb +32 -20
  269. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  270. data/spec/unit/views/components/blank_slate_spec.rb +5 -3
  271. data/spec/unit/views/components/columns_spec.rb +32 -22
  272. data/spec/unit/views/components/paginated_collection_spec.rb +54 -12
  273. data/spec/unit/views/components/panel_spec.rb +11 -6
  274. data/spec/unit/views/components/popover_spec.rb +33 -0
  275. data/spec/unit/views/components/sidebar_section_spec.rb +6 -6
  276. data/spec/unit/views/components/site_title_spec.rb +78 -0
  277. data/spec/unit/views/components/status_tag_spec.rb +17 -10
  278. data/spec/unit/views/components/table_for_spec.rb +37 -17
  279. data/spec/unit/views/pages/layout_spec.rb +51 -10
  280. data/spec/unit/views/tabbed_navigation_spec.rb +44 -23
  281. data/tasks/js.rake +32 -0
  282. data/tasks/test.rake +1 -1
  283. metadata +233 -200
  284. data/lib/active_admin/arbre.rb +0 -22
  285. data/lib/active_admin/arbre/builder.rb +0 -125
  286. data/lib/active_admin/arbre/context.rb +0 -45
  287. data/lib/active_admin/arbre/html/attributes.rb +0 -20
  288. data/lib/active_admin/arbre/html/class_list.rb +0 -24
  289. data/lib/active_admin/arbre/html/collection.rb +0 -27
  290. data/lib/active_admin/arbre/html/document.rb +0 -42
  291. data/lib/active_admin/arbre/html/element.rb +0 -161
  292. data/lib/active_admin/arbre/html/html5_elements.rb +0 -47
  293. data/lib/active_admin/arbre/html/tag.rb +0 -145
  294. data/lib/active_admin/arbre/html/text_node.rb +0 -35
  295. data/lib/active_admin/filter_form_builder.rb +0 -53
  296. data/lib/active_admin/renderer.rb +0 -87
  297. data/lib/active_admin/resource_controller/filters.rb +0 -58
  298. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  299. data/lib/active_admin/view_helpers/filter_form_helper.rb +0 -36
  300. data/lib/active_admin/view_helpers/renderer_helper.rb +0 -29
  301. data/lib/active_admin/views/header_renderer.rb +0 -82
  302. data/lib/generators/active_admin/assets/templates/dashboards.rb +0 -36
  303. data/lib/generators/active_admin/install/templates/dashboards.rb +0 -44
  304. data/spec/unit/arbre/context_spec.rb +0 -35
  305. data/spec/unit/arbre/html/element_finder_methods_spec.rb +0 -110
  306. data/spec/unit/arbre/html/element_spec.rb +0 -236
  307. data/spec/unit/arbre/html/tag_attributes_spec.rb +0 -61
  308. data/spec/unit/arbre/html/tag_spec.rb +0 -63
  309. data/spec/unit/arbre/html_spec.rb +0 -228
  310. data/spec/unit/renderer_spec.rb +0 -126
@@ -35,24 +35,29 @@ module ActiveAdmin
35
35
  include Resource::Menu
36
36
  include Resource::Naming
37
37
 
38
- # plural_resource_name is singular
39
- def resource_name
38
+ # label is singular
39
+ def plural_resource_label
40
40
  name
41
41
  end
42
42
 
43
- def safe_resource_name
44
- name
43
+ def resource_name
44
+ @resource_name ||= Resource::Name.new(nil, name)
45
+ end
46
+
47
+ def underscored_resource_name
48
+ resource_name.parameterize.underscore
45
49
  end
46
50
 
51
+ def camelized_resource_name
52
+ underscored_resource_name.camelize
53
+ end
47
54
 
48
- # Force plural to be singular
49
- def plural_resource_name
50
- name
55
+ def default_menu_options
56
+ super.merge(:id => resource_name)
51
57
  end
52
58
 
53
- # Force plural to be singular
54
- def plural_safe_resource_name
55
- name
59
+ def controller_name
60
+ [namespace.module_name, camelized_resource_name + "Controller"].compact.join('::')
56
61
  end
57
62
 
58
63
  def belongs_to?
@@ -47,6 +47,9 @@ module ActiveAdmin
47
47
  # Set the configuration for the CSV
48
48
  attr_writer :csv_builder
49
49
 
50
+ # Store a reference to the DSL so that we can dereference it during garbage collection.
51
+ attr_accessor :dsl
52
+
50
53
  module Base
51
54
  def initialize(namespace, resource_class, options = {})
52
55
  @namespace = namespace
@@ -109,6 +112,11 @@ module ActiveAdmin
109
112
  @collection_actions = []
110
113
  end
111
114
 
115
+ # Return only defined resource actions
116
+ def defined_actions
117
+ controller.instance_methods.map { |m| m.to_sym } & ResourceController::ACTIVE_ADMIN_ACTIONS
118
+ end
119
+
112
120
  # Are admin notes turned on for this resource
113
121
  def admin_notes?
114
122
  admin_notes.nil? ? ActiveAdmin.admin_notes : admin_notes
@@ -155,5 +163,6 @@ module ActiveAdmin
155
163
  def default_csv_builder
156
164
  @default_csv_builder ||= CSVBuilder.default_for_resource(resource_class)
157
165
  end
166
+
158
167
  end # class Resource
159
168
  end # module ActiveAdmin
@@ -54,23 +54,23 @@ module ActiveAdmin
54
54
  # New Link on all actions except :new and :show
55
55
  add_action_item :except => [:new, :show] do
56
56
  if controller.action_methods.include?('new')
57
- link_to(I18n.t('active_admin.new_model', :model => active_admin_config.resource_name), new_resource_path)
57
+ link_to(I18n.t('active_admin.new_model', :model => active_admin_config.resource_label), new_resource_path)
58
58
  end
59
59
  end
60
60
 
61
61
  # Edit link on show
62
62
  add_action_item :only => :show do
63
63
  if controller.action_methods.include?('edit')
64
- link_to(I18n.t('active_admin.edit_model', :model => active_admin_config.resource_name), edit_resource_path(resource))
64
+ link_to(I18n.t('active_admin.edit_model', :model => active_admin_config.resource_label), edit_resource_path(resource))
65
65
  end
66
66
  end
67
67
 
68
68
  # Destroy link on show
69
69
  add_action_item :only => :show do
70
70
  if controller.action_methods.include?("destroy")
71
- link_to(I18n.t('active_admin.delete_model', :model => active_admin_config.resource_name),
71
+ link_to(I18n.t('active_admin.delete_model', :model => active_admin_config.resource_label),
72
72
  resource_path(resource),
73
- :method => :delete, :confirm => I18n.t('active_admin.delete_confirmation'))
73
+ :method => :delete, :data => {:confirm => I18n.t('active_admin.delete_confirmation')})
74
74
  end
75
75
  end
76
76
  end
@@ -5,7 +5,7 @@ module ActiveAdmin
5
5
  # Returns a properly formatted controller name for this
6
6
  # config within its namespace
7
7
  def controller_name
8
- [namespace.module_name, plural_camelized_resource_name + "Controller"].compact.join('::')
8
+ [namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join('::')
9
9
  end
10
10
 
11
11
  # Returns the controller for this config
@@ -5,38 +5,36 @@ module ActiveAdmin
5
5
  # Set the menu options. To not add this resource to the menu, just
6
6
  # call #menu(false)
7
7
  def menu(options = {})
8
- options = options == false ? { :display => false } : options
9
- @menu_options = options
8
+ if options == false
9
+ @display_menu = false
10
+ else
11
+ options = default_menu_options.merge(options)
12
+ @parent_menu_item = options.delete(:parent)
13
+ @menu_item = MenuItem.new(default_menu_options.merge(options))
14
+ end
10
15
  end
11
16
 
12
- # The options to use for the menu
13
- def menu_options
14
- @menu_options ||= {}
17
+ def menu_item
18
+ @menu_item ||= MenuItem.new(default_menu_options)
15
19
  end
16
20
 
17
- # Returns the name to put this resource under in the menu
18
21
  def parent_menu_item_name
19
- menu_options[:parent]
22
+ return nil unless @parent_menu_item
23
+ ActiveAdmin::Resource::Name.new(nil, @parent_menu_item)
20
24
  end
21
25
 
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 }
26
+ # The default menu options to pass through to MenuItem.new
27
+ def default_menu_options
28
+ {
29
+ :id => resource_name.plural,
30
+ :label => proc{ plural_resource_label },
31
+ :url => route_collection_path
32
+ }
35
33
  end
36
34
 
37
35
  # Should this resource be added to the menu system?
38
36
  def include_in_menu?
39
- menu_options[:display] != false
37
+ @display_menu != false
40
38
  end
41
39
 
42
40
  end
@@ -1,72 +1,82 @@
1
1
  module ActiveAdmin
2
2
  class Resource
3
+
3
4
  module Naming
4
- # Returns the user facing name. Example: "Bank Account"
5
- def resource_name
6
- @resource_name ||= @options[:as]
7
- @resource_name ||= singular_human_name
8
- @resource_name ||= safe_resource_name
9
- end
10
5
 
11
- # Returns the plural version of the user facing name. Example: "Bank Accounts"
12
- def plural_resource_name
13
- @plural_resource_name ||= @options[:as].pluralize if @options[:as]
14
- @plural_resource_name ||= plural_human_name
15
- @plural_resource_name ||= resource_name.pluralize
6
+ # Returns a name used to uniquely identify this resource
7
+ # this should be an instance of ActiveAdmin:Resource::Name, which responds to
8
+ # #singular, #plural, #route_key, #human etc.
9
+ def resource_name
10
+ custom_name = @options[:as] && @options[:as].gsub(/\s/,'')
11
+ @resource_name ||= if custom_name || !resource_class.respond_to?(:model_name)
12
+ Resource::Name.new(resource_class, custom_name)
13
+ else
14
+ Resource::Name.new(resource_class)
15
+ end
16
16
  end
17
17
 
18
- # A name used internally to uniquely identify this resource
19
- def resource_key
20
- camelized_resource_name
18
+ # Returns the name to call this resource such as "Bank Account"
19
+ def resource_label
20
+ if @options[:as]
21
+ @options[:as]
22
+ else
23
+ resource_name.human(:default => resource_name.gsub('::', ' ').titleize)
24
+ end
21
25
  end
22
26
 
23
- def safe_resource_name
24
- @safe_resource_name ||= @options[:as]
25
- @safe_resource_name ||= resource_class.name.gsub('::',' ')
27
+ # Returns the plural version of this resource such as "Bank Accounts"
28
+ def plural_resource_label
29
+ if @options[:as]
30
+ @options[:as].pluralize
31
+ else
32
+ resource_name.human(:count => 1.1, :default => resource_label.pluralize.titleize)
33
+ end
26
34
  end
35
+ end
27
36
 
28
- def plural_safe_resource_name
29
- safe_resource_name.pluralize
30
- end
37
+ # A subclass of ActiveModel::Name which supports the different APIs presented
38
+ # in Rails < 3.1 and > 3.1.
39
+ class Name < ActiveModel::Name
31
40
 
32
- # A camelized safe representation for this resource
33
- def camelized_resource_name
34
- safe_resource_name.titleize.gsub(' ', '')
41
+ def initialize(klass, name = nil)
42
+ if ActiveModel::Name.instance_method(:initialize).arity == 1
43
+ super(proxy_for_initializer(klass, name))
44
+ else
45
+ super(klass, nil, name)
46
+ end
35
47
  end
36
48
 
37
- def plural_camelized_resource_name
38
- plural_safe_resource_name.titleize.gsub(' ', '')
39
- end
49
+ def proxy_for_initializer(klass, name)
50
+ return klass unless name
51
+ return StringClassProxy.new(klass, name) if klass
40
52
 
41
- # An underscored safe representation internally for this resource
42
- def underscored_resource_name
43
- camelized_resource_name.underscore
53
+ StringProxy.new(name)
44
54
  end
45
55
 
46
- # Returns the plural and underscored version of this resource. Useful for element id's.
47
- def plural_underscored_resource_name
48
- plural_camelized_resource_name.underscore
56
+ def route_key
57
+ plural
49
58
  end
50
59
 
60
+ class StringProxy
61
+ def initialize(name)
62
+ @name = name
63
+ end
51
64
 
52
- private
53
-
54
- # @return [String] Titleized human name via ActiveRecord I18n or nil
55
- def singular_human_name
56
- return nil unless resource_class.respond_to?(:model_name)
57
- resource_class.model_name.human.titleize
65
+ def name
66
+ @name
67
+ end
58
68
  end
59
69
 
60
- # @return [String] Titleized plural human name via ActiveRecord I18n or nil
61
- def plural_human_name
62
- return nil unless resource_class.respond_to?(:model_name)
70
+ class StringClassProxy < StringProxy
71
+ delegate :lookup_ancestors, :i18n_scope, :to => :"@klass"
63
72
 
64
- begin
65
- I18n.translate!("activerecord.models.#{resource_class.model_name.underscore}.other").titleize
66
- rescue I18n::MissingTranslationData
67
- nil
73
+ def initialize(klass, name)
74
+ @klass = klass || name
75
+ super(name)
68
76
  end
69
77
  end
78
+
70
79
  end
80
+
71
81
  end
72
82
  end
@@ -5,11 +5,6 @@ module ActiveAdmin
5
5
  class Resource
6
6
  module Sidebars
7
7
 
8
- def initialize(*args)
9
- super
10
- add_default_sidebar_sections
11
- end
12
-
13
8
  def sidebar_sections
14
9
  @sidebar_sections ||= []
15
10
  end
@@ -26,14 +21,6 @@ module ActiveAdmin
26
21
  !!@sidebar_sections && @sidebar_sections.any?
27
22
  end
28
23
 
29
- private
30
-
31
- def add_default_sidebar_sections
32
- self.sidebar_sections << ActiveAdmin::SidebarSection.new(:filters, :only => :index) do
33
- active_admin_filters_form_for assigns["search"], filters_config
34
- end
35
- end
36
-
37
24
  end
38
25
  end
39
26
 
@@ -5,7 +5,7 @@ module ActiveAdmin
5
5
  # Holds on to a collection of Resources. Is an Enumerable object
6
6
  # so it has some Array like qualities.
7
7
  #
8
- # Adding a resource assumes that the object responds to #resource_key
8
+ # Adding a resource assumes that the object responds to #resource_name
9
9
  class ResourceCollection
10
10
  include Enumerable
11
11
 
@@ -13,19 +13,19 @@ module ActiveAdmin
13
13
  @resource_hash = {}
14
14
  end
15
15
 
16
- # Add a new resource to the collection. If the resource_key already
16
+ # Add a new resource to the collection. If the resource_name already
17
17
  # exists, the exiting resource is returned.
18
18
  #
19
19
  # @param [Resource, Page] resource The resource to add to the collection
20
20
  #
21
21
  # @returns [Resource, Page] Either the existing resource or the new one
22
22
  def add(resource)
23
- if has_key?(resource.resource_key)
24
- existing_resource = find_by_key(resource.resource_key)
23
+ if has_key?(resource.resource_name)
24
+ existing_resource = find_by_key(resource.resource_name)
25
25
  ensure_resource_classes_match!(existing_resource, resource)
26
26
  existing_resource
27
27
  else
28
- @resource_hash[resource.resource_key] = resource
28
+ @resource_hash[resource.resource_name] = resource
29
29
  end
30
30
  end
31
31
 
@@ -45,13 +45,13 @@ module ActiveAdmin
45
45
  end
46
46
 
47
47
  # @returns [Boolean] If the key has been registered in the collection
48
- def has_key?(resource_key)
49
- @resource_hash.has_key?(resource_key)
48
+ def has_key?(resource_name)
49
+ @resource_hash.has_key?(resource_name)
50
50
  end
51
51
 
52
52
  # Finds a resource by a given key
53
- def find_by_key(resource_key)
54
- @resource_hash[resource_key]
53
+ def find_by_key(resource_name)
54
+ @resource_hash[resource_name]
55
55
  end
56
56
 
57
57
  # Finds a resource based on it's class. Looks up the class Heirarchy if its
@@ -80,7 +80,7 @@ module ActiveAdmin
80
80
 
81
81
  if existing_resource.resource_class != resource.resource_class
82
82
  raise ActiveAdmin::ResourceMismatchError,
83
- "Tried to register #{resource.resource_class} as #{resource.resource_key} but already registered to #{existing_resource.resource_class}"
83
+ "Tried to register #{resource.resource_class} as #{resource.resource_name} but already registered to #{existing_resource.resource_class}"
84
84
  end
85
85
  end
86
86
 
@@ -3,8 +3,8 @@ require 'active_admin/resource_controller/actions'
3
3
  require 'active_admin/resource_controller/action_builder'
4
4
  require 'active_admin/resource_controller/callbacks'
5
5
  require 'active_admin/resource_controller/collection'
6
- require 'active_admin/resource_controller/filters'
7
6
  require 'active_admin/resource_controller/scoping'
7
+ require 'active_admin/resource_controller/sidebars'
8
8
  require 'active_admin/resource_controller/resource_class_methods'
9
9
 
10
10
  module ActiveAdmin
@@ -22,17 +22,17 @@ module ActiveAdmin
22
22
  include ActionBuilder
23
23
  include Callbacks
24
24
  include Collection
25
- include Filters
26
25
  include Scoping
26
+ include Sidebars
27
27
  extend ResourceClassMethods
28
28
 
29
29
  class << self
30
30
  def active_admin_config=(config)
31
31
  @active_admin_config = config
32
32
 
33
- defaults :resource_class => config.resource_class,
34
- :route_prefix => config.route_prefix,
35
- :instance_name => config.underscored_resource_name
33
+ unless config.nil?
34
+ defaults :resource_class => config.resource_class, :route_prefix => config.route_prefix, :instance_name => config.resource_name.singular
35
+ end
36
36
  end
37
37
 
38
38
  # Inherited Resources uses the inherited(base) hook method to
@@ -60,6 +60,7 @@ module ActiveAdmin
60
60
  end
61
61
  alias :update! :update
62
62
 
63
+
63
64
  # Make aliases protected
64
65
  protected :index!, :show!, :new!, :create!, :edit!, :update!
65
66
 
@@ -75,5 +76,6 @@ module ActiveAdmin
75
76
  def csv_filename
76
77
  "#{resource_collection_name.to_s.gsub('_', '-')}-#{Time.now.strftime("%Y-%m-%d")}.csv"
77
78
  end
79
+
78
80
  end
79
81
  end
@@ -49,7 +49,7 @@ module ActiveAdmin
49
49
  table_column = (column =~ /\./) ? column :
50
50
  "#{table}.#{active_admin_config.resource_quoted_column_name(column)}"
51
51
 
52
- chain.order("#{table_column} #{order}")
52
+ chain.reorder("#{table_column} #{order}")
53
53
  else
54
54
  chain # just return the chain
55
55
  end
@@ -88,14 +88,20 @@ module ActiveAdmin
88
88
  end
89
89
 
90
90
  def scope_current_collection(chain)
91
+ @collection_before_scope = chain
92
+
91
93
  if current_scope
92
- @before_scope_collection = chain
93
94
  scope_chain(current_scope, chain)
94
95
  else
95
96
  chain
96
97
  end
97
98
  end
98
99
 
100
+ def collection_before_scope
101
+ @collection_before_scope
102
+ end
103
+
104
+
99
105
  include ActiveAdmin::ScopeChain
100
106
 
101
107
  def current_scope
@@ -116,8 +122,11 @@ module ActiveAdmin
116
122
  end
117
123
 
118
124
  def paginate(chain)
119
- chain.send(Kaminari.config.page_method_name, params[:page]).per(per_page)
120
- end
125
+ page_method_name = Kaminari.config.page_method_name
126
+ page = params[Kaminari.config.param_name]
127
+
128
+ chain.send(page_method_name, page).per(per_page)
129
+ end
121
130
 
122
131
  def per_page
123
132
  return max_csv_records if request.format == 'text/csv'