activeadmin 0.6.6 → 1.0.0.pre1

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 (512) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -8
  3. data/.hound.yml +11 -0
  4. data/.travis.yml +36 -10
  5. data/.yardopts +2 -1
  6. data/CHANGELOG.md +118 -67
  7. data/CONTRIBUTING.md +96 -73
  8. data/Gemfile +35 -35
  9. data/Guardfile +1 -0
  10. data/LICENSE +1 -1
  11. data/README.md +98 -0
  12. data/Rakefile +12 -4
  13. data/activeadmin.gemspec +21 -24
  14. data/app/assets/javascripts/active_admin/application.js.coffee +32 -0
  15. data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
  16. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  17. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  18. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  19. data/app/assets/javascripts/active_admin/{components/jquery.aa.checkbox-toggler.js.coffee → lib/checkbox-toggler.js.coffee} +3 -4
  20. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
  21. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  22. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  23. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  24. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  25. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
  26. data/app/assets/javascripts/active_admin/{components/jquery.aa.table-checkbox-toggler.js.coffee → lib/table-checkbox-toggler.js.coffee} +2 -3
  27. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  28. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +61 -17
  29. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  30. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  32. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  33. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -1
  34. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  35. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  36. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -14
  37. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +5 -4
  38. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  39. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  40. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  41. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +2 -3
  42. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  43. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  44. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +4 -2
  45. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  46. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -1
  49. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  51. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  52. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  53. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +8 -2
  54. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -7
  55. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -9
  56. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  57. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  58. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +5 -2
  59. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +11 -9
  60. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  61. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  62. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  63. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  64. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  65. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  66. data/app/views/active_admin/devise/sessions/new.html.erb +9 -7
  67. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  68. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  69. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  70. data/config/locales/ar.yml +120 -0
  71. data/config/locales/bg.yml +26 -6
  72. data/config/locales/bs.yml +122 -0
  73. data/config/locales/ca.yml +10 -1
  74. data/config/locales/cs.yml +7 -2
  75. data/config/locales/da.yml +7 -3
  76. data/config/locales/de-CH.yml +14 -31
  77. data/config/locales/de.yml +33 -33
  78. data/config/locales/el.yml +28 -2
  79. data/config/locales/en-GB.yml +12 -4
  80. data/config/locales/en.yml +29 -3
  81. data/config/locales/{es_MX.yml → es-MX.yml} +9 -24
  82. data/config/locales/es.yml +32 -25
  83. data/config/locales/fa.yml +120 -0
  84. data/config/locales/fi.yml +113 -0
  85. data/config/locales/fr.yml +21 -11
  86. data/config/locales/he.yml +7 -3
  87. data/config/locales/hr.yml +42 -11
  88. data/config/locales/hu.yml +10 -3
  89. data/config/locales/it.yml +31 -3
  90. data/config/locales/ja.yml +8 -3
  91. data/config/locales/ko.yml +7 -1
  92. data/config/locales/lt.yml +42 -11
  93. data/config/locales/lv.yml +7 -3
  94. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  95. data/config/locales/nl.yml +36 -5
  96. data/config/locales/pl.yml +13 -8
  97. data/config/locales/pt-BR.yml +37 -5
  98. data/config/locales/pt-PT.yml +8 -4
  99. data/config/locales/ro.yml +7 -3
  100. data/config/locales/ru.yml +26 -5
  101. data/config/locales/sv-SE.yml +9 -5
  102. data/config/locales/tr.yml +10 -3
  103. data/config/locales/uk.yml +36 -12
  104. data/config/locales/vi.yml +7 -3
  105. data/config/locales/zh-CN.yml +26 -10
  106. data/config/locales/zh-TW.yml +19 -13
  107. data/docs/0-installation.md +65 -29
  108. data/docs/1-general-configuration.md +92 -81
  109. data/docs/10-custom-pages.md +68 -68
  110. data/docs/11-decorators.md +48 -59
  111. data/docs/12-arbre-components.md +80 -74
  112. data/docs/13-authorization-adapter.md +128 -107
  113. data/docs/14-gotchas.md +92 -0
  114. data/docs/2-resource-customization.md +293 -178
  115. data/docs/3-index-pages.md +160 -86
  116. data/docs/3-index-pages/custom-index.md +31 -0
  117. data/docs/3-index-pages/index-as-block.md +14 -9
  118. data/docs/3-index-pages/index-as-blog.md +41 -31
  119. data/docs/3-index-pages/index-as-grid.md +16 -8
  120. data/docs/3-index-pages/index-as-table.md +129 -52
  121. data/docs/4-csv-format.md +31 -24
  122. data/docs/5-forms.md +133 -56
  123. data/docs/6-show-pages.md +89 -27
  124. data/docs/7-sidebars.md +48 -27
  125. data/docs/8-custom-actions.md +98 -77
  126. data/docs/9-batch-actions.md +210 -146
  127. data/docs/README.md +24 -0
  128. data/features/action_item.feature +3 -3
  129. data/features/authorization_pundit.feature +37 -0
  130. data/features/breadcrumb.feature +48 -0
  131. data/features/comments/commenting.feature +56 -13
  132. data/features/development_reloading.feature +17 -30
  133. data/features/edit_page.feature +12 -1
  134. data/features/favicon.feature +3 -3
  135. data/features/i18n.feature +5 -4
  136. data/features/index/batch_actions.feature +41 -0
  137. data/features/index/filters.feature +67 -0
  138. data/features/index/format_as_csv.feature +90 -4
  139. data/features/index/formats.feature +27 -0
  140. data/features/index/index_as_blog.feature +4 -4
  141. data/features/index/index_as_table.feature +102 -6
  142. data/features/index/index_blank_slate.feature +22 -0
  143. data/features/index/index_scope_to.feature +16 -16
  144. data/features/index/page_title.feature +11 -0
  145. data/features/index/pagination.feature +1 -1
  146. data/features/index/switch_index_view.feature +14 -14
  147. data/features/new_page.feature +13 -2
  148. data/features/registering_pages.feature +1 -1
  149. data/features/renamed_resource.feature +32 -0
  150. data/features/show/page_title.feature +11 -0
  151. data/features/show/tabs.feature +27 -0
  152. data/features/sidebar_sections.feature +12 -0
  153. data/features/site_title.feature +2 -2
  154. data/features/specifying_actions.feature +3 -3
  155. data/features/step_definitions/action_item_steps.rb +2 -2
  156. data/features/step_definitions/action_link_steps.rb +14 -1
  157. data/features/step_definitions/additional_web_steps.rb +19 -20
  158. data/features/step_definitions/asset_steps.rb +3 -3
  159. data/features/step_definitions/attribute_steps.rb +8 -3
  160. data/features/step_definitions/batch_action_steps.rb +26 -9
  161. data/features/step_definitions/blog_steps.rb +3 -0
  162. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  163. data/features/step_definitions/comment_steps.rb +1 -1
  164. data/features/step_definitions/configuration_steps.rb +9 -2
  165. data/features/step_definitions/dashboard_steps.rb +2 -2
  166. data/features/step_definitions/factory_steps.rb +9 -8
  167. data/features/step_definitions/filter_steps.rb +25 -3
  168. data/features/step_definitions/flash_steps.rb +3 -3
  169. data/features/step_definitions/format_steps.rb +18 -18
  170. data/features/step_definitions/index_scope_steps.rb +5 -5
  171. data/features/step_definitions/layout_steps.rb +1 -1
  172. data/features/step_definitions/member_link_steps.rb +2 -2
  173. data/features/step_definitions/menu_steps.rb +3 -3
  174. data/features/step_definitions/pagination_steps.rb +2 -3
  175. data/features/step_definitions/sidebar_steps.rb +8 -3
  176. data/features/step_definitions/site_title_steps.rb +6 -4
  177. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  178. data/features/step_definitions/tab_steps.rb +5 -0
  179. data/features/step_definitions/table_steps.rb +4 -4
  180. data/features/step_definitions/user_steps.rb +10 -7
  181. data/features/step_definitions/web_steps.rb +14 -11
  182. data/features/sti_resource.feature +6 -2
  183. data/features/strong_parameters.feature +73 -0
  184. data/features/support/env.rb +34 -9
  185. data/features/support/paths.rb +14 -6
  186. data/features/support/selectors.rb +1 -1
  187. data/features/symbol_leak.feature +35 -0
  188. data/features/users/resetting_password.feature +5 -6
  189. data/lib/active_admin.rb +26 -25
  190. data/lib/active_admin/abstract_view_factory.rb +7 -17
  191. data/lib/active_admin/application.rb +72 -59
  192. data/lib/active_admin/asset_registration.rb +2 -2
  193. data/lib/active_admin/authorization_adapter.rb +2 -2
  194. data/lib/active_admin/base_controller.rb +2 -3
  195. data/lib/active_admin/base_controller/authorization.rb +13 -31
  196. data/lib/active_admin/batch_actions.rb +1 -1
  197. data/lib/active_admin/batch_actions/controller.rb +24 -8
  198. data/lib/active_admin/batch_actions/resource_extension.rb +47 -18
  199. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  200. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  201. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  202. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  203. data/lib/active_admin/callbacks.rb +25 -24
  204. data/lib/active_admin/cancan_adapter.rb +7 -11
  205. data/lib/active_admin/csv_builder.rb +92 -15
  206. data/lib/active_admin/dependency.rb +93 -0
  207. data/lib/active_admin/deprecation.rb +6 -7
  208. data/lib/active_admin/devise.rb +28 -18
  209. data/lib/active_admin/dsl.rb +18 -11
  210. data/lib/active_admin/engine.rb +10 -8
  211. data/lib/active_admin/error.rb +62 -0
  212. data/lib/active_admin/filters/dsl.rb +2 -2
  213. data/lib/active_admin/filters/forms.rb +17 -27
  214. data/lib/active_admin/filters/formtastic_addons.rb +49 -15
  215. data/lib/active_admin/filters/resource_extension.rb +43 -34
  216. data/lib/active_admin/form_builder.rb +93 -154
  217. data/lib/active_admin/helpers/collection.rb +7 -13
  218. data/lib/active_admin/helpers/i18n.rb +7 -0
  219. data/lib/active_admin/helpers/optional_display.rb +5 -5
  220. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  221. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  222. data/lib/active_admin/helpers/settings.rb +16 -9
  223. data/lib/active_admin/iconic.rb +17 -15
  224. data/lib/active_admin/iconic/icons.rb +136 -136
  225. data/lib/active_admin/inputs.rb +11 -7
  226. data/lib/active_admin/inputs/datepicker_input.rb +12 -3
  227. data/lib/active_admin/inputs/filters/base.rb +42 -0
  228. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  229. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  230. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  231. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  232. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  233. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  234. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  235. data/lib/active_admin/menu.rb +6 -4
  236. data/lib/active_admin/menu_collection.rb +1 -4
  237. data/lib/active_admin/namespace.rb +55 -29
  238. data/lib/active_admin/order_clause.rb +26 -0
  239. data/lib/active_admin/orm/active_record.rb +5 -0
  240. data/lib/active_admin/orm/active_record/comments.rb +81 -0
  241. data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
  242. data/lib/active_admin/{comments → orm/active_record/comments}/namespace_helper.rb +2 -2
  243. data/lib/active_admin/{comments → orm/active_record/comments}/resource_helper.rb +1 -1
  244. data/lib/active_admin/{comments → orm/active_record/comments}/show_page_helper.rb +0 -0
  245. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  246. data/lib/active_admin/{comments → orm/active_record/comments}/views/active_admin_comments.rb +16 -14
  247. data/lib/active_admin/orm/mongoid.rb +1 -0
  248. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  249. data/lib/active_admin/page.rb +7 -3
  250. data/lib/active_admin/page_dsl.rb +1 -1
  251. data/lib/active_admin/page_presenter.rb +2 -2
  252. data/lib/active_admin/pundit_adapter.rb +68 -0
  253. data/lib/active_admin/resource.rb +16 -17
  254. data/lib/active_admin/resource/action_items.rb +23 -18
  255. data/lib/active_admin/resource/belongs_to.rb +7 -3
  256. data/lib/active_admin/resource/controllers.rb +1 -0
  257. data/lib/active_admin/resource/includes.rb +12 -0
  258. data/lib/active_admin/resource/menu.rb +5 -5
  259. data/lib/active_admin/resource/naming.rb +27 -43
  260. data/lib/active_admin/resource/page_presenters.rb +1 -1
  261. data/lib/active_admin/resource/routes.rb +27 -11
  262. data/lib/active_admin/resource/scope_to.rb +7 -7
  263. data/lib/active_admin/resource/sidebars.rb +1 -0
  264. data/lib/active_admin/resource_controller.rb +6 -7
  265. data/lib/active_admin/resource_controller/data_access.rb +101 -93
  266. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  267. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  268. data/lib/active_admin/resource_dsl.rb +53 -10
  269. data/lib/active_admin/router.rb +7 -7
  270. data/lib/active_admin/scope.rb +6 -6
  271. data/lib/active_admin/sidebar_section.rb +10 -2
  272. data/lib/active_admin/version.rb +1 -1
  273. data/lib/active_admin/view_factory.rb +17 -17
  274. data/lib/active_admin/view_helpers.rb +0 -1
  275. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  276. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  277. data/lib/active_admin/view_helpers/display_helper.rb +30 -15
  278. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -25
  279. data/lib/active_admin/view_helpers/fields_for.rb +4 -4
  280. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  281. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  282. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  283. data/lib/active_admin/views/action_items.rb +2 -2
  284. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  285. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  286. data/lib/active_admin/views/components/attributes_table.rb +63 -21
  287. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  288. data/lib/active_admin/views/components/columns.rb +13 -7
  289. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  290. data/lib/active_admin/views/components/index_list.rb +7 -7
  291. data/lib/active_admin/views/components/paginated_collection.rb +38 -20
  292. data/lib/active_admin/views/components/panel.rb +8 -2
  293. data/lib/active_admin/views/components/popover.rb +1 -1
  294. data/lib/active_admin/views/components/scopes.rb +5 -4
  295. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  296. data/lib/active_admin/views/components/site_title.rb +2 -2
  297. data/lib/active_admin/views/components/status_tag.rb +34 -11
  298. data/lib/active_admin/views/components/table_for.rb +90 -45
  299. data/lib/active_admin/views/components/tabs.rb +28 -0
  300. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  301. data/lib/active_admin/views/footer.rb +3 -3
  302. data/lib/active_admin/views/header.rb +3 -3
  303. data/lib/active_admin/views/index_as_block.rb +10 -10
  304. data/lib/active_admin/views/index_as_blog.rb +45 -39
  305. data/lib/active_admin/views/index_as_grid.rb +14 -10
  306. data/lib/active_admin/views/index_as_table.rb +242 -129
  307. data/lib/active_admin/views/pages/base.rb +22 -18
  308. data/lib/active_admin/views/pages/form.rb +21 -11
  309. data/lib/active_admin/views/pages/index.rb +40 -35
  310. data/lib/active_admin/views/pages/layout.rb +1 -1
  311. data/lib/active_admin/views/pages/show.rb +4 -4
  312. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  313. data/lib/active_admin/views/title_bar.rb +10 -8
  314. data/lib/generators/active_admin/assets/assets_generator.rb +3 -28
  315. data/lib/generators/active_admin/assets/templates/{3.1/active_admin.css.scss → active_admin.css.scss} +0 -0
  316. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  317. data/lib/generators/active_admin/devise/devise_generator.rb +24 -26
  318. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  319. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +28 -26
  320. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -2
  321. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  322. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  323. data/lib/generators/active_admin/page/USAGE +8 -0
  324. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  325. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  326. data/lib/generators/active_admin/resource/resource_generator.rb +3 -5
  327. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  328. data/lib/ransack_ext.rb +12 -0
  329. data/script/local +2 -2
  330. data/script/travis_cache +107 -0
  331. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  332. data/spec/javascripts/fixtures/flashes.html +2 -0
  333. data/spec/rails_helper.rb +154 -0
  334. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  335. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  336. data/spec/requests/memory_spec.rb +23 -0
  337. data/spec/requests/stylesheets_spec.rb +18 -0
  338. data/spec/spec_helper.rb +12 -173
  339. data/spec/support/detect_rails_version.rb +9 -17
  340. data/spec/support/rails_template.rb +64 -35
  341. data/spec/support/rails_template_with_data.rb +14 -14
  342. data/spec/support/templates/admin/stores.rb +5 -1
  343. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  344. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  345. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  346. data/spec/support/templates/policies/application_policy.rb +45 -0
  347. data/spec/support/templates/policies/category_policy.rb +7 -0
  348. data/spec/support/templates/policies/post_policy.rb +15 -0
  349. data/spec/support/templates/policies/store_policy.rb +11 -0
  350. data/spec/support/templates/policies/user_policy.rb +11 -0
  351. data/spec/support/templates/post_decorator.rb +4 -46
  352. data/spec/unit/abstract_view_factory_spec.rb +16 -16
  353. data/spec/unit/action_builder_spec.rb +24 -18
  354. data/spec/unit/active_admin_spec.rb +2 -2
  355. data/spec/unit/application_spec.rb +33 -34
  356. data/spec/unit/asset_registration_spec.rb +25 -29
  357. data/spec/unit/authorization/authorization_adapter_spec.rb +10 -10
  358. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  359. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  360. data/spec/unit/auto_link_spec.rb +43 -13
  361. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  362. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  363. data/spec/unit/belongs_to_spec.rb +28 -19
  364. data/spec/unit/cancan_adapter_spec.rb +8 -8
  365. data/spec/unit/comments_spec.rb +99 -39
  366. data/spec/unit/component_spec.rb +3 -3
  367. data/spec/unit/config_shared_examples.rb +10 -10
  368. data/spec/unit/controller_filters_spec.rb +23 -16
  369. data/spec/unit/csv_builder_spec.rb +165 -24
  370. data/spec/unit/dependency_spec.rb +135 -0
  371. data/spec/unit/devise_spec.rb +17 -37
  372. data/spec/unit/dsl_spec.rb +70 -9
  373. data/spec/unit/event_spec.rb +11 -11
  374. data/spec/unit/filters/filter_form_builder_spec.rb +207 -148
  375. data/spec/unit/filters/resource_spec.rb +60 -26
  376. data/spec/unit/form_builder_spec.rb +419 -145
  377. data/spec/unit/generators/install_spec.rb +23 -0
  378. data/spec/unit/helpers/collection_spec.rb +18 -18
  379. data/spec/unit/helpers/scope_chain_spec.rb +6 -6
  380. data/spec/unit/helpers/settings_spec.rb +4 -4
  381. data/spec/unit/i18n_spec.rb +12 -0
  382. data/spec/unit/menu_collection_spec.rb +14 -14
  383. data/spec/unit/menu_item_spec.rb +42 -42
  384. data/spec/unit/menu_spec.rb +20 -20
  385. data/spec/unit/namespace/authorization_spec.rb +8 -8
  386. data/spec/unit/namespace/register_page_spec.rb +11 -11
  387. data/spec/unit/namespace/register_resource_spec.rb +28 -30
  388. data/spec/unit/namespace_spec.rb +20 -20
  389. data/spec/unit/order_clause_spec.rb +81 -0
  390. data/spec/unit/page_controller_spec.rb +1 -1
  391. data/spec/unit/page_spec.rb +18 -12
  392. data/spec/unit/pretty_format_spec.rb +42 -14
  393. data/spec/unit/pundit_adapter_spec.rb +98 -0
  394. data/spec/unit/resource/action_items_spec.rb +15 -12
  395. data/spec/unit/resource/includes_spec.rb +21 -0
  396. data/spec/unit/resource/menu_spec.rb +1 -1
  397. data/spec/unit/resource/naming_spec.rb +35 -21
  398. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  399. data/spec/unit/resource/pagination_spec.rb +6 -6
  400. data/spec/unit/resource/routes_spec.rb +10 -10
  401. data/spec/unit/resource/scopes_spec.rb +14 -7
  402. data/spec/unit/resource/sidebars_spec.rb +6 -6
  403. data/spec/unit/resource_collection_spec.rb +31 -38
  404. data/spec/unit/resource_controller/data_access_spec.rb +96 -30
  405. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  406. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  407. data/spec/unit/resource_controller_spec.rb +73 -70
  408. data/spec/unit/resource_registration_spec.rb +12 -12
  409. data/spec/unit/resource_spec.rb +77 -42
  410. data/spec/unit/routing_spec.rb +39 -31
  411. data/spec/unit/scope_spec.rb +112 -30
  412. data/spec/unit/settings_spec.rb +51 -21
  413. data/spec/unit/view_factory_spec.rb +2 -3
  414. data/spec/unit/view_helpers/breadcrumbs_spec.rb +71 -60
  415. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  416. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  417. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  418. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  419. data/spec/unit/view_helpers/form_helper_spec.rb +10 -23
  420. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +64 -22
  421. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  422. data/spec/unit/views/components/attributes_table_spec.rb +171 -30
  423. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  424. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  425. data/spec/unit/views/components/columns_spec.rb +52 -22
  426. data/spec/unit/views/components/index_list_spec.rb +11 -8
  427. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  428. data/spec/unit/views/components/paginated_collection_spec.rb +79 -90
  429. data/spec/unit/views/components/panel_spec.rb +32 -21
  430. data/spec/unit/views/components/popover_spec.rb +7 -7
  431. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  432. data/spec/unit/views/components/site_title_spec.rb +26 -26
  433. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  434. data/spec/unit/views/components/table_for_spec.rb +237 -35
  435. data/spec/unit/views/components/tabs_spec.rb +39 -0
  436. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  437. data/spec/unit/views/pages/form_spec.rb +17 -10
  438. data/spec/unit/views/pages/index_spec.rb +60 -0
  439. data/spec/unit/views/pages/layout_spec.rb +17 -21
  440. data/spec/unit/views/pages/show_spec.rb +18 -6
  441. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  442. data/tasks/docs.rake +9 -11
  443. data/tasks/parallel_tests.rake +8 -2
  444. data/tasks/test.rake +13 -9
  445. data/tasks/yard.rake +7 -4
  446. metadata +219 -163
  447. data/.document +0 -5
  448. data/README.rdoc +0 -88
  449. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  450. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  451. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  452. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  453. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  454. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  455. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  456. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  457. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  458. data/app/assets/images/active_admin/loading.gif +0 -0
  459. data/app/assets/javascripts/active_admin/application.js +0 -3
  460. data/app/assets/javascripts/active_admin/base.js +0 -5
  461. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +0 -105
  462. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -97
  463. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +0 -4
  464. data/app/assets/javascripts/active_admin/pages/application.js.coffee +0 -21
  465. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +0 -26
  466. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  467. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -41
  468. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  469. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +0 -38
  470. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +0 -43
  471. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  472. data/app/views/active_admin/resource/index.csv.erb +0 -23
  473. data/docs/3-index-pages/create-an-index.md +0 -29
  474. data/lib/active_admin/comments.rb +0 -83
  475. data/lib/active_admin/comments/comment.rb +0 -42
  476. data/lib/active_admin/comments/views.rb +0 -2
  477. data/lib/active_admin/dependency_checker.rb +0 -46
  478. data/lib/active_admin/inputs/filter_base.rb +0 -33
  479. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  480. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -36
  481. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -40
  482. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  483. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  484. data/lib/active_admin/inputs/filter_select_input.rb +0 -49
  485. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  486. data/lib/active_admin/reloader.rb +0 -130
  487. data/lib/active_admin/resource_controller/actions.rb +0 -81
  488. data/lib/active_admin/sass/active_admin.scss +0 -3
  489. data/lib/active_admin/sass/css_loader.rb +0 -16
  490. data/lib/active_admin/sass/helpers.rb +0 -45
  491. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  492. data/lib/active_admin/views/dashboard_section_renderer.rb +0 -19
  493. data/lib/active_admin/views/pages/dashboard.rb +0 -62
  494. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -1
  495. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +0 -1
  496. data/lib/meta_search_ext.rb +0 -10
  497. data/spec/integration/memory_spec.rb +0 -29
  498. data/spec/integration/stylesheets_spec.rb +0 -41
  499. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  500. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  501. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  502. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  503. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  504. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  505. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  506. data/spec/javascripts/support/jquery.min.js +0 -4
  507. data/spec/spec_helper_without_rails.rb +0 -11
  508. data/spec/unit/generators/install_rails_3_1_spec.rb +0 -16
  509. data/spec/unit/rails_spec.rb +0 -43
  510. data/spec/unit/reloader_spec.rb +0 -124
  511. data/spec/unit/sass/helpers_spec.rb +0 -47
  512. data/tasks/js.rake +0 -32
