activeadmin 1.4.3 → 2.9.0

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

Potentially problematic release.


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

Files changed (307) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +359 -25
  3. data/CONTRIBUTING.md +53 -74
  4. data/README.md +44 -11
  5. data/app/assets/javascripts/active_admin/base.js +517 -0
  6. data/app/assets/stylesheets/active_admin/_base.scss +29 -29
  7. data/app/assets/stylesheets/active_admin/_forms.scss +2 -14
  8. data/app/assets/stylesheets/active_admin/_header.scss +40 -8
  9. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  10. data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
  11. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  12. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  13. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  14. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  15. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  16. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  17. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +8 -0
  18. data/app/assets/stylesheets/active_admin/print.scss +2 -2
  19. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  20. data/app/javascript/active_admin/base.js +28 -0
  21. data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
  22. data/app/javascript/active_admin/ext/jquery.js +9 -0
  23. data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
  24. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  25. data/app/javascript/active_admin/initializers/datepicker.js +16 -0
  26. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  27. data/app/javascript/active_admin/initializers/filters.js +10 -0
  28. data/app/javascript/active_admin/initializers/has-many.js +95 -0
  29. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  30. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  31. data/app/javascript/active_admin/initializers/tabs.js +6 -0
  32. data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
  33. data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
  34. data/app/javascript/active_admin/lib/filters.js +39 -0
  35. data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
  36. data/app/javascript/active_admin/lib/per-page.js +38 -0
  37. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
  38. data/app/javascript/active_admin/lib/utils.js +40 -0
  39. data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
  40. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  41. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  42. data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
  43. data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
  44. data/app/views/active_admin/devise/registrations/new.html.erb +1 -2
  45. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  46. data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
  47. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  48. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  49. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  50. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  51. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  52. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  53. data/app/views/layouts/active_admin_logged_out.html.erb +16 -6
  54. data/config/locales/ar.yml +9 -8
  55. data/config/locales/az.yml +138 -0
  56. data/config/locales/bg.yml +1 -1
  57. data/config/locales/bs.yml +1 -0
  58. data/config/locales/ca.yml +1 -1
  59. data/config/locales/cs.yml +1 -0
  60. data/config/locales/da.yml +1 -0
  61. data/config/locales/de-CH.yml +1 -0
  62. data/config/locales/de.yml +19 -0
  63. data/config/locales/el.yml +1 -0
  64. data/config/locales/en-CA.yml +4 -3
  65. data/config/locales/en-GB.yml +4 -3
  66. data/config/locales/en.yml +4 -3
  67. data/config/locales/eo.yml +1 -0
  68. data/config/locales/es-MX.yml +3 -1
  69. data/config/locales/es.yml +6 -5
  70. data/config/locales/fa.yml +1 -0
  71. data/config/locales/fi.yml +1 -0
  72. data/config/locales/fr.yml +6 -5
  73. data/config/locales/he.yml +1 -1
  74. data/config/locales/hr.yml +1 -0
  75. data/config/locales/hu.yml +5 -0
  76. data/config/locales/id.yml +1 -0
  77. data/config/locales/it.yml +19 -0
  78. data/config/locales/ja.yml +4 -3
  79. data/config/locales/ko.yml +1 -0
  80. data/config/locales/lt.yml +3 -2
  81. data/config/locales/lv.yml +3 -2
  82. data/config/locales/mk.yml +134 -0
  83. data/config/locales/nb.yml +1 -0
  84. data/config/locales/nl.yml +1 -0
  85. data/config/locales/pl.yml +1 -0
  86. data/config/locales/pt-BR.yml +1 -0
  87. data/config/locales/pt-PT.yml +1 -0
  88. data/config/locales/ro.yml +1 -0
  89. data/config/locales/ru.yml +1 -0
  90. data/config/locales/sk.yml +60 -0
  91. data/config/locales/sv-SE.yml +1 -0
  92. data/config/locales/tr.yml +1 -0
  93. data/config/locales/uk.yml +3 -0
  94. data/config/locales/vi.yml +7 -5
  95. data/config/locales/zh-CN.yml +1 -0
  96. data/config/locales/zh-TW.yml +1 -0
  97. data/docs/0-installation.md +28 -4
  98. data/docs/1-general-configuration.md +20 -0
  99. data/docs/11-decorators.md +16 -5
  100. data/docs/12-arbre-components.md +13 -0
  101. data/docs/13-authorization-adapter.md +6 -6
  102. data/docs/2-resource-customization.md +11 -2
  103. data/docs/3-index-pages.md +1 -1
  104. data/docs/3-index-pages/index-as-table.md +7 -0
  105. data/docs/5-forms.md +6 -1
  106. data/docs/6-show-pages.md +12 -0
  107. data/docs/9-batch-actions.md +2 -2
  108. data/docs/CNAME +1 -1
  109. data/docs/Gemfile +2 -3
  110. data/docs/Gemfile.lock +126 -116
  111. data/docs/_config.yml +2 -0
  112. data/docs/_includes/top-menu.html +2 -2
  113. data/docs/documentation.md +1 -1
  114. data/docs/index.html +110 -9
  115. data/docs/stylesheets/main.css +29 -0
  116. data/lib/active_admin.rb +67 -63
  117. data/lib/active_admin/application.rb +20 -27
  118. data/lib/active_admin/application_settings.rb +6 -3
  119. data/lib/active_admin/asset_registration.rb +0 -8
  120. data/lib/active_admin/authorization_adapter.rb +3 -3
  121. data/lib/active_admin/base_controller.rb +10 -10
  122. data/lib/active_admin/base_controller/authorization.rb +15 -15
  123. data/lib/active_admin/batch_actions/controller.rb +4 -4
  124. data/lib/active_admin/batch_actions/resource_extension.rb +15 -10
  125. data/lib/active_admin/batch_actions/views/batch_action_form.rb +3 -3
  126. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +6 -6
  127. data/lib/active_admin/batch_actions/views/selection_cells.rb +3 -3
  128. data/lib/active_admin/callbacks.rb +1 -1
  129. data/lib/active_admin/cancan_adapter.rb +1 -1
  130. data/lib/active_admin/collection_decorator.rb +31 -0
  131. data/lib/active_admin/controller_action.rb +2 -1
  132. data/lib/active_admin/csv_builder.rb +14 -9
  133. data/lib/active_admin/dependency.rb +13 -85
  134. data/lib/active_admin/devise.rb +5 -5
  135. data/lib/active_admin/dsl.rb +2 -9
  136. data/lib/active_admin/dynamic_settings_node.rb +2 -2
  137. data/lib/active_admin/engine.rb +10 -8
  138. data/lib/active_admin/error.rb +4 -4
  139. data/lib/active_admin/filters.rb +7 -7
  140. data/lib/active_admin/filters/active.rb +1 -1
  141. data/lib/active_admin/filters/active_filter.rb +10 -10
  142. data/lib/active_admin/filters/active_sidebar.rb +9 -5
  143. data/lib/active_admin/filters/forms.rb +7 -7
  144. data/lib/active_admin/filters/formtastic_addons.rb +2 -7
  145. data/lib/active_admin/filters/resource_extension.rb +28 -4
  146. data/lib/active_admin/form_builder.rb +26 -22
  147. data/lib/active_admin/generators/boilerplate.rb +12 -4
  148. data/lib/active_admin/helpers/optional_display.rb +2 -2
  149. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  150. data/lib/active_admin/inputs/datepicker_input.rb +2 -2
  151. data/lib/active_admin/inputs/filters/base.rb +1 -1
  152. data/lib/active_admin/inputs/filters/base/search_method_select.rb +6 -6
  153. data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
  154. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
  155. data/lib/active_admin/inputs/filters/date_range_input.rb +15 -12
  156. data/lib/active_admin/inputs/filters/select_input.rb +2 -2
  157. data/lib/active_admin/localizers.rb +1 -1
  158. data/lib/active_admin/localizers/resource_localizer.rb +3 -3
  159. data/lib/active_admin/menu.rb +6 -3
  160. data/lib/active_admin/menu_item.rb +7 -7
  161. data/lib/active_admin/namespace.rb +12 -12
  162. data/lib/active_admin/namespace_settings.rb +27 -8
  163. data/lib/active_admin/order_clause.rb +2 -2
  164. data/lib/active_admin/orm/active_record.rb +1 -1
  165. data/lib/active_admin/orm/active_record/comments.rb +23 -23
  166. data/lib/active_admin/orm/active_record/comments/comment.rb +4 -4
  167. data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
  168. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +29 -24
  169. data/lib/active_admin/page.rb +1 -1
  170. data/lib/active_admin/page_dsl.rb +1 -1
  171. data/lib/active_admin/page_presenter.rb +2 -1
  172. data/lib/active_admin/pundit_adapter.rb +22 -9
  173. data/lib/active_admin/resource.rb +34 -20
  174. data/lib/active_admin/resource/action_items.rb +5 -5
  175. data/lib/active_admin/resource/attributes.rb +8 -5
  176. data/lib/active_admin/resource/belongs_to.rb +8 -3
  177. data/lib/active_admin/resource/controllers.rb +1 -1
  178. data/lib/active_admin/resource/menu.rb +5 -5
  179. data/lib/active_admin/resource/model.rb +15 -0
  180. data/lib/active_admin/resource/naming.rb +5 -5
  181. data/lib/active_admin/resource/routes.rb +25 -14
  182. data/lib/active_admin/resource/scope_to.rb +7 -7
  183. data/lib/active_admin/resource/scopes.rb +3 -3
  184. data/lib/active_admin/resource/sidebars.rb +2 -2
  185. data/lib/active_admin/resource_collection.rb +2 -2
  186. data/lib/active_admin/resource_controller.rb +13 -10
  187. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  188. data/lib/active_admin/resource_controller/data_access.rb +1 -1
  189. data/lib/active_admin/resource_controller/decorators.rb +7 -29
  190. data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
  191. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  192. data/lib/active_admin/resource_controller/streaming.rb +7 -6
  193. data/lib/active_admin/resource_dsl.rb +11 -9
  194. data/lib/active_admin/router.rb +3 -2
  195. data/lib/active_admin/scope.rb +15 -11
  196. data/lib/active_admin/settings_node.rb +1 -1
  197. data/lib/active_admin/sidebar_section.rb +3 -1
  198. data/lib/active_admin/version.rb +1 -1
  199. data/lib/active_admin/view_factory.rb +17 -17
  200. data/lib/active_admin/view_helpers.rb +1 -1
  201. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +5 -5
  202. data/lib/active_admin/view_helpers/display_helper.rb +16 -7
  203. data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
  204. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  205. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +2 -0
  206. data/lib/active_admin/views.rb +1 -1
  207. data/lib/active_admin/views/components/active_admin_form.rb +12 -6
  208. data/lib/active_admin/views/components/attributes_table.rb +8 -8
  209. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  210. data/lib/active_admin/views/components/dropdown_menu.rb +8 -8
  211. data/lib/active_admin/views/components/index_list.rb +3 -3
  212. data/lib/active_admin/views/components/menu.rb +1 -1
  213. data/lib/active_admin/views/components/menu_item.rb +4 -4
  214. data/lib/active_admin/views/components/paginated_collection.rb +21 -20
  215. data/lib/active_admin/views/components/panel.rb +1 -1
  216. data/lib/active_admin/views/components/scopes.rb +7 -5
  217. data/lib/active_admin/views/components/sidebar_section.rb +0 -3
  218. data/lib/active_admin/views/components/site_title.rb +1 -1
  219. data/lib/active_admin/views/components/status_tag.rb +13 -26
  220. data/lib/active_admin/views/components/table_for.rb +20 -19
  221. data/lib/active_admin/views/components/tabs.rb +13 -4
  222. data/lib/active_admin/views/footer.rb +3 -2
  223. data/lib/active_admin/views/header.rb +2 -2
  224. data/lib/active_admin/views/index_as_blog.rb +1 -1
  225. data/lib/active_admin/views/index_as_grid.rb +1 -1
  226. data/lib/active_admin/views/index_as_table.rb +27 -19
  227. data/lib/active_admin/views/pages/base.rb +18 -11
  228. data/lib/active_admin/views/pages/index.rb +15 -13
  229. data/lib/active_admin/views/tabbed_navigation.rb +2 -2
  230. data/lib/active_admin/views/title_bar.rb +1 -1
  231. data/lib/activeadmin.rb +1 -1
  232. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  233. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  234. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  235. data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
  236. data/lib/generators/active_admin/install/install_generator.rb +18 -8
  237. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +45 -3
  238. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  239. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  240. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  241. data/lib/generators/active_admin/resource/resource_generator.rb +3 -3
  242. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  243. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  244. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  245. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  246. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  247. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
  248. data/lib/ransack_ext.rb +9 -9
  249. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  250. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  251. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  252. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  253. metadata +108 -127
  254. data/.circleci/config.yml +0 -572
  255. data/.github/ISSUE_TEMPLATE.md +0 -20
  256. data/.gitignore +0 -16
  257. data/.mdlrc +0 -1
  258. data/.rspec +0 -1
  259. data/.rspec_parallel +0 -2
  260. data/.rubocop.yml +0 -99
  261. data/.simplecov +0 -9
  262. data/.yardopts +0 -7
  263. data/Gemfile +0 -30
  264. data/Gemfile.common +0 -26
  265. data/Gemfile.lock +0 -433
  266. data/Rakefile +0 -24
  267. data/activeadmin.gemspec +0 -32
  268. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  269. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  270. data/app/assets/images/active_admin/orderable.png +0 -0
  271. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  272. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  273. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  274. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  275. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  276. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  277. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  278. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  279. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  280. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  281. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  282. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  283. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  284. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  285. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  286. data/bin/install_chromedriver.sh +0 -17
  287. data/config/i18n-tasks.yml +0 -26
  288. data/config/mdl_style.rb +0 -11
  289. data/cucumber.yml +0 -7
  290. data/gemfiles/rails_42.gemfile +0 -10
  291. data/gemfiles/rails_42.gemfile.lock +0 -339
  292. data/gemfiles/rails_50.gemfile +0 -10
  293. data/gemfiles/rails_50.gemfile.lock +0 -353
  294. data/gemfiles/rails_51.gemfile +0 -10
  295. data/gemfiles/rails_51.gemfile.lock +0 -353
  296. data/lib/active_admin/event.rb +0 -24
  297. data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
  298. data/lib/active_admin/reloader.rb +0 -25
  299. data/lib/bug_report_templates/active_admin_master.rb +0 -111
  300. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  301. data/tasks/application_generator.rb +0 -50
  302. data/tasks/docs.rake +0 -64
  303. data/tasks/gemfiles.rake +0 -8
  304. data/tasks/lint.rake +0 -110
  305. data/tasks/local.rake +0 -27
  306. data/tasks/release.rake +0 -6
  307. data/tasks/test.rake +0 -42
