yousty-activeadmin 1.0.4.pre → 1.0.5.pre

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 (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +261 -211
  3. data/CONTRIBUTING.md +73 -39
  4. data/Gemfile +38 -20
  5. data/Guardfile +1 -0
  6. data/LICENSE +1 -1
  7. data/README.md +48 -24
  8. data/Rakefile +12 -4
  9. data/activeadmin.gemspec +21 -26
  10. data/app/assets/javascripts/active_admin/application.js.coffee +34 -5
  11. data/app/assets/javascripts/active_admin/base.js.coffee +11 -2
  12. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  13. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  14. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  15. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +3 -4
  16. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +51 -55
  17. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  18. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  19. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  20. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  21. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +29 -58
  22. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +2 -3
  23. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  24. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +51 -15
  25. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  26. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  27. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  28. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  29. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  30. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -12
  32. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +3 -1
  33. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  34. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  35. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  36. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +0 -0
  37. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  38. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  39. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +1 -0
  40. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  41. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  42. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  43. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -0
  44. data/app/assets/stylesheets/active_admin/mixins/{_gradients.css.scss → _gradients.scss} +1 -1
  45. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  46. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_rounded.css.scss → _rounded.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +7 -1
  49. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  51. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  52. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +10 -7
  53. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  54. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  55. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  56. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  57. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  58. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  59. data/app/views/active_admin/devise/sessions/new.html.erb +8 -8
  60. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  61. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  62. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  63. data/config/locales/ar.yml +120 -0
  64. data/config/locales/bg.yml +26 -6
  65. data/config/locales/bs.yml +122 -0
  66. data/config/locales/ca.yml +10 -1
  67. data/config/locales/cs.yml +7 -2
  68. data/config/locales/da.yml +7 -3
  69. data/config/locales/de-CH.yml +14 -31
  70. data/config/locales/de.yml +33 -33
  71. data/config/locales/el.yml +127 -0
  72. data/config/locales/en-GB.yml +11 -4
  73. data/config/locales/en.yml +21 -4
  74. data/config/locales/{es_MX.yml → es-MX.yml} +14 -24
  75. data/config/locales/es.yml +32 -25
  76. data/config/locales/fa.yml +120 -0
  77. data/config/locales/fi.yml +9 -5
  78. data/config/locales/fr.yml +28 -12
  79. data/config/locales/he.yml +7 -3
  80. data/config/locales/hr.yml +42 -11
  81. data/config/locales/hu.yml +10 -3
  82. data/config/locales/it.yml +31 -3
  83. data/config/locales/ja.yml +17 -4
  84. data/config/locales/ko.yml +7 -1
  85. data/config/locales/lt.yml +42 -11
  86. data/config/locales/lv.yml +7 -3
  87. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  88. data/config/locales/nl.yml +36 -5
  89. data/config/locales/pl.yml +13 -8
  90. data/config/locales/pt-BR.yml +36 -5
  91. data/config/locales/pt-PT.yml +8 -4
  92. data/config/locales/ro.yml +7 -3
  93. data/config/locales/ru.yml +26 -5
  94. data/config/locales/sv-SE.yml +9 -5
  95. data/config/locales/tr.yml +10 -3
  96. data/config/locales/uk.yml +36 -12
  97. data/config/locales/vi.yml +7 -3
  98. data/config/locales/zh-CN.yml +26 -10
  99. data/config/locales/zh-TW.yml +19 -13
  100. data/docs/0-installation.md +14 -6
  101. data/docs/1-general-configuration.md +8 -5
  102. data/docs/10-custom-pages.md +68 -70
  103. data/docs/11-decorators.md +48 -59
  104. data/docs/12-arbre-components.md +79 -73
  105. data/docs/13-authorization-adapter.md +128 -107
  106. data/docs/14-gotchas.md +90 -0
  107. data/docs/2-resource-customization.md +82 -15
  108. data/docs/3-index-pages.md +71 -12
  109. data/docs/3-index-pages/custom-index.md +31 -0
  110. data/docs/3-index-pages/index-as-table.md +45 -2
  111. data/docs/4-csv-format.md +1 -1
  112. data/docs/5-forms.md +78 -29
  113. data/docs/6-show-pages.md +31 -3
  114. data/docs/7-sidebars.md +46 -25
  115. data/docs/8-custom-actions.md +98 -77
  116. data/docs/9-batch-actions.md +211 -133
  117. data/docs/README.md +24 -0
  118. data/features/action_item.feature +3 -3
  119. data/features/authorization_pundit.feature +37 -0
  120. data/features/belongs_to.feature +3 -0
  121. data/features/breadcrumb.feature +48 -0
  122. data/features/comments/commenting.feature +44 -13
  123. data/features/development_reloading.feature +3 -4
  124. data/features/edit_page.feature +9 -19
  125. data/features/favicon.feature +3 -3
  126. data/features/i18n.feature +5 -0
  127. data/features/index/batch_actions.feature +41 -0
  128. data/features/index/filters.feature +23 -0
  129. data/features/index/format_as_csv.feature +90 -4
  130. data/features/index/index_as_blog.feature +4 -4
  131. data/features/index/index_as_table.feature +102 -6
  132. data/features/index/index_blank_slate.feature +22 -0
  133. data/features/index/index_scope_to.feature +16 -16
  134. data/features/index/page_title.feature +11 -0
  135. data/features/index/pagination.feature +1 -1
  136. data/features/index/switch_index_view.feature +14 -14
  137. data/features/new_page.feature +10 -20
  138. data/features/registering_pages.feature +1 -1
  139. data/features/renamed_resource.feature +32 -0
  140. data/features/show/page_title.feature +11 -0
  141. data/features/show/tabs.feature +27 -0
  142. data/features/sidebar_sections.feature +12 -0
  143. data/features/specifying_actions.feature +3 -3
  144. data/features/step_definitions/action_item_steps.rb +2 -2
  145. data/features/step_definitions/action_link_steps.rb +14 -1
  146. data/features/step_definitions/additional_web_steps.rb +17 -18
  147. data/features/step_definitions/asset_steps.rb +3 -3
  148. data/features/step_definitions/attribute_steps.rb +8 -3
  149. data/features/step_definitions/batch_action_steps.rb +26 -9
  150. data/features/step_definitions/blog_steps.rb +3 -0
  151. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  152. data/features/step_definitions/comment_steps.rb +1 -1
  153. data/features/step_definitions/configuration_steps.rb +1 -1
  154. data/features/step_definitions/dashboard_steps.rb +2 -2
  155. data/features/step_definitions/factory_steps.rb +6 -6
  156. data/features/step_definitions/filter_steps.rb +25 -3
  157. data/features/step_definitions/flash_steps.rb +3 -3
  158. data/features/step_definitions/format_steps.rb +17 -10
  159. data/features/step_definitions/index_scope_steps.rb +5 -5
  160. data/features/step_definitions/layout_steps.rb +1 -1
  161. data/features/step_definitions/member_link_steps.rb +2 -2
  162. data/features/step_definitions/menu_steps.rb +3 -3
  163. data/features/step_definitions/pagination_steps.rb +2 -3
  164. data/features/step_definitions/sidebar_steps.rb +8 -3
  165. data/features/step_definitions/site_title_steps.rb +6 -4
  166. data/features/step_definitions/symbol_leak_steps.rb +1 -1
  167. data/features/step_definitions/tab_steps.rb +5 -0
  168. data/features/step_definitions/table_steps.rb +4 -4
  169. data/features/step_definitions/user_steps.rb +15 -9
  170. data/features/step_definitions/web_steps.rb +10 -11
  171. data/features/sti_resource.feature +2 -10
  172. data/features/strong_parameters.feature +73 -0
  173. data/features/support/env.rb +35 -2
  174. data/features/support/paths.rb +2 -2
  175. data/features/support/selectors.rb +1 -1
  176. data/features/users/resetting_password.feature +7 -7
  177. data/lib/active_admin.rb +18 -13
  178. data/lib/active_admin/abstract_view_factory.rb +7 -17
  179. data/lib/active_admin/application.rb +50 -25
  180. data/lib/active_admin/asset_registration.rb +2 -2
  181. data/lib/active_admin/authorization_adapter.rb +2 -2
  182. data/lib/active_admin/base_controller.rb +2 -3
  183. data/lib/active_admin/base_controller/authorization.rb +13 -31
  184. data/lib/active_admin/batch_actions.rb +1 -1
  185. data/lib/active_admin/batch_actions/controller.rb +13 -7
  186. data/lib/active_admin/batch_actions/resource_extension.rb +43 -17
  187. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  188. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  189. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  190. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  191. data/lib/active_admin/callbacks.rb +25 -24
  192. data/lib/active_admin/cancan_adapter.rb +7 -11
  193. data/lib/active_admin/csv_builder.rb +92 -15
  194. data/lib/active_admin/dependency.rb +93 -0
  195. data/lib/active_admin/deprecation.rb +6 -7
  196. data/lib/active_admin/devise.rb +26 -14
  197. data/lib/active_admin/dsl.rb +18 -11
  198. data/lib/active_admin/engine.rb +7 -2
  199. data/lib/active_admin/error.rb +59 -0
  200. data/lib/active_admin/filters/dsl.rb +2 -2
  201. data/lib/active_admin/filters/forms.rb +19 -30
  202. data/lib/active_admin/filters/formtastic_addons.rb +20 -11
  203. data/lib/active_admin/filters/resource_extension.rb +16 -9
  204. data/lib/active_admin/form_builder.rb +94 -105
  205. data/lib/active_admin/helpers/collection.rb +7 -13
  206. data/lib/active_admin/helpers/i18n.rb +7 -0
  207. data/lib/active_admin/helpers/optional_display.rb +5 -5
  208. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  209. data/lib/active_admin/helpers/settings.rb +16 -9
  210. data/lib/active_admin/iconic.rb +17 -15
  211. data/lib/active_admin/iconic/icons.rb +136 -136
  212. data/lib/active_admin/inputs.rb +11 -7
  213. data/lib/active_admin/inputs/datepicker_input.rb +1 -1
  214. data/lib/active_admin/inputs/filters/base.rb +42 -0
  215. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  216. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  217. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  218. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  219. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  220. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  221. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  222. data/lib/active_admin/menu.rb +3 -3
  223. data/lib/active_admin/menu_collection.rb +1 -4
  224. data/lib/active_admin/namespace.rb +52 -29
  225. data/lib/active_admin/order_clause.rb +26 -0
  226. data/lib/active_admin/orm/active_record.rb +2 -0
  227. data/lib/active_admin/orm/active_record/comments.rb +48 -51
  228. data/lib/active_admin/orm/active_record/comments/comment.rb +16 -10
  229. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -1
  230. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -1
  231. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +15 -13
  232. data/lib/active_admin/page.rb +5 -1
  233. data/lib/active_admin/page_dsl.rb +1 -1
  234. data/lib/active_admin/page_presenter.rb +2 -2
  235. data/lib/active_admin/pundit_adapter.rb +68 -0
  236. data/lib/active_admin/resource.rb +12 -3
  237. data/lib/active_admin/resource/action_items.rb +15 -8
  238. data/lib/active_admin/resource/belongs_to.rb +7 -3
  239. data/lib/active_admin/resource/controllers.rb +1 -0
  240. data/lib/active_admin/resource/includes.rb +12 -0
  241. data/lib/active_admin/resource/menu.rb +5 -5
  242. data/lib/active_admin/resource/naming.rb +25 -47
  243. data/lib/active_admin/resource/page_presenters.rb +1 -1
  244. data/lib/active_admin/resource/routes.rb +26 -10
  245. data/lib/active_admin/resource/scope_to.rb +7 -7
  246. data/lib/active_admin/resource/sidebars.rb +1 -0
  247. data/lib/active_admin/resource_collection.rb +44 -16
  248. data/lib/active_admin/resource_controller.rb +6 -5
  249. data/lib/active_admin/resource_controller/data_access.rb +87 -82
  250. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  251. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  252. data/lib/active_admin/resource_dsl.rb +54 -10
  253. data/lib/active_admin/router.rb +7 -7
  254. data/lib/active_admin/scope.rb +6 -6
  255. data/lib/active_admin/sidebar_section.rb +10 -2
  256. data/lib/active_admin/version.rb +1 -1
  257. data/lib/active_admin/view_factory.rb +17 -16
  258. data/lib/active_admin/view_helpers.rb +0 -1
  259. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  260. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +13 -6
  261. data/lib/active_admin/view_helpers/display_helper.rb +30 -17
  262. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -24
  263. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  264. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  265. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  266. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  267. data/lib/active_admin/views/action_items.rb +2 -2
  268. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  269. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  270. data/lib/active_admin/views/components/attributes_table.rb +22 -13
  271. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  272. data/lib/active_admin/views/components/columns.rb +13 -7
  273. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  274. data/lib/active_admin/views/components/index_list.rb +7 -7
  275. data/lib/active_admin/views/components/paginated_collection.rb +33 -17
  276. data/lib/active_admin/views/components/panel.rb +8 -2
  277. data/lib/active_admin/views/components/popover.rb +1 -1
  278. data/lib/active_admin/views/components/scopes.rb +1 -1
  279. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  280. data/lib/active_admin/views/components/site_title.rb +2 -2
  281. data/lib/active_admin/views/components/status_tag.rb +34 -11
  282. data/lib/active_admin/views/components/table_for.rb +67 -22
  283. data/lib/active_admin/views/components/tabs.rb +28 -0
  284. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  285. data/lib/active_admin/views/footer.rb +3 -3
  286. data/lib/active_admin/views/header.rb +3 -3
  287. data/lib/active_admin/views/index_as_blog.rb +6 -6
  288. data/lib/active_admin/views/index_as_grid.rb +2 -2
  289. data/lib/active_admin/views/index_as_table.rb +127 -40
  290. data/lib/active_admin/views/pages/base.rb +22 -18
  291. data/lib/active_admin/views/pages/form.rb +16 -6
  292. data/lib/active_admin/views/pages/index.rb +36 -20
  293. data/lib/active_admin/views/pages/layout.rb +1 -1
  294. data/lib/active_admin/views/pages/show.rb +4 -4
  295. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  296. data/lib/active_admin/views/title_bar.rb +10 -8
  297. data/lib/generators/active_admin/assets/assets_generator.rb +1 -3
  298. data/lib/generators/active_admin/devise/devise_generator.rb +20 -28
  299. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  300. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -22
  301. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -9
  302. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  303. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  304. data/lib/generators/active_admin/page/USAGE +8 -0
  305. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  306. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  307. data/lib/generators/active_admin/resource/resource_generator.rb +2 -4
  308. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  309. data/lib/ransack_ext.rb +4 -4
  310. data/script/local +2 -2
  311. data/script/travis_cache +107 -0
  312. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  313. data/spec/javascripts/fixtures/flashes.html +2 -0
  314. data/spec/rails_helper.rb +154 -0
  315. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  316. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  317. data/spec/requests/memory_spec.rb +23 -0
  318. data/spec/requests/stylesheets_spec.rb +18 -0
  319. data/spec/spec_helper.rb +12 -170
  320. data/spec/support/detect_rails_version.rb +31 -39
  321. data/spec/support/rails_template.rb +61 -34
  322. data/spec/support/rails_template_with_data.rb +14 -14
  323. data/spec/support/templates/admin/stores.rb +3 -5
  324. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  325. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  326. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  327. data/spec/support/templates/policies/application_policy.rb +45 -0
  328. data/spec/support/templates/policies/category_policy.rb +7 -0
  329. data/spec/support/templates/policies/post_policy.rb +15 -0
  330. data/spec/support/templates/policies/store_policy.rb +11 -0
  331. data/spec/support/templates/policies/user_policy.rb +11 -0
  332. data/spec/support/templates/post_decorator.rb +4 -46
  333. data/spec/unit/abstract_view_factory_spec.rb +11 -11
  334. data/spec/unit/action_builder_spec.rb +24 -18
  335. data/spec/unit/active_admin_spec.rb +2 -2
  336. data/spec/unit/application_spec.rb +30 -31
  337. data/spec/unit/asset_registration_spec.rb +11 -11
  338. data/spec/unit/authorization/authorization_adapter_spec.rb +7 -7
  339. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  340. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  341. data/spec/unit/auto_link_spec.rb +42 -5
  342. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  343. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  344. data/spec/unit/belongs_to_spec.rb +26 -17
  345. data/spec/unit/cancan_adapter_spec.rb +4 -4
  346. data/spec/unit/comments_spec.rb +99 -39
  347. data/spec/unit/component_spec.rb +3 -3
  348. data/spec/unit/config_shared_examples.rb +8 -8
  349. data/spec/unit/controller_filters_spec.rb +26 -14
  350. data/spec/unit/csv_builder_spec.rb +152 -24
  351. data/spec/unit/dependency_spec.rb +135 -0
  352. data/spec/unit/devise_spec.rb +17 -37
  353. data/spec/unit/dsl_spec.rb +70 -9
  354. data/spec/unit/event_spec.rb +9 -9
  355. data/spec/unit/filters/filter_form_builder_spec.rb +167 -157
  356. data/spec/unit/filters/resource_spec.rb +35 -33
  357. data/spec/unit/form_builder_spec.rb +383 -145
  358. data/spec/unit/generators/install_spec.rb +5 -5
  359. data/spec/unit/helpers/collection_spec.rb +18 -18
  360. data/spec/unit/helpers/scope_chain_spec.rb +5 -5
  361. data/spec/unit/helpers/settings_spec.rb +4 -4
  362. data/spec/unit/i18n_spec.rb +12 -0
  363. data/spec/unit/menu_collection_spec.rb +14 -14
  364. data/spec/unit/menu_item_spec.rb +42 -42
  365. data/spec/unit/menu_spec.rb +20 -20
  366. data/spec/unit/namespace/authorization_spec.rb +5 -5
  367. data/spec/unit/namespace/register_page_spec.rb +9 -9
  368. data/spec/unit/namespace/register_resource_spec.rb +26 -28
  369. data/spec/unit/namespace_spec.rb +20 -20
  370. data/spec/unit/order_clause_spec.rb +81 -0
  371. data/spec/unit/page_controller_spec.rb +1 -1
  372. data/spec/unit/page_spec.rb +18 -12
  373. data/spec/unit/pretty_format_spec.rb +42 -14
  374. data/spec/unit/pundit_adapter_spec.rb +98 -0
  375. data/spec/unit/resource/action_items_spec.rb +13 -10
  376. data/spec/unit/resource/includes_spec.rb +21 -0
  377. data/spec/unit/resource/menu_spec.rb +1 -1
  378. data/spec/unit/resource/naming_spec.rb +23 -23
  379. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  380. data/spec/unit/resource/pagination_spec.rb +6 -6
  381. data/spec/unit/resource/routes_spec.rb +10 -10
  382. data/spec/unit/resource/scopes_spec.rb +14 -7
  383. data/spec/unit/resource/sidebars_spec.rb +6 -6
  384. data/spec/unit/resource_collection_spec.rb +66 -68
  385. data/spec/unit/resource_controller/data_access_spec.rb +39 -21
  386. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  387. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  388. data/spec/unit/resource_controller_spec.rb +66 -62
  389. data/spec/unit/resource_registration_spec.rb +12 -12
  390. data/spec/unit/resource_spec.rb +75 -40
  391. data/spec/unit/routing_spec.rb +39 -31
  392. data/spec/unit/scope_spec.rb +112 -30
  393. data/spec/unit/settings_spec.rb +51 -21
  394. data/spec/unit/view_factory_spec.rb +2 -2
  395. data/spec/unit/view_helpers/breadcrumbs_spec.rb +137 -69
  396. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  397. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  398. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  399. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  400. data/spec/unit/view_helpers/form_helper_spec.rb +9 -22
  401. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +59 -21
  402. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  403. data/spec/unit/views/components/attributes_table_spec.rb +94 -52
  404. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  405. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  406. data/spec/unit/views/components/columns_spec.rb +52 -22
  407. data/spec/unit/views/components/index_list_spec.rb +11 -8
  408. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  409. data/spec/unit/views/components/paginated_collection_spec.rb +68 -59
  410. data/spec/unit/views/components/panel_spec.rb +32 -21
  411. data/spec/unit/views/components/popover_spec.rb +7 -7
  412. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  413. data/spec/unit/views/components/site_title_spec.rb +8 -8
  414. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  415. data/spec/unit/views/components/table_for_spec.rb +227 -44
  416. data/spec/unit/views/components/tabs_spec.rb +39 -0
  417. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  418. data/spec/unit/views/pages/form_spec.rb +17 -10
  419. data/spec/unit/views/pages/index_spec.rb +60 -0
  420. data/spec/unit/views/pages/layout_spec.rb +17 -21
  421. data/spec/unit/views/pages/show_spec.rb +16 -3
  422. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  423. data/tasks/docs.rake +1 -1
  424. data/tasks/parallel_tests.rake +8 -2
  425. data/tasks/test.rake +8 -4
  426. data/tasks/yard.rake +7 -5
  427. metadata +180 -101
  428. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  429. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  430. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  431. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  432. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  433. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  434. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  435. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  436. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  437. data/app/assets/images/active_admin/loading.gif +0 -0
  438. data/app/assets/javascripts/active_admin/components/application.js.coffee +0 -23
  439. data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +0 -26
  440. data/app/assets/javascripts/active_admin/components/has_many.js.coffee +0 -41
  441. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  442. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -39
  443. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  444. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  445. data/app/views/active_admin/resource/index.csv.erb +0 -17
  446. data/docs/3-index-pages/create-an-index.md +0 -29
  447. data/lib/active_admin/inputs/filter_base.rb +0 -33
  448. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  449. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -32
  450. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -51
  451. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  452. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  453. data/lib/active_admin/inputs/filter_select_input.rb +0 -61
  454. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  455. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  456. data/spec/integration/memory_spec.rb +0 -29
  457. data/spec/integration/stylesheets_spec.rb +0 -41
  458. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  459. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  460. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  461. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  462. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  463. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  464. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  465. data/spec/javascripts/support/jquery.min.js +0 -4
  466. data/spec/spec_helper_without_rails.rb +0 -16
  467. data/tasks/js.rake +0 -32
@@ -1,8 +1,10 @@
1
1
  module ActiveAdmin
2
2
  class Comment < ActiveRecord::Base
3
3
 
4
- belongs_to :resource, :polymorphic => true
5
- belongs_to :author, :polymorphic => true
4
+ self.table_name = 'active_admin_comments'
5
+
6
+ belongs_to :resource, polymorphic: true
7
+ belongs_to :author, polymorphic: true
6
8
 
7
9
  unless Rails::VERSION::MAJOR > 3 && !defined? ProtectedAttributes
8
10
  attr_accessible :resource, :resource_id, :resource_type, :body, :namespace
@@ -10,9 +12,11 @@ module ActiveAdmin
10
12
 
11
13
  validates_presence_of :body, :namespace, :resource
12
14
 
13
- # @returns [String] The name of the record to use for the polymorphic relationship
14
- def self.resource_type(record)
15
- record.class.base_class.name.to_s
15
+ before_create :set_resource_type
16
+
17
+ # @return [String] The name of the record to use for the polymorphic relationship
18
+ def self.resource_type(resource)
19
+ ResourceController::Decorators.undecorate(resource).class.base_class.name.to_s
16
20
  end
17
21
 
18
22
  # Postgres adapters won't compare strings to numbers (issue 34)
@@ -21,17 +25,19 @@ module ActiveAdmin
21
25
  end
22
26
 
23
27
  def self.find_for_resource_in_namespace(resource, namespace)
24
- where :resource_type => resource_type(resource),
25
- :resource_id => resource_id_cast(resource),
26
- :namespace => namespace.to_s
28
+ where(
29
+ resource_type: resource_type(resource),
30
+ resource_id: resource_id_cast(resource),
31
+ namespace: namespace.to_s
32
+ ).order('created_at ASC')
27
33
  end
28
34
 
29
35
  def self.resource_id_type
30
36
  columns.detect{ |i| i.name == "resource_id" }.type
31
37
  end
32
38
 
33
- def self.table_name
34
- @table_name ||= ActiveRecord::Migrator.proper_table_name("active_admin_comments")
39
+ def set_resource_type
40
+ self.resource_type = self.class.resource_type(resource)
35
41
  end
36
42
 
37
43
  end
@@ -5,7 +5,7 @@ module ActiveAdmin
5
5
 
6
6
  # Returns true if the namespace allows comments
7
7
  def comments?
8
- allow_comments == true
8
+ comments == true
9
9
  end
10
10
 
11
11
  end
@@ -9,7 +9,7 @@ module ActiveAdmin
9
9
  end
10
10
 
11
11
  def comments?
12
- namespace.comments? && comments != false
12
+ (namespace.comments? && comments != false) || comments == true
13
13
  end
14
14
  end
15
15
 
@@ -8,17 +8,19 @@ module ActiveAdmin
8
8
  class Comments < ActiveAdmin::Views::Panel
9
9
  builder_method :active_admin_comments_for
10
10
 
11
+ attr_accessor :resource
12
+
11
13
  def build(resource)
12
14
  @resource = resource
13
- @comments = ActiveAdmin::Comment.find_for_resource_in_namespace @resource, active_admin_namespace.name
14
- super(title, :for => resource)
15
+ @comments = ActiveAdmin::Comment.find_for_resource_in_namespace resource, active_admin_namespace.name
16
+ super(title, for: resource)
15
17
  build_comments
16
18
  end
17
19
 
18
20
  protected
19
21
 
20
22
  def title
21
- I18n.t 'active_admin.comments.title_content', :count => @comments.count
23
+ I18n.t 'active_admin.comments.title_content', count: @comments.count
22
24
  end
23
25
 
24
26
  def build_comments
@@ -27,21 +29,21 @@ module ActiveAdmin
27
29
  end
28
30
 
29
31
  def build_comment(comment)
30
- div :for => comment do
31
- div :class => 'active_admin_comment_meta' do
32
- h4 :class => 'active_admin_comment_author' do
32
+ div for: comment do
33
+ div class: 'active_admin_comment_meta' do
34
+ h4 class: 'active_admin_comment_author' do
33
35
  comment.author ? auto_link(comment.author) : I18n.t('active_admin.comments.author_missing')
34
36
  end
35
37
  span pretty_format comment.created_at
36
38
  end
37
- div :class => 'active_admin_comment_body' do
39
+ div class: 'active_admin_comment_body' do
38
40
  simple_format comment.body
39
41
  end
40
42
  end
41
43
  end
42
44
 
43
45
  def build_empty_message
44
- span I18n.t('active_admin.comments.no_comments_yet'), :class => 'empty'
46
+ span I18n.t('active_admin.comments.no_comments_yet'), class: 'empty'
45
47
  end
46
48
 
47
49
  def comment_form_url
@@ -53,14 +55,14 @@ module ActiveAdmin
53
55
  end
54
56
 
55
57
  def build_comment_form
56
- self << active_admin_form_for(ActiveAdmin::Comment.new, :url => comment_form_url) do |f|
58
+ active_admin_form_for(ActiveAdmin::Comment.new, url: comment_form_url) do |f|
57
59
  f.inputs do
58
- f.input :resource_type, :as => :hidden, :input_html => { :value => ActiveAdmin::Comment.resource_type(@resource) }
59
- f.input :resource_id, :as => :hidden, :input_html => { :value => @resource.id }
60
- f.input :body, :label => false, :input_html => { :size => '80x8' }
60
+ f.input :resource_type, as: :hidden, input_html: { value: ActiveAdmin::Comment.resource_type(parent.resource) }
61
+ f.input :resource_id, as: :hidden, input_html: { value: parent.resource.id }
62
+ f.input :body, label: false, input_html: { size: '80x8' }
61
63
  end
62
64
  f.actions do
63
- f.action :submit, :label => I18n.t('active_admin.comments.add')
65
+ f.action :submit, label: I18n.t('active_admin.comments.add')
64
66
  end
65
67
  end
66
68
  end
@@ -56,8 +56,12 @@ module ActiveAdmin
56
56
  underscored_resource_name.camelize
57
57
  end
58
58
 
59
+ def namespace_name
60
+ namespace.name.to_s
61
+ end
62
+
59
63
  def default_menu_options
60
- super.merge(:id => resource_name)
64
+ super.merge(id: resource_name)
61
65
  end
62
66
 
63
67
  def controller_name
@@ -1,5 +1,5 @@
1
1
  module ActiveAdmin
2
- # This is the class where all the register_page blocks are instance eval'd
2
+ # This is the class where all the register_page blocks are evaluated.
3
3
  class PageDSL < DSL
4
4
 
5
5
  # Page content.
@@ -7,7 +7,7 @@ module ActiveAdmin
7
7
  #
8
8
  # Usage:
9
9
  #
10
- # presenter = PagePresenter.new :as => :table do
10
+ # presenter = PagePresenter.new as: :table do
11
11
  # # some awesome stuff
12
12
  # end
13
13
  #
@@ -18,7 +18,7 @@ module ActiveAdmin
18
18
 
19
19
  attr_reader :block, :options
20
20
 
21
- delegate :has_key?, :to => :options
21
+ delegate :has_key?, :fetch, to: :options
22
22
 
23
23
  def initialize(options = {}, &block)
24
24
  @options, @block = options, block
@@ -0,0 +1,68 @@
1
+ ActiveAdmin::Dependency.pundit!
2
+
3
+ require 'pundit'
4
+
5
+ # Add a setting to the application to configure the pundit default policy
6
+ ActiveAdmin::Application.inheritable_setting :pundit_default_policy, nil
7
+
8
+ module ActiveAdmin
9
+
10
+ class PunditAdapter < AuthorizationAdapter
11
+
12
+ def authorized?(action, subject = nil)
13
+ policy = retrieve_policy(subject)
14
+ action = format_action(action, subject)
15
+
16
+ policy.respond_to?(action) && policy.public_send(action)
17
+ end
18
+
19
+ def scope_collection(collection, action = Auth::READ)
20
+ # scoping is appliable only to read/index action
21
+ # which means there is no way how to scope other actions
22
+ Pundit.policy_scope!(user, collection)
23
+ rescue Pundit::NotDefinedError => e
24
+ if default_policy_class && default_policy_class.const_defined?(:Scope)
25
+ default_policy_class::Scope.new(user, collection).resolve
26
+ else
27
+ raise e
28
+ end
29
+ end
30
+
31
+ def retrieve_policy(subject)
32
+ case subject
33
+ when nil then Pundit.policy!(user, resource)
34
+ when Class then Pundit.policy!(user, subject.new)
35
+ else Pundit.policy!(user, subject)
36
+ end
37
+ rescue Pundit::NotDefinedError => e
38
+ if default_policy_class
39
+ default_policy(user, subject)
40
+ else
41
+ raise e
42
+ end
43
+ end
44
+
45
+ def format_action(action, subject)
46
+ # https://github.com/elabs/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
47
+ case action
48
+ when Auth::CREATE then :create?
49
+ when Auth::UPDATE then :update?
50
+ when Auth::READ then subject.is_a?(Class) ? :index? : :show?
51
+ when Auth::DESTROY then subject.is_a?(Class) ? :destroy_all? : :destroy?
52
+ else "#{action}?"
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ def default_policy_class
59
+ ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
60
+ end
61
+
62
+ def default_policy(user, subject)
63
+ default_policy_class.new(user, subject)
64
+ end
65
+
66
+ end
67
+
68
+ end
@@ -6,6 +6,7 @@ require 'active_admin/resource/pagination'
6
6
  require 'active_admin/resource/routes'
7
7
  require 'active_admin/resource/naming'
8
8
  require 'active_admin/resource/scopes'
9
+ require 'active_admin/resource/includes'
9
10
  require 'active_admin/resource/scope_to'
10
11
  require 'active_admin/resource/sidebars'
11
12
  require 'active_admin/resource/belongs_to'
@@ -47,7 +48,7 @@ module ActiveAdmin
47
48
  attr_writer :csv_builder
48
49
 
49
50
  # Set breadcrumb builder
50
- attr_accessor :breadcrumb
51
+ attr_writer :breadcrumb
51
52
 
52
53
  # Store a reference to the DSL so that we can dereference it during garbage collection.
53
54
  attr_accessor :dsl
@@ -77,9 +78,9 @@ module ActiveAdmin
77
78
  include PagePresenters
78
79
  include Pagination
79
80
  include Scopes
81
+ include Includes
80
82
  include ScopeTo
81
83
  include Sidebars
82
- include Menu
83
84
  include Routes
84
85
 
85
86
  # The class this resource wraps. If you register the Post model, Resource#resource_class
@@ -138,13 +139,21 @@ module ActiveAdmin
138
139
  @csv_builder || default_csv_builder
139
140
  end
140
141
 
142
+ def breadcrumb
143
+ instance_variable_defined?(:@breadcrumb) ? @breadcrumb : namespace.breadcrumb
144
+ end
145
+
141
146
  def find_resource(id)
142
- resource = resource_class.where(resource_class.primary_key => id).first
147
+ resource = resource_class.public_send(method_for_find, id)
143
148
  decorator_class ? decorator_class.new(resource) : resource
144
149
  end
145
150
 
146
151
  private
147
152
 
153
+ def method_for_find
154
+ resources_configuration[:self][:finder] || :"find_by_#{resource_class.primary_key}"
155
+ end
156
+
148
157
  def default_csv_builder
149
158
  @default_csv_builder ||= CSVBuilder.default_for_resource(resource_class)
150
159
  end
@@ -18,13 +18,18 @@ module ActiveAdmin
18
18
 
19
19
  # Add a new action item to a resource
20
20
  #
21
+ # @param [Symbol] name
21
22
  # @param [Hash] options valid keys include:
22
23
  # :only: A single or array of controller actions to display
23
24
  # this action item on.
24
25
  # :except: A single or array of controller actions not to
25
26
  # display this action item on.
26
- def add_action_item(options = {}, &block)
27
- self.action_items << ActiveAdmin::ActionItem.new(options, &block)
27
+ def add_action_item(name, options = {}, &block)
28
+ self.action_items << ActiveAdmin::ActionItem.new(name, options, &block)
29
+ end
30
+
31
+ def remove_action_item(name)
32
+ self.action_items.delete_if { |item| item.name == name }
28
33
  end
29
34
 
30
35
  # Returns a set of action items to display for a specific controller action
@@ -51,21 +56,21 @@ module ActiveAdmin
51
56
  # Adds the default action items to each resource
52
57
  def add_default_action_items
53
58
  # New link on index
54
- add_action_item only: :index do
59
+ add_action_item :new, only: :index do
55
60
  if controller.action_methods.include?('new') && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
56
61
  link_to I18n.t('active_admin.new_model', model: active_admin_config.resource_label), new_resource_path
57
62
  end
58
63
  end
59
64
 
60
65
  # Edit link on show
61
- add_action_item only: :show do
66
+ add_action_item :show, only: :show do
62
67
  if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
63
68
  link_to I18n.t('active_admin.edit_model', model: active_admin_config.resource_label), edit_resource_path(resource)
64
69
  end
65
70
  end
66
71
 
67
72
  # Destroy link on show
68
- add_action_item only: :show do
73
+ add_action_item :destroy, only: :show do
69
74
  if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
70
75
  link_to I18n.t('active_admin.delete_model', model: active_admin_config.resource_label), resource_path(resource),
71
76
  method: :delete, data: {confirm: I18n.t('active_admin.delete_confirmation')}
@@ -80,10 +85,12 @@ module ActiveAdmin
80
85
  class ActionItem
81
86
  include ActiveAdmin::OptionalDisplay
82
87
 
83
- attr_accessor :block
88
+ attr_accessor :block, :name
84
89
 
85
- def initialize(options = {}, &block)
86
- @options, @block = options, block
90
+ def initialize(name, options = {}, &block)
91
+ @name = name
92
+ @options = options
93
+ @block = block
87
94
  normalize_display_options!
88
95
  end
89
96
  end
@@ -4,7 +4,12 @@ module ActiveAdmin
4
4
  class Resource
5
5
  class BelongsTo
6
6
 
7
- class TargetNotFound < StandardError; end
7
+ class TargetNotFound < StandardError
8
+ def initialize(key, namespace)
9
+ super "Could not find #{key} in #{namespace.name} " +
10
+ "with #{namespace.resources.map(&:resource_name)}"
11
+ end
12
+ end
8
13
 
9
14
  # The resource which initiated this relationship
10
15
  attr_reader :owner
@@ -16,8 +21,7 @@ module ActiveAdmin
16
21
  # Returns the target resource class or raises an exception if it doesn't exist
17
22
  def target
18
23
  key = @target_name.to_s.camelize
19
- namespace.resources[key] or raise TargetNotFound, "Could not find #{key} in" +
20
- " #{namespace.name} with #{namespace.resources.map(&:resource_name)}"
24
+ namespace.resources[key] or raise TargetNotFound.new key, namespace
21
25
  end
22
26
 
23
27
  def namespace
@@ -1,6 +1,7 @@
1
1
  module ActiveAdmin
2
2
  class Resource
3
3
  module Controllers
4
+ delegate :resources_configuration, to: :controller
4
5
 
5
6
  # Returns a properly formatted controller name for this
6
7
  # config within its namespace
@@ -0,0 +1,12 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Includes
4
+
5
+ # Return an array of includes for this resource
6
+ def includes
7
+ @includes ||= []
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -24,10 +24,10 @@ module ActiveAdmin
24
24
  menu_resource_class = respond_to?(:resource_class) ? resource_class : self
25
25
  resource = self
26
26
  {
27
- :id => resource_name.plural,
28
- :label => proc{ resource.plural_resource_label },
29
- :url => proc{ resource.route_collection_path(params) },
30
- :if => proc{ authorized?(:read, menu_resource_class) }
27
+ id: resource_name.plural,
28
+ label: proc{ resource.plural_resource_label },
29
+ url: proc{ resource.route_collection_path(params) },
30
+ if: proc{ authorized?(:read, menu_resource_class) }
31
31
  }
32
32
  end
33
33
 
@@ -36,7 +36,7 @@ module ActiveAdmin
36
36
  def navigation_menu_name
37
37
  case @navigation_menu_name ||= DEFAULT_MENU
38
38
  when Proc
39
- controller.instance_eval(&@navigation_menu_name).to_sym
39
+ controller.instance_exec(&@navigation_menu_name).to_sym
40
40
  else
41
41
  @navigation_menu_name
42
42
  end
@@ -2,53 +2,51 @@ module ActiveAdmin
2
2
  class Resource
3
3
 
4
4
  module Naming
5
-
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
5
  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)