@@ -1,6 +1,11 @@
1
1
  module ActiveAdmin
2
- # This is the class where all the register blocks are instance eval'd
2
+ # This is the class where all the register blocks are evaluated.
3
3
  class ResourceDSL < DSL
4
+ def initialize(config, resource_class)
5
+ @resource = resource_class
6
+ super(config)
7
+ end
8
+
4
9
  private
5
10
 
6
11
  def belongs_to(target, options = {})
@@ -17,6 +22,42 @@ module ActiveAdmin
17
22
  config.scope(*args, &block)
18
23
  end
19
24
 
25
+ # Store relations that should be included
26
+ def includes(*args)
27
+ config.includes.push *args
28
+ end
29
+
30
+ #
31
+ # Rails 4 Strong Parameters Support
32
+ #
33
+ # Either
34
+ #
35
+ # permit_params :title, :author, :body, tags: []
36
+ #
37
+ # Or
38
+ #
39
+ # permit_params do
40
+ # defaults = [:title, :body]
41
+ # if current_user.admin?
42
+ # defaults + [:author]
43
+ # else
44
+ # defaults
45
+ # end
46
+ # end
47
+ #
48
+ # Keys included in the `permitted_params` setting are automatically whitelisted.
49
+ #
50
+ def permit_params(*args, &block)
51
+ param_key = config.param_key.to_sym
52
+
53
+ controller do
54
+ define_method :permitted_params do
55
+ params.permit *active_admin_namespace.permitted_params,
56
+ param_key => block ? instance_exec(&block) : args
57
+ end
58
+ end
59
+ end
60
+
20
61
  # Configure the index page for the resource