@@ -1,9 +1,10 @@
1
1
  ActiveAdmin::Dependency.pundit!
2
2
 
3
- require 'pundit'
3
+ require "pundit"
4
4
 
5
5
  # Add a setting to the application to configure the pundit default policy
6
6
  ActiveAdmin::Application.inheritable_setting :pundit_default_policy, nil
7
+ ActiveAdmin::Application.inheritable_setting :pundit_policy_namespace, nil
7
8
 
8
9
  module ActiveAdmin
9
10
 
@@ -19,7 +20,7 @@ module ActiveAdmin
19
20
  def scope_collection(collection, action = Auth::READ)
20
21
  # scoping is appliable only to read/index action
21
22
  # which means there is no way how to scope other actions
22
- Pundit.policy_scope!(user, collection)
23
+ Pundit.policy_scope!(user, namespace(collection))
23
24
  rescue Pundit::NotDefinedError => e
24
25
  if default_policy_class && default_policy_class.const_defined?(:Scope)
25
26
  default_policy_class::Scope.new(user, collection).resolve
@@ -30,9 +31,9 @@ module ActiveAdmin
30
31
 
31
32
  def retrieve_policy(subject)
32
33
  case subject
33
- when nil then Pundit.policy!(user, resource)
34
- when Class then Pundit.policy!(user, subject.new)
35
- else Pundit.policy!(user, subject)
34
+ when nil then Pundit.policy!(user, namespace(resource))
35
+ when Class then Pundit.policy!(user, namespace(subject.new))
36
+ else Pundit.policy!(user, namespace(subject))
36
37
  end