6
+ @resource_name ||= begin
7
+ as = @options[:as].gsub /\s/, '' if @options[:as]
8
+
9
+ if as || !resource_class.respond_to?(:model_name)
10
+ Name.new resource_class, as
13
11
  else
14
- Resource::Name.new(resource_class)
12
+ Name.new resource_class
15
13
  end
14
+ end
16
15
  end
17
16
 
18
17
  # Returns the name to call this resource such as "Bank Account"
19
18
  def resource_label
20
- resource_name.translate :count => 1, :default => resource_name.to_s.gsub('::', ' ').titleize
19
+ resource_name.translate count: 1,
20
+ default: resource_name.to_s.gsub('::', ' ').titleize
21
21
  end
22
22
 
23
23
  # Returns the plural version of this resource such as "Bank Accounts"
24
24
  def plural_resource_label(options = {})
25
- resource_name.translate ({:count => 1.1, :default => resource_label.pluralize.titleize}).merge(options)
25
+ defaults = {count: Helpers::I18n::PLURAL_MANY_COUNT,
26
+ default: resource_label.pluralize.titleize}
27
+ resource_name.translate defaults.merge options
28
+ end
29
+
30
+ # Forms use the model's original `param_key`, so we can't use our
31
+ # custom `resource_name` when the model's been renamed in ActiveAdmin.
32
+ def param_key
33
+ if resource_class.respond_to? :model_name
34
+ resource_class.model_name.param_key
35
+ else
36
+ resource_name.param_key
37
+ end
26
38
  end