21
62
  def index(options = {}, &block)
22
63
  options[:as] ||= :table
@@ -41,11 +82,13 @@ module ActiveAdmin
41
82
  # column("Author") { |post| post.author.full_name }
42
83
  # end
43
84
  #
44
- # csv :col_sep => ";", :force_quotes => true do
85
+ # csv col_sep: ";", force_quotes: true do
45
86
  # column :name
46
87
  # end
47
88
  #
48
89
  def csv(options={}, &block)
90
+ options[:resource] = @resource
91
+
49
92
  config.csv_builder = CSVBuilder.new(options, &block)
50
93
  end
51
94
 
@@ -73,7 +116,7 @@ module ActiveAdmin
73
116
  title = options.delete(:title)
74
117
 
75
118
  controller do
76
- before_filter(:only => [name]) { @page_title = title } if title
119
+ before_filter(only: [name]) { @page_title = title } if title
77
120
  define_method(name, &block || Proc.new{})
78
121
  end
79
122
  end
@@ -110,15 +153,15 @@ module ActiveAdmin
110
153
  # == Before / After Destroy
111
154
  # Called before and after the object is destroyed from the database.
112
155
  #
113
- delegate :before_build, :after_build, :to => :controller
114
- delegate :before_create, :after_create, :to => :controller
115
- delegate :before_update, :after_update, :to => :controller
116
- delegate :before_save, :after_save, :to => :controller
117
- delegate :before_destroy, :after_destroy, :to => :controller
156
+ delegate :before_build, :after_build, to: :controller
157
+ delegate :before_create, :after_create, to: :controller
158
+ delegate :before_update, :after_update, to: :controller
159
+ delegate :before_save, :after_save, to: :controller
160
+ delegate :before_destroy, :after_destroy, to: :controller
118
161
 