37
38
  rescue Pundit::NotDefinedError => e
38
39
  if default_policy_class
@@ -43,11 +44,11 @@ module ActiveAdmin
43
44
  end
44
45
 
45
46
  def format_action(action, subject)
46
- # https://github.com/elabs/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
47
+ # https://github.com/varvet/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
47
48
  case action
48
- when Auth::CREATE then :create?
49
- when Auth::UPDATE then :update?
50
- when Auth::READ then subject.is_a?(Class) ? :index? : :show?
49
+ when Auth::CREATE then :create?
50
+ when Auth::UPDATE then :update?
51
+ when Auth::READ then subject.is_a?(Class) ? :index? : :show?
51
52
  when Auth::DESTROY then subject.is_a?(Class) ? :destroy_all? : :destroy?
52
53
  else "#{action}?"
53
54
  end
@@ -55,6 +56,14 @@ module ActiveAdmin
55
56
 
56
57
  private
57
58
 
59
+ def namespace(object)
60
+ if default_policy_namespace && !object.class.to_s.include?(default_policy_namespace.to_s.camelize)
61
+ [default_policy_namespace.to_sym, object]
62
+ else
63
+ object
64
+ end
65
+ end
66
+
58
67
  def default_policy_class
59
68
  ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
60
69
  end
@@ -63,6 +72,10 @@ module ActiveAdmin
63
72
  default_policy_class.new(user, subject)
