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
@@ -2,10 +2,19 @@ module ActiveAdmin
2
2
  module Inputs
3
3
  class DatepickerInput < ::Formtastic::Inputs::StringInput
4
4
  def input_html_options
5
- options = super
6
- options[:class] = [options[:class], "datepicker"].compact.join(' ')
7
- options
5
+ super.tap do |options|
6
+ options[:class] = [options[:class], "datepicker"].compact.join(' ')
7
+ options[:data] ||= {}
8
+ options[:data].merge! datepicker_options
9
+ end
8
10
  end
11
+
12
+ private
13
+ def datepicker_options
14
+ options = self.options.fetch(:datepicker_options, {})
15
+ options = Hash[options.map{ |k, v| [k.to_s.camelcase(:lower), v] }]
16
+ { datepicker_options: options }
17
+ end
9
18
  end
10
19
  end
11
20
  end
@@ -0,0 +1,42 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ module Filters
4
+ module Base
5
+ include ::Formtastic::Inputs::Base
6
+ include ::ActiveAdmin::Filters::FormtasticAddons
7
+
8
+ extend ::ActiveSupport::Autoload
9
+ autoload :SearchMethodSelect
10
+
11
+ def input_wrapping(&block)
12
+ template.content_tag :div, template.capture(&block), wrapper_html_options
13
+ end
14
+
15
+ def required?
16
+ false
17
+ end
18
+
19
+ # Can pass proc to filter label option
20
+ def label_from_options
21
+ res = super
22
+ res = res.call if res.is_a? Proc
23
+ res
24
+ end
25
+
26
+ def wrapper_html_options
27
+ { class: "filter_form_field filter_#{as}" }
28
+ end
29
+
30
+ # Override the standard finder to accept a proc
31
+ def collection_from_options
32
+ if options[:collection].is_a?(Proc)
33
+ template.instance_exec(&options[:collection])
34
+ else
35
+ super
36
+ end
37
+ end
38
+
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,75 @@
1
+ # This is a common set of Formtastic overrides needed to build a filter form
2
+ # that lets you select from a set of search methods for a given attribute.
3
+ #
4
+ # Your class must declare available filters for this module to work.
5
+ # Those filters must be recognizable by Ransack. For example:
6
+ #
7
+ # class FilterNumericInput < ::Formtastic::Inputs::NumberInput
8
+ # include FilterBase
9
+ # include FilterBase::SearchMethodSelect
10
+ #
11
+ # filter :equals, :greater_than, :less_than
12
+ # end
13
+ #
14
+ module ActiveAdmin
15
+ module Inputs
16
+ module Filters
17
+ module Base
18
+ module SearchMethodSelect
19
+
20
+ def self.included(base)
21
+ base.extend ClassMethods
22
+ end
23
+
24
+ module ClassMethods
25
+ attr_reader :filters
26
+
27
+ def filter(*filters)
28
+ (@filters ||= []).push *filters
29
+ end
30
+ end
31
+
32
+ def wrapper_html_options
33
+ opts = super
34
+ (opts[:class] ||= '') << ' select_and_search' unless seems_searchable?
35
+ opts
36
+ end
37
+
38
+ def to_html
39
+ input_wrapping do
40
+ label_html << # your label
41
+ select_html << # the dropdown that holds the available search methods
42
+ input_html # your input field
43
+ end
44
+ end
45
+
46
+ def input_html
47
+ builder.text_field current_filter, input_html_options
48
+ end
49
+
50
+ def select_html
51
+ template.select_tag '', template.options_for_select(filter_options, current_filter)
52
+ end
53
+
54
+ def filters
55
+ options[:filters] || self.class.filters
56
+ end
57
+
58
+ def current_filter
59
+ @current_filter ||= begin
60
+ methods = filters.map{ |f| "#{method}_#{f}" }
61
+ methods.detect{ |m| @object.public_send m } || methods.first
62
+ end
63
+ end
64
+
65
+ def filter_options
66
+ filters.collect do |filter|
67
+ [I18n.t("active_admin.filters.predicates.#{filter}"), "#{method}_#{filter}"]
68
+ end
69
+ end
70
+
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,24 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ module Filters
4
+ class BooleanInput < ::Formtastic::Inputs::SelectInput
5
+ include Base
6
+
7
+ def input_name
8
+ return method if seems_searchable?
9
+
10
+ "#{method}_eq"
11
+ end
12
+
13
+ def input_html_options_name
14
+ "#{object_name}[#{input_name}]" # was "#{object_name}[#{association_primary_key}]"
15
+ end
16
+
17
+ # Provide the AA translation to the blank input field.
18
+ def include_blank
19
+ I18n.t 'active_admin.any' if super
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,50 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ module Filters
4
+ class CheckBoxesInput < ::Formtastic::Inputs::CheckBoxesInput
5
+ include Base
6
+
7
+ def input_name
8
+ "#{object_name}[#{searchable_method_name}_in][]"
9
+ end
10
+
11
+ def selected_values
12
+ @object.public_send("#{searchable_method_name}_in") || []
13
+ end
14
+
15
+ def searchable_method_name
16
+ if searchable_has_many_through?
17
+ "#{reflection.through_reflection.name}_#{reflection.foreign_key}"
18
+ else
19
+ association_primary_key || method
20
+ end
21
+ end
22
+
23
+ # Add whitespace before label
24
+ def choice_label(choice)
25
+ ' ' + super
26
+ end
27
+
28
+ # Don't wrap in UL tag
29
+ def choices_group_wrapping(&block)
30
+ template.capture(&block)
31
+ end
32
+
33
+ # Don't wrap in LI tag
34
+ def choice_wrapping(html_options, &block)
35
+ template.capture(&block)
36
+ end
37
+
38
+ # Don't render hidden fields
39
+ def hidden_field_for_all
40
+ ""
41
+ end
42
+
43
+ # Don't render hidden fields
44
+ def hidden_fields?
45
+ false
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,36 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ module Filters
4
+ class DateRangeInput < ::Formtastic::Inputs::StringInput
5
+ include Base
6
+
7
+ def to_html
8
+ input_wrapping do
9
+ [ label_html,
10
+ builder.text_field(gt_input_name, input_html_options(gt_input_name)),
11
+ template.content_tag(:span, "-", class: "seperator"),
12
+ builder.text_field(lt_input_name, input_html_options(lt_input_name)),
13
+ ].join("\n").html_safe
14
+ end
15
+ end
16
+
17
+ def gt_input_name
18
+ "#{method}_gteq"
19
+ end
20
+ alias :input_name :gt_input_name
21
+
22
+ def lt_input_name
23
+ "#{method}_lteq"
24
+ end
25
+
26
+ def input_html_options(input_name = gt_input_name)
27
+ current_value = @object.public_send input_name
28
+ { size: 12,
29
+ class: "datepicker",
30
+ max: 10,
31
+ value: current_value.respond_to?(:strftime) ? current_value.strftime("%Y-%m-%d") : "" }
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,12 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ module Filters
4
+ class NumericInput < ::Formtastic::Inputs::NumberInput
5
+ include Base
6
+ include Base::SearchMethodSelect
7
+
8
+ filter :equals, :greater_than, :less_than
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,54 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ module Filters
4
+ class SelectInput < ::Formtastic::Inputs::SelectInput
5
+ include Base
6
+
7
+ def input_name
8
+ return method if seems_searchable?
9
+
10
+ searchable_method_name.concat multiple? ? '_in' : '_eq'
11
+ end
12
+
13
+ def searchable_method_name
14
+ if searchable_has_many_through?
15
+ "#{reflection.through_reflection.name}_#{reflection.foreign_key}"
16
+ else
17
+ name = method.to_s
18
+ name.concat '_id' if reflection
19
+ name
20
+ end
21
+ end
22
+
23
+ # Provide the AA translation to the blank input field.
24
+ def include_blank
25
+ I18n.t 'active_admin.any' if super
26
+ end
27
+
28
+ def input_html_options_name
29
+ "#{object_name}[#{input_name}]" # was "#{object_name}[#{association_primary_key}]"
30
+ end
31
+
32
+ # Would normally return true for has_many and HABTM, which would subsequently
33
+ # cause the select field to be multi-select instead of a dropdown.
34
+ def multiple_by_association?
35
+ false
36
+ end
37
+
38
+ # Provides an efficient default lookup query if the attribute is a DB column.
39
+ def collection
40
+ if !options[:collection] && column
41
+ pluck_column
42
+ else
43
+ super
44
+ end
45
+ end
46
+
47
+ def pluck_column
48
+ klass.reorder("#{method} asc").uniq.pluck method
49
+ end
50
+
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,26 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ module Filters
4
+ class StringInput < ::Formtastic::Inputs::StringInput
5
+ include Base
6
+ include Base::SearchMethodSelect
7
+
8
+ filter :contains, :equals, :starts_with, :ends_with
9
+
10
+ # If the filter method includes a search condition, build a normal string search field.
11
+ # Else, build a search field with a companion dropdown to choose a search condition from.
12
+ def to_html
13
+ if seems_searchable?
14
+ input_wrapping do
15
+ label_html <<
16
+ builder.text_field(method, input_html_options)
17
+ end
18
+ else
19
+ super # SearchMethodSelect#to_html
20
+ end
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+ end
@@ -47,9 +47,9 @@ module ActiveAdmin
47
47
  #