119
162
  # Standard rails filters
120
163
  delegate :before_filter, :skip_before_filter, :after_filter, :skip_after_filter, :around_filter, :skip_filter,
121
- :to => :controller
164
+ to: :controller
122
165
 
123
166
  # Specify which actions to create in the controller
124
167
  #
@@ -129,7 +172,7 @@ module ActiveAdmin
129
172
  # end
130
173
  #
131
174
  # Will only create the index and show actions (no create, update or delete)
132
- delegate :actions, :to => :controller
175
+ delegate :actions, to: :controller
133
176
 
134
177
  end
135
178
  end
@@ -18,13 +18,13 @@ module ActiveAdmin
18
18
  end
19
19
 
20
20
  def define_root_routes(router)
21
- router.instance_exec @application.namespaces.values do |namespaces|
21
+ router.instance_exec @application.namespaces do |namespaces|
22
22
  namespaces.each do |namespace|
23
23
  if namespace.root?
24
- root :to => namespace.root_to
24
+ root namespace.root_to_options.merge(to: namespace.root_to)
25
25
  else
26
26
  namespace namespace.name do
27
- root :to => namespace.root_to
27
+ root namespace.root_to_options.merge(to: namespace.root_to)
28
28
  end
29
29
  end
30
30
  end
@@ -34,7 +34,7 @@ module ActiveAdmin
34
34
  # Defines the routes for each resource