64
73
  end
65
74
 
75
+ def default_policy_namespace
76
+ ActiveAdmin.application.pundit_policy_namespace
77
+ end
78
+
66
79
  end
67
80
 
68
81
  end
@@ -1,17 +1,18 @@
1
- require 'active_admin/resource/action_items'
2
- require 'active_admin/resource/attributes'
3
- require 'active_admin/resource/controllers'
4
- require 'active_admin/resource/menu'
5
- require 'active_admin/resource/page_presenters'
6
- require 'active_admin/resource/pagination'
7
- require 'active_admin/resource/routes'
8
- require 'active_admin/resource/naming'
9
- require 'active_admin/resource/scopes'
10
- require 'active_admin/resource/includes'
11
- require 'active_admin/resource/scope_to'
12
- require 'active_admin/resource/sidebars'
13
- require 'active_admin/resource/belongs_to'
14
- require 'active_admin/resource/ordering'
1
+ require "active_admin/resource/action_items"
2
+ require "active_admin/resource/attributes"
3
+ require "active_admin/resource/controllers"
4
+ require "active_admin/resource/menu"
5
+ require "active_admin/resource/page_presenters"
6
+ require "active_admin/resource/pagination"
7
+ require "active_admin/resource/routes"
8
+ require "active_admin/resource/naming"
9
+ require "active_admin/resource/scopes"
10
+ require "active_admin/resource/includes"
11
+ require "active_admin/resource/scope_to"
12
+ require "active_admin/resource/sidebars"
13
+ require "active_admin/resource/belongs_to"
14
+ require "active_admin/resource/ordering"
15
+ require "active_admin/resource/model"
15
16
 