48
48
  def add(options)
49
49
  item = if parent = options.delete(:parent)
50
- (self[parent] || add(:label => parent)).add options
50
+ (self[parent] || add(label: parent)).add options
51
51
  else
52
- _add options.merge :parent => self
52
+ _add options.merge parent: self
53
53
  end
54
54
 
55
55
  yield(item) if block_given?
@@ -91,8 +91,10 @@ module ActiveAdmin
91
91
 
92
92
  def normalize_id(id)
93
93
  case id
94
- when String, Symbol
95
- id.to_s.downcase.gsub ' ', '_'
94
+ when String, Symbol, ActiveModel::Name
95
+ id.to_s.downcase.tr ' ', '_'
96
+ when ActiveAdmin::Resource::Name
97
+ id.param_key
96
98
  else
97
99
  raise TypeError, "#{id.class} isn't supported as a Menu ID"
98
100
  end
@@ -5,9 +5,6 @@ module ActiveAdmin
5
5
  # A MenuCollection stores multiple menus for any given namespace. Namespaces delegate
6
6
  # the addition of menu items to this class.
7
7
  class MenuCollection
8
-
9
- NoMenuError = Class.new(KeyError)
10
-
11
8
  def initialize
12
9
  @menus = {}
13
10
  @build_callbacks = []