35
35
  def define_resource_routes(router)
36
36
  router.instance_exec @application.namespaces, self do |namespaces, aa_router|
37
- resources = namespaces.values.map{ |n| n.resources.values }.flatten
37
+ resources = namespaces.flat_map{ |n| n.resources.values }
38
38
  resources.each do |config|
39
39
  routes = aa_router.resource_routes(config)
40
40
 
@@ -47,7 +47,7 @@ module ActiveAdmin
47
47
 
48
48
  # Make the nested belongs_to routes
49
49
  # :only is set to nothing so that we don't clobber any existing routes on the resource
50
- resources config.belongs_to_config.target.resource_name.plural, :only => [] do
50
+ resources config.belongs_to_config.target.resource_name.plural, only: [] do
51
51
  instance_exec &belongs_to
52
52
  end
53
53
  end
@@ -80,14 +80,14 @@ module ActiveAdmin
80
80
  }
81
81
  case config
82
82
  when ::ActiveAdmin::Resource
83
- resources config.resource_name.route_key, :only => config.defined_actions do
83
+ resources config.resource_name.route_key, only: config.defined_actions do
84
84
  member do
85
85
  config.member_actions.each &build_action
86
86
  end
87
87
 
88
88
  collection do
89
89
  config.collection_actions.each &build_action