16
17
  module ActiveAdmin
17
18
 
@@ -26,7 +27,7 @@ module ActiveAdmin
26
27
  class Resource
27
28
 
28
29
  # Event dispatched when a new resource is registered
29
- RegisterEvent = 'active_admin.resource.register'.freeze
30
+ RegisterEvent = "active_admin.resource.register".freeze
30
31
 
31
32
  # The namespace this config belongs to
32
33
  attr_reader :namespace
@@ -43,7 +44,7 @@ module ActiveAdmin
43
44
  # The default sort order to use in the controller
44
45
  attr_writer :sort_order
45
46
  def sort_order
46
- @sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s : 'id') + '_desc'
47
+ @sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s : "id") + "_desc"
47
48
  end
48
49
 
49
50
  # Set the configuration for the CSV
@@ -69,9 +70,10 @@ module ActiveAdmin
69
70
  def initialize(namespace, resource_class, options = {})
70
71
  @namespace = namespace
71
72
  @resource_class_name = "::#{resource_class.name}"
72
- @options = options
73
+ @options = options
73
74
  @sort_order = options[:sort_order]
74
- @member_actions, @collection_actions = [], []
75
+ @member_actions = []
76
+ @collection_actions = []
75
77
  end
76
78
  end
77
79
 
@@ -103,6 +105,10 @@ module ActiveAdmin
103
105
  ActiveSupport::Dependencies.constantize(decorator_class_name) if decorator_class_name
104
106
  end
105
107
 
108
+ def resource_name_extension
109
+ @resource_name_extension ||= define_resource_name_extension(self)
110
+ end
111
+
106
112
  def resource_table_name