@@ -34,7 +31,7 @@ module ActiveAdmin
34
31
  build_menus!
35
32
 
36
33
  @menus[menu_name] or
37
- raise NoMenuError, "No menu by the name of #{menu_name.inspect} in availble menus: #{@menus.keys.join(", ")}"
34
+ raise NoMenuError, "No menu by the name of #{menu_name.inspect} in available menus: #{@menus.keys.join(", ")}"
38
35
  end
39
36
 
40
37
  # Add callbacks that will be run when the menu is going to be built. This
@@ -11,7 +11,7 @@ module ActiveAdmin
11
11
  #
12
12
  # For example:
13
13
  #
14
- # ActiveAdmin.register Post, :namespace => :admin
14
+ # ActiveAdmin.register Post, namespace: :admin
15
15
  #
16
16
  # Will register the Post model into the "admin" namespace. This will namespace the
17
17
  # urls for the resource to "/admin/posts" and will set the controller to
@@ -19,7 +19,7 @@ module ActiveAdmin
19
19
  #
20
20
  # You can also register to the "root" namespace, which is to say no namespace at all.
21
21
  #
22
- # ActiveAdmin.register Post, :namespace => false
22
+ # ActiveAdmin.register Post, namespace: false
23
23
  #
24
24
  # This will register the resource to an instantiated namespace called :root. The
25
25
  # resource will be accessible from "/posts" and the controller will be PostsController.
@@ -45,7 +45,7 @@ module ActiveAdmin
45
45
 
46
46
  # Register the resource
47
47
  register_resource_controller(config)
48
- parse_registration_block(config, &block) if block_given?
48
+ parse_registration_block(config, resource_class, &block) if block_given?
49
49
  reset_menu!
50
50
 
51
51
  # Dispatch a registration event
@@ -96,7 +96,7 @@ module ActiveAdmin
96
96
  # Override from ActiveAdmin::Settings to inherit default attributes
97
97
  # from the application
98
98
  def read_default_setting(name)
99
- application.send(name)
99
+ application.public_send name
100
100
  end
101
101
 
102
102
  def fetch_menu(name)
@@ -112,7 +112,7 @@ module ActiveAdmin
112
112
  # @param [Symbol] name The name of the menu. Default: :default
113
113
  # @param [Proc] block The block to be ran when the menu is built
114
114
  #
115
- # @returns [void]
115
+ # @return [void]
116
116
  def build_menu(name = DEFAULT_MENU, &block)
117
117
  @menus.before_build do |menus|
118
118
  menus.menu name do |menu|
@@ -121,22 +121,34 @@ module ActiveAdmin
121
121
  end
122
122
  end
123
123
 
124
- # Add the default logout button to the menu, using the ActiveAdmin configuration settings
124
+ # The default logout menu item
125
125
  #
126
126
  # @param [ActiveAdmin::MenuItem] menu The menu to add the logout link to
127
- # @param [Fixnum] priority Override the default priority of 100 to position the logout button where you want
127
+ # @param [Fixnum] priority The numeric priority for the order in which it appears
128
128
  # @param [Hash] html_options An options hash to pass along to link_to
129
129
  #
130
- # @returns [void]
131
- def add_logout_button_to_menu(menu, priority=100, html_options={})
130
+ def add_logout_button_to_menu(menu, priority = 20, html_options = {})
132
131
  if logout_link_path