90
- post :batch_action
90
+ post :batch_action if config.batch_actions_enabled?
91
91
  end
92
92
  end
93
93
  when ::ActiveAdmin::Page
@@ -13,12 +13,12 @@ module ActiveAdmin
13
13
  # Scope.new('Published', :public)
14
14
  # # => Scope with name 'Published' and scope method :public
15
15
  #
16
- # Scope.new 'Published', :public, :if => proc { current_admin_user.can? :manage, resource_class } do |articles|
17
- # articles.where :published => true
16
+ # Scope.new 'Published', :public, if: proc { current_admin_user.can? :manage, resource_class } do |articles|
17
+ # articles.where published: true
18
18
  # end
19
19
  # # => Scope with name 'Published' and scope method :public, optionally displaying the scope per the :if block
20
20
  #
21
- # Scope.new('Published') { |articles| articles.where(:published => true) }
21
+ # Scope.new('Published') { |articles| articles.where(published: true) }
22
22
  # # => Scope with name 'Published' using a block to scope
23
23
  #
24
24
  # Scope.new ->{Date.today.strftime '%A'}, :published_today
@@ -29,16 +29,16 @@ module ActiveAdmin
29
29
 
30
30
  if name.is_a? Proc
31
31
  raise "A string/symbol is required as the second argument if your label is a proc." unless method
32
- @id = method.to_s.gsub(' ', '').underscore
32
+ @id = method.to_s.parameterize("_")
33
33
  else
34
34
  @scope_method ||= name.to_sym
35
- @id = name.to_s.gsub(' ', '').underscore
35
+ @id = name.to_s.parameterize("_")
36
36
  end
37
37
 
38
38
  @scope_method = nil if @scope_method == :all
39
39
  @scope_method, @scope_block = nil, block if block_given?
40
40
 
41
- @show_count = options[:show_count].nil? ? true : options[:show_count]
41
+ @show_count = options.fetch(:show_count, true)
42
42
  @display_if_block = options[:if] || proc{ true }
43
43
  @default_block = options[:default] || proc{ false }
44
44
 
@@ -25,12 +25,20 @@ module ActiveAdmin
25
25
 
26
26
  # The title gets displayed within the section in the view
27
27
  def title
28
- I18n.t("active_admin.sidebars.#{name.to_s}", :default => name.to_s.titlecase)
28
+ I18n.t("active_admin.sidebars.#{name.to_s}", default: name.to_s.titlecase)
29
29
  end
30
30
 
31
31
  # If a block is not passed in, the name of the partial to render
32
32
  def partial_name
33
- options[:partial] || "#{name.to_s.downcase.gsub(' ', '_')}_sidebar"
33
+ options[:partial] || "#{name.to_s.downcase.tr(' ', '_')}_sidebar"
34
+ end
35
+
36
+ def custom_class
37
+ options[:class]
38
+ end
39
+
40
+ def priority
41
+ options[:priority] || 10
34
42
  end
35
43
  end
36
44
 
@@ -1,3 +1,3 @@
1
1
  module ActiveAdmin
2
- VERSION = '0.6.6'
2
+ VERSION = '1.0.0.pre1'
3
3
  end
@@ -4,25 +4,25 @@ module ActiveAdmin
4
4
  class ViewFactory < AbstractViewFactory