107
113
  resource_class.quoted_table_name
108
114
  end
@@ -132,6 +138,7 @@ module ActiveAdmin
132
138
  def belongs_to(target, options = {})
133
139
  @belongs_to = Resource::BelongsTo.new(self, target, options)
134
140
  self.menu_item_options = false if @belongs_to.required?
141
+ options[:class_name] ||= @belongs_to.resource.resource_class_name if @belongs_to.resource
135
142
  controller.send :belongs_to, target, options.dup
136
143
  end
137
144
 
@@ -181,11 +188,11 @@ module ActiveAdmin
181
188
  end
182
189
 
183
190
  def association_columns
184
- @association_columns ||= resource_attributes.select{ |key, value| key != value }.values
191
+ @association_columns ||= resource_attributes.select { |key, value| key != value }.values
185
192
  end
186
193
 
187
194
  def content_columns
188
- @content_columns ||= resource_attributes.select{ |key, value| key == value }.values
195
+ @content_columns ||= resource_attributes.select { |key, value| key == value }.values
189
196
  end
190
197
 
191
198
  private
@@ -202,5 +209,12 @@ module ActiveAdmin
202
209
  @default_csv_builder ||= CSVBuilder.default_for_resource(self)
203
210
  end
204
211
 
212
+ def define_resource_name_extension(resource)
213
+ Module.new do
214
+ define_method :model_name do
215
+ resource.resource_name
216
+ end
217
+ end
218
+ end
205
219
  end # class Resource
206
220
  end # module ActiveAdmin
@@ -1,4 +1,4 @@
1
- require 'active_admin/helpers/optional_display'
1
+ require "active_admin/helpers/optional_display"
2
2
 
3
3
  module ActiveAdmin
4
4
 
@@ -64,7 +64,7 @@ module ActiveAdmin
64
64
  # Adds the default New link on index
65
65
  def add_default_new_action_item
66
66
  add_action_item :new, only: :index do
67
- if controller.action_methods.include?('new') && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
67
+ if controller.action_methods.include?("new") && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
68
68
  localizer = ActiveAdmin::Localizers.resource(active_admin_config)
69
69
  link_to localizer.t(:new_model), new_resource_path
70
70
  end
@@ -74,7 +74,7 @@ module ActiveAdmin
74
74
  # Adds the default Edit link on show
75
75
  def add_default_edit_action_item
76
76
  add_action_item :edit, only: :show do
77
- if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
77
+ if controller.action_methods.include?("edit") && authorized?(ActiveAdmin::Auth::UPDATE, resource)
78
78
  localizer = ActiveAdmin::Localizers.resource(active_admin_config)
79
79
  link_to localizer.t(:edit_model), edit_resource_path(resource)
80
80
  end
@@ -84,10 +84,10 @@ module ActiveAdmin
84
84
  # Adds the default Destroy link on show
85
85
  def add_default_show_action_item
86
86
  add_action_item :destroy, only: :show do
87
- if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
87
+ if controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, resource)
88
88
  localizer = ActiveAdmin::Localizers.resource(active_admin_config)
89
89
  link_to localizer.t(:delete_model), resource_path(resource), method: :delete,
90
- data: {confirm: localizer.t(:delete_confirmation)}
90
+ data: { confirm: localizer.t(:delete_confirmation) }
91
91
  end
92
92
  end
93
93
  end
@@ -18,13 +18,13 @@ module ActiveAdmin
18
18
 
19
19
  def foreign_methods
20
20
  @foreign_methods ||= resource_class.reflect_on_all_associations.
21
- select{ |r| r.macro == :belongs_to }.
22
- reject{ |r| r.chain.length > 2 && !r.options[:polymorphic] }.
23
- index_by{ |r| r.foreign_key.to_sym }
21
+ select { |r| r.macro == :belongs_to }.
22
+ reject { |r| r.chain.length > 2 && !r.options[:polymorphic] }.
23
+ index_by { |r| r.foreign_key.to_sym }
24
24
  end
25
25
 
26
26
  def reject_col?(c)
27
- primary_col?(c) || sti_col?(c) || counter_cache_col?(c)
27
+ primary_col?(c) || sti_col?(c) || counter_cache_col?(c) || filtered_col?(c)
28
28
  end