133
- logout_method = logout_link_method || :get
134
- menu.add :id => 'logout',
135
- :priority => priority,
136
- :label => proc{ I18n.t('active_admin.logout') },
137
- :html_options => html_options.reverse_merge(:method => logout_method),
138
- :url => proc{ render_or_call_method_or_proc_on self, active_admin_namespace.logout_link_path },
139
- :if => proc{ current_active_admin_user? }
132
+ html_options = html_options.reverse_merge(method: logout_link_method || :get)
133
+ menu.add id: 'logout', priority: priority, html_options: html_options,
134
+ label: ->{ I18n.t 'active_admin.logout' },
135
+ url: ->{ render_or_call_method_or_proc_on self, active_admin_namespace.logout_link_path },
136
+ if: :current_active_admin_user?
137
+ end
138
+ end
139
+
140
+ # The default user session menu item
141
+ #
142
+ # @param [ActiveAdmin::MenuItem] menu The menu to add the logout link to
143
+ # @param [Fixnum] priority The numeric priority for the order in which it appears
144
+ # @param [Hash] html_options An options hash to pass along to link_to
145
+ #
146
+ def add_current_user_to_menu(menu, priority = 10, html_options = {})
147
+ if current_user_method
148
+ menu.add id: 'current_user', priority: priority, html_options: html_options,
149
+ label: -> { display_name current_active_admin_user },
150
+ url: -> { auto_url_for(current_active_admin_user) },
151
+ if: :current_active_admin_user?
140
152
  end
141
153
  end
142
154
 
@@ -158,17 +170,12 @@ module ActiveAdmin
158
170
  def build_default_utility_nav
159
171
  return if @menus.exists? :utility_navigation
160
172
  @menus.menu :utility_navigation do |menu|
161
- menu.add :label => proc{ display_name current_active_admin_user },
162
- :url => proc{ url_for [active_admin_namespace.name, current_active_admin_user] rescue '#' },
163
- :id => 'current_user',
164
- :if => proc{ current_active_admin_user? }
165
-
173
+ add_current_user_to_menu menu
166
174
  add_logout_button_to_menu menu
167
175
  end
168
176
  end
169
177
 
170
- # Either returns an existing Resource instance or builds a new
171
- # one for the resource and options
178
+ # Either returns an existing Resource instance or builds a new one.
172
179
  def find_or_build_resource(resource_class, options)
173
180
  resources.add Resource.new(self, resource_class, options)
174
181
  end
@@ -177,6 +184,7 @@ module ActiveAdmin
177
184
  resources.add Page.new(self, name, options)
178
185
  end
179
186
 
187
+ # TODO: replace `eval` with `Class.new`
180
188
  def register_page_controller(config)
181
189
  eval "class ::#{config.controller_name} < ActiveAdmin::PageController; end"
182
190
  config.controller.active_admin_config = config
@@ -185,9 +193,8 @@ module ActiveAdmin
185
193
  def unload_resources!
186
194
  resources.each do |resource|
187
195
  parent = (module_name || 'Object').constantize
188
- const_name = resource.controller_name.split('::').last
189
- # Remove the const if its been defined
190
- parent.send(:remove_const, const_name) if parent.const_defined?(const_name)
196
+ name = resource.controller_name.split('::').last
197
+ parent.send(:remove_const, name) if parent.const_defined? name
191
198
 
192
199
  # Remove circular references
193
200
  resource.controller.active_admin_config = nil
@@ -200,16 +207,19 @@ module ActiveAdmin
200
207
 
201
208
  # Creates a ruby module to namespace all the classes in if required
202
209
  def register_module
203
- eval "module ::#{module_name}; end"
210
+ unless Object.const_defined? module_name
211
+ Object.const_set module_name, Module.new
212
+ end
204
213
  end
205
214
 
215
+ # TODO replace `eval` with `Class.new`
206
216
  def register_resource_controller(config)
207
217
  eval "class ::#{config.controller_name} < ActiveAdmin::ResourceController; end"
208
218
  config.controller.active_admin_config = config
209
219
  end
210
220
 
211
- def parse_registration_block(config, &block)
212
- config.dsl = ResourceDSL.new(config)
221
+ def parse_registration_block(config, resource_class, &block)
222
+ config.dsl = ResourceDSL.new(config, resource_class)
213
223
  config.dsl.run_registration_block(&block)
214
224
  end
215
225
 
@@ -217,5 +227,21 @@ module ActiveAdmin
217
227
  PageDSL.new(config).run_registration_block(&block)
218
228
  end
219
229
 
230
+ class Store
231
+ include Enumerable
232
+ delegate :[], :[]=, :empty?, to: :@namespaces
233
+
234
+ def initialize
235
+ @namespaces = {}
236
+ end
237
+
238
+ def each(&block)
239
+ @namespaces.values.each(&block)
240
+ end
241
+
242
+ def names
243
+ @namespaces.keys
244
+ end
245
+ end
220
246
  end
221
247
  end