5
5
 
6
6
  # Register Helper Renderers
7
- register :global_navigation => ActiveAdmin::Views::TabbedNavigation,
8
- :utility_navigation => ActiveAdmin::Views::TabbedNavigation,
9
- :site_title => ActiveAdmin::Views::SiteTitle,
10
- :action_items => ActiveAdmin::Views::ActionItems,
11
- :title_bar => ActiveAdmin::Views::TitleBar,
12
- :header => ActiveAdmin::Views::Header,
13
- :footer => ActiveAdmin::Views::Footer,
14
- :index_scopes => ActiveAdmin::Views::Scopes,
15
- :blank_slate => ActiveAdmin::Views::BlankSlate,
16
- :action_list_popover => ActiveAdmin::Views::ActionListPopover
7
+ register global_navigation: ActiveAdmin::Views::TabbedNavigation,
8
+ utility_navigation: ActiveAdmin::Views::TabbedNavigation,
9
+ site_title: ActiveAdmin::Views::SiteTitle,
10
+ unsupported_browser: ActiveAdmin::Views::UnsupportedBrowser,
11
+ action_items: ActiveAdmin::Views::ActionItems,
12
+ title_bar: ActiveAdmin::Views::TitleBar,
13
+ header: ActiveAdmin::Views::Header,
14
+ footer: ActiveAdmin::Views::Footer,
15
+ index_scopes: ActiveAdmin::Views::Scopes,
16
+ blank_slate: ActiveAdmin::Views::BlankSlate,
17
+ action_list_popover: ActiveAdmin::Views::ActionListPopover
17
18
 
18
19
  # Register All The Pages
19
- register :dashboard_page => ActiveAdmin::Views::Pages::Dashboard,
20
- :index_page => ActiveAdmin::Views::Pages::Index,
21
- :show_page => ActiveAdmin::Views::Pages::Show,
22
- :new_page => ActiveAdmin::Views::Pages::Form,
23
- :edit_page => ActiveAdmin::Views::Pages::Form,
24
- :layout => ActiveAdmin::Views::Pages::Layout,
25
- :page => ActiveAdmin::Views::Pages::Page
20
+ register index_page: ActiveAdmin::Views::Pages::Index,
21
+ show_page: ActiveAdmin::Views::Pages::Show,
22
+ new_page: ActiveAdmin::Views::Pages::Form,
23
+ edit_page: ActiveAdmin::Views::Pages::Form,
24
+ layout: ActiveAdmin::Views::Pages::Layout,
25
+ page: ActiveAdmin::Views::Pages::Page
26
26
 
27
27
  end
28
28
  end
@@ -4,7 +4,6 @@ module ActiveAdmin
4
4
  # Require all ruby files in the view helpers dir
5
5
  Dir[File.expand_path('../view_helpers', __FILE__) + "/*.rb"].each{|f| require f }
6
6
 
7
- include AssignsWithIndifferentAccessHelper
8
7
  include ActiveAdminApplicationHelper
9
8
  include AutoLinkHelper
10
9
  include BreadcrumbHelper
@@ -9,24 +9,35 @@ module ActiveAdmin
9
9
  # The default content in the link is returned from ActiveAdmin::ViewHelpers::DisplayHelper#display_name
10
10
  #
11
11
  # You can pass in the content to display
12
- # eg: auto_link(@post, "My Link Content")
12
+ # eg: auto_link(@post, "My Link")
13
13
  #
14
- def auto_link(resource, link_content = nil)
15
- content = link_content || display_name(resource)
16
- if (registration = active_admin_resource_for(resource.class))
17
- begin
18
- content = link_to(content, registration.route_instance_path(resource))
19
- rescue
20
- # ignored
21
- end
14
+ def auto_link(resource, content = display_name(resource))
15
+ if url = auto_url_for(resource)
16
+ link_to content, url
17
+ else
18
+ content
19
+ end
20
+ end
21
+
22
+ # Like `auto_link`, except that it only returns a URL instead of a full <a> tag
23
+ def auto_url_for(resource)
24
+ config = active_admin_resource_for(resource.class)
25
+ return unless config
26
+
27
+ if config.controller.action_methods.include?("show") &&
28
+ authorized?(ActiveAdmin::Auth::READ, resource)
29
+ url_for config.route_instance_path resource
30
+ elsif config.controller.action_methods.include?("edit") &&
31
+ authorized?(ActiveAdmin::Auth::UPDATE, resource)
32
+ url_for config.route_edit_instance_path resource
22
33
  end
23
- content
24
34
  end
25
35
 
26
36
  # Returns the ActiveAdmin::Resource instance for a class
27
37
  def active_admin_resource_for(klass)
28
- return nil unless respond_to?(:active_admin_namespace)
29
- active_admin_namespace.resource_for(klass)
38
+ if respond_to? :active_admin_namespace
39
+ active_admin_namespace.resource_for klass
40
+ end
30
41
  end
31
42
 
32
43
  end
@@ -4,8 +4,9 @@ module ActiveAdmin
4
4
 
5
5
  # Returns an array of links to use in a breadcrumb
6
6
  def breadcrumb_links(path = request.path)
7
- parts = path[1..-1].split('/') # remove leading "/" and split up the URL
8
- parts.pop # remove last since it's used as the page title
7
+ # remove leading "/" and split up the URL
8
+ # and remove last since it's used as the page title
9
+ parts = path.split('/').select(&:present?)[0..-2]
9
10
 
10
11
  parts.each_with_index.map do |part, index|
11
12
  # 1. try using `display_name` if we can locate a DB object
@@ -16,7 +17,7 @@ module ActiveAdmin
16
17
  config = parent && parent.resource_name.route_key == parts[index-1] ? parent : active_admin_config
17
18
  name = display_name config.find_resource part