27
39
  end
28
40
 
29
- # A subclass of ActiveModel::Name which supports the different APIs presented
30
- # in Rails < 3.1 and > 3.1.
31
41
  class Name < ActiveModel::Name
32
-
33
- delegate :hash, :to => :to_str
42
+ delegate :hash, to: :to_str
34
43
 
35
44
  def initialize(klass, name = nil)
36
- if ActiveModel::Name.instance_method(:initialize).arity == 1
37
- super(proxy_for_initializer(klass, name))
38
- else
39
- super(klass, nil, name)
40
- end
45
+ super(klass, nil, name)
41
46
  end
42
47
 
43
48
  def translate(options = {})
44
- I18n.t i18n_key, {:scope => [:activerecord, :models]}.merge(options)
45
- end
46
-
47
- def proxy_for_initializer(klass, name)
48
- return klass unless name
49
- return StringClassProxy.new(klass, name) if klass
50
-
51
- StringProxy.new(name)
49
+ I18n.t i18n_key, {scope: [:activerecord, :models]}.merge(options)
52
50
  end
53
51
 
54
52
  def route_key
@@ -58,26 +56,6 @@ module ActiveAdmin
58
56
  def eql?(other)
59
57
  to_str.eql?(other.to_str)
60
58
  end
61
-
62
- class StringProxy
63
- def initialize(name)
64
- @name = name
65
- end
66
-
67
- def name
68
- @name
69
- end
70
- end
71
-
72
- class StringClassProxy < StringProxy
73
- delegate :lookup_ancestors, :i18n_scope, :to => :"@klass"
74
-
75
- def initialize(klass, name)
76
- @klass = klass || name
77
- super(name)
78
- end
79
- end
80
-
81
59
  end
82
60
 
83
61
  end