29
29
 
30
30
  def primary_col?(c)
@@ -36,9 +36,12 @@ module ActiveAdmin
36
36
  end
37
37
 
38
38
  def counter_cache_col?(c)
39
- c.name.end_with?('_count')
39
+ c.name.end_with?("_count")
40
40
  end
41
41
 
42
+ def filtered_col?(c)
43
+ ActiveAdmin.application.filter_attributes.include?(c.name.to_sym)
44
+ end
42
45
  end
43
46
  end
44
47
  end
@@ -1,4 +1,4 @@
1
- require 'active_admin/resource'
1
+ require "active_admin/resource"
2
2
 
3
3
  module ActiveAdmin
4
4
  class Resource
@@ -14,8 +14,13 @@ module ActiveAdmin
14
14
  # The resource which initiated this relationship
15
15
  attr_reader :owner
16
16
 
17
+ # The name of the relation
18
+ attr_reader :target_name
19
+
17
20
  def initialize(owner, target_name, options = {})
18
- @owner, @target_name, @options = owner, target_name, options
21
+ @owner = owner
22
+ @target_name = target_name
23
+ @options = options
19
24
  end
20
25
 
21
26
  # Returns the target resource class or raises an exception if it doesn't exist
@@ -41,7 +46,7 @@ module ActiveAdmin
41
46
  end
42
47
 
43
48
  def to_param
44
- :"#{@target_name}_id"
49
+ (@options[:param] || "#{@target_name}_id").to_sym
45
50
  end
46
51
  end
47
52
  end
@@ -6,7 +6,7 @@ module ActiveAdmin
6
6
  # Returns a properly formatted controller name for this
7
7
  # config within its namespace
8
8
  def controller_name