18
19
  end
19
- name ||= I18n.t "activerecord.models.#{part.singularize}", :count => 1.1, :default => part.titlecase
20
+ name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase
20
21
 
21
22
  # Don't create a link if the resource's show action is disabled
22
23
  if !config || config.defined_actions.include?(:show)
@@ -2,43 +2,58 @@ module ActiveAdmin
2
2
  module ViewHelpers
3
3
  module DisplayHelper
4
4
 
5
+ DISPLAY_NAME_FALLBACK = ->{
6
+ name, klass = "", self.class
7
+ name << klass.model_name.human if klass.respond_to? :model_name
8
+ name << " ##{send(klass.primary_key)}" if klass.respond_to? :primary_key
9
+ name.present? ? name : to_s
10
+ }
11
+ def DISPLAY_NAME_FALLBACK.inspect
12
+ 'DISPLAY_NAME_FALLBACK'
13
+ end
14
+
5
15
  # Attempts to call any known display name methods on the resource.
6
16
  # See the setting in `application.rb` for the list of methods and their priority.
7
17
  def display_name(resource)
8
- resource.send display_name_method_for resource if resource
18
+ render_in_context resource, display_name_method_for(resource) if resource
9
19
  end
10
20
 
11
21
  # Looks up and caches the first available display name method.
22
+ # To prevent conflicts, we exclude any methods that happen to be associations.
23
+ # If no methods are available and we're about to use the Kernel's `to_s`, provide our own.
12
24
  def display_name_method_for(resource)
13
25
  @@display_name_methods_cache ||= {}
14
26
  @@display_name_methods_cache[resource.class] ||= begin
15
27
  methods = active_admin_application.display_name_methods - association_methods_for(resource)
16
- methods.detect{ |method| resource.respond_to? method }
28
+ method = methods.detect{ |method| resource.respond_to? method }
29
+
30
+ if method != :to_s || resource.method(method).source_location
31
+ method
32
+ else
33
+ DISPLAY_NAME_FALLBACK
34
+ end
17
35
  end
18
36
  end
19
37
 
20
- # To prevent conflicts, we exclude any methods that happen to be associations.
21
38
  def association_methods_for(resource)
22
39
  return [] unless resource.class.respond_to? :reflect_on_all_associations
23
40
  resource.class.reflect_on_all_associations.map(&:name)
24
41
  end
25
42
 
26
- # Return a pretty string for any object
27
- # Date Time are formatted via #localize with :format => :long
28
- # ActiveRecord objects are formatted via #auto_link
29
- # We attempt to #display_name of any other objects
43
+ # Attempts to create a human-readable string for any object
30
44
  def pretty_format(object)
31
45
  case object
32
- when String
33
- object
34
- when Arbre::Element
35
- object
46
+ when String, Numeric, Arbre::Element
47
+ object.to_s
36
48
  when Date, Time
37
- localize(object, :format => :long)
38
- when ActiveRecord::Base
39
- auto_link(object)
49
+ localize object, format: :long
40
50
  else
41
- display_name(object)
51
+ if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
52
+ defined?(::Mongoid) && object.class.include?(Mongoid::Document)
53
+ auto_link object
54
+ else
55
+ display_name object
56
+ end
42
57
  end
43
58
  end
44
59
 
@@ -2,6 +2,20 @@ module ActiveAdmin
2
2
  module ViewHelpers
3
3
  module DownloadFormatLinksHelper
4
4
 
5
+ def build_download_format_links(formats = self.class.formats)
6
+ params = request.query_parameters.except :format, :commit
7
+ div class: "download_links" do
8
+ span I18n.t('active_admin.download')
9
+ formats.each do |format|
10
+ a format.upcase, href: url_for(params: params, format: format)
11
+ end
12
+ end
13
+ end
14
+
15
+ def self.included base
16
+ base.extend ClassMethods
17
+ end
18
+
5
19
  module ClassMethods
6
20
 
7
21
  # A ready only of formats to make available in index/paginated
@@ -14,37 +28,19 @@ module ActiveAdmin
14
28
  @formats.clone
15
29
  end
16
30
 
17
- # Adds a mime type extension to the list of available formats.
18
- # You must register the extension prior to adding it to the list
19
- # of avilable formats. This should be used by plugins that want
20
- # to add additional formats to the download format links.
21
- # @param [Symbol] extension the mime extension to add
31
+ # Adds a mime type to the list of available formats available for data
32
+ # export. You must register the extension prior to adding it here.
33
+ # @param [Symbol] format the mime type to add
22
34
  # @return [Array] A copy of the updated formats array.
23
- def add_format extension
24
- unless formats.include?(extension)
25
- if Mime::Type.lookup_by_extension(extension).nil?
26
- raise ArgumentError, "The mime extension you defined: #{extension} is not registered. Please register it via Mime::Type.register before adding it to the available formats."
27
- end
28
- @formats << extension
35
+ def add_format(format)
36
+ unless Mime::Type.lookup_by_extension format
37
+ raise ArgumentError, "Please register the #{format} mime type with `Mime::Type.register`"
29
38
  end
39
+ @formats << format unless formats.include? format
30
40
  formats
31
41
  end
32
42
  end
33
43
 
34
- # TODO: Refactor to new HTML DSL
35
- def build_download_format_links(formats = self.class.formats)
36
- links = formats.collect do |format|
37
- link_to format.to_s.upcase, { :format => format}.merge(request.query_parameters.except(:commit, :format))
38
- end
39
- div :class => "download_links" do
40
- text_node [I18n.t('active_admin.download'), links].flatten.join("&nbsp;").html_safe
41
- end
42
- end
43
-
44
- def self.included base
45
- base.extend ClassMethods
46
- end
47
44
  end
48
45
  end
49
46
  end
50
-