9
- [namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join('::')
9
+ [namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join("::")
10
10
  end
11
11
 
12
12
  # Returns the controller for this config
@@ -7,12 +7,12 @@ module ActiveAdmin
7
7
  # To disable this menu item, call `menu(false)` from the DSL
8
8
  def menu_item_options=(options)
9
9
  if options == false
10
- @include_in_menu = false
10
+ @include_in_menu = false
11
11
  @menu_item_options = {}
12
12
  else
13
13
  @include_in_menu = true
14
14
  @navigation_menu_name = options[:menu_name]
15
- @menu_item_options = default_menu_options.merge options
15
+ @menu_item_options = default_menu_options.merge options
16
16
  end
17
17
  end
18
18
 
@@ -26,9 +26,9 @@ module ActiveAdmin
26
26
  resource = self
27
27
  {
28
28
  id: resource_name.plural,
29
- label: proc{ resource.plural_resource_label },
30
- url: proc{ resource.route_collection_path(params, url_options) },
31
- if: proc{ authorized?(Auth::READ, menu_resource_class) }
29
+ label: proc { resource.plural_resource_label },
30
+ url: proc { resource.route_collection_path(params, url_options) },
31
+ if: proc { authorized?(Auth::READ, menu_resource_class) }
32
32
  }
33
33
  end
34
34
 
@@ -0,0 +1,15 @@
1
+ module ActiveAdmin
2
+ class Model
3
+ def initialize(resource, record)
4
+ @record = record
5
+
6
+ if resource
7
+ @record.extend(resource.resource_name_extension)
8
+ end
9
+ end
10
+
11
+ def to_model
12
+ @record
13
+ end
14
+ end
15
+ end
@@ -4,7 +4,7 @@ module ActiveAdmin
4
4
  module Naming
5
5
  def resource_name
6
6
  @resource_name ||= begin
7
- as = @options[:as].gsub /\s/, '' if @options[:as]
7
+ as = @options[:as].gsub /\s/, "" if @options[:as]
8
8
 
9
9
  if as || !resource_class.respond_to?(:model_name)
10
10
  Name.new resource_class, as
@@ -17,13 +17,13 @@ module ActiveAdmin
17
17
  # Returns the name to call this resource such as "Bank Account"
18
18
  def resource_label
19
19
  resource_name.translate count: 1,
20
- default: resource_name.to_s.gsub('::', ' ').titleize
20
+ default: resource_name.to_s.gsub("::", " ").titleize
21
21
  end
22
22
 
23
23
  # Returns the plural version of this resource such as "Bank Accounts"
24
24
  def plural_resource_label(options = {})
25
- defaults = {count: Helpers::I18n::PLURAL_MANY_COUNT,
26
- default: resource_label.pluralize.titleize}
25
+ defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
26
+ default: resource_label.pluralize.titleize }
27
27
  resource_name.translate defaults.merge options
28
28
  end
29
29
 
@@ -46,7 +46,7 @@ module ActiveAdmin
46
46
  end
47
47
 
48
48
  def translate(options = {})
49
- I18n.t i18n_key, {scope: [:activerecord, :models]}.merge(options)
49
+ I18n.t i18n_key, **{ scope: [:activerecord, :models] }.merge(options)
50
50
  end
51
51
 
52
52
  def route_key
@@ -20,7 +20,11 @@ module ActiveAdmin
20
20
  end
21
21
 
22
22
  def route_edit_instance_path(resource, additional_params = {})
23
- route_builder.edit_instance_path(resource, additional_params)
23
+ route_builder.member_action_path(:edit, resource, additional_params)
24
+ end
25
+
26
+ def route_member_action_path(action, resource, additional_params = {})
27
+ route_builder.member_action_path(action, resource, additional_params)
24
28
  end
25
29
 
26
30
  # Returns the routes prefix for this config
@@ -38,8 +42,6 @@ module ActiveAdmin
38
42
  config[:route_collection_name] == config[:route_instance_name]
39
43
  end
40
44
 
41
- private
42
-
43
45
  class RouteBuilder
44
46
  def initialize(resource)
45
47
  @resource = resource
@@ -75,12 +77,13 @@ module ActiveAdmin
75
77
  routes.public_send route_name, *route_instance_params(instance), additional_params
76
78
  end
77
79
 
78
- # @return [String] the path to the edit page of this resource
80
+ # @return [String] the path to the member action of this resource
81
+ # @param action [Symbol]
79
82
  # @param instance [ActiveRecord::Base] the instance we want the path of
80
83
  # @example "/admin/posts/1/edit"
81
- def edit_instance_path(instance, additional_params = {})
84
+ def member_action_path(action, instance, additional_params = {})
82
85
  path = resource.resources_configuration[:self][:route_instance_name]
83
- route_name = route_name(path, action: :edit)
86
+ route_name = route_name(path, action: action)
84
87
 
85
88
  routes.public_send route_name, *route_instance_params(instance), additional_params
86
89
  end
@@ -93,19 +96,19 @@ module ActiveAdmin
93
96
  suffix = options[:suffix] || "path"
94
97
  route = []
95
98
 
96
- route << options[:action] # "batch_action", "edit" or "new"
97
- route << resource.route_prefix # "admin"
99
+ route << options[:action] # "batch_action", "edit" or "new"
100
+ route << resource.route_prefix # "admin"
98
101
  route << belongs_to_name if nested? # "category"
99
- route << resource_path_name # "posts" or "post"
100
- route << suffix # "path" or "index path"
102
+ route << resource_path_name # "posts" or "post"
103
+ route << suffix # "path" or "index path"
101
104
 
102
- route.compact.join('_').to_sym # :admin_category_posts_path
105
+ route.compact.join("_").to_sym # :admin_category_posts_path
103
106
  end
104
107
 
105
108
  # @return params to pass to instance path
106
109
  def route_instance_params(instance)
107
110
  if nested?
108
- [instance.public_send(belongs_to_name).to_param, instance.to_param]
111
+ [instance.public_send(belongs_to_target_name).to_param, instance.to_param]
109
112
  else
110
113
  instance.to_param
111
114
  end
@@ -118,11 +121,19 @@ module ActiveAdmin
118
121
  end
119
122
 
120
123
  def nested?
121
- resource.belongs_to? && resource.belongs_to_config.required?
124
+ resource.belongs_to? && belongs_to_config.required?
125
+ end
126
+
127
+ def belongs_to_target_name
128
+ belongs_to_config.target_name
122
129
  end
123
130
 
124
131
  def belongs_to_name
125
- resource.belongs_to_config.target.resource_name.singular if nested?
132
+ belongs_to_config.target.resource_name.singular
133
+ end
134
+
135
+ def belongs_to_config
136
+ resource.belongs_to_config
126
137
  end
127
138
 
128
139
  def routes