activeadmin 1.4.2 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +501 -157
  3. data/CONTRIBUTING.md +57 -72
  4. data/README.md +47 -14
  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 +5 -5
  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/scoping.rb +1 -1
  193. data/lib/active_admin/resource_controller/streaming.rb +7 -6
  194. data/lib/active_admin/resource_dsl.rb +11 -9
  195. data/lib/active_admin/router.rb +3 -2
  196. data/lib/active_admin/scope.rb +15 -11
  197. data/lib/active_admin/settings_node.rb +1 -1
  198. data/lib/active_admin/sidebar_section.rb +3 -1
  199. data/lib/active_admin/version.rb +1 -1
  200. data/lib/active_admin/view_factory.rb +17 -17
  201. data/lib/active_admin/view_helpers.rb +1 -1
  202. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +5 -5
  203. data/lib/active_admin/view_helpers/display_helper.rb +16 -7
  204. data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
  205. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  206. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
  207. data/lib/active_admin/views.rb +1 -1
  208. data/lib/active_admin/views/components/active_admin_form.rb +12 -6
  209. data/lib/active_admin/views/components/attributes_table.rb +8 -8
  210. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  211. data/lib/active_admin/views/components/dropdown_menu.rb +8 -8
  212. data/lib/active_admin/views/components/index_list.rb +3 -3
  213. data/lib/active_admin/views/components/menu.rb +1 -1
  214. data/lib/active_admin/views/components/menu_item.rb +4 -4
  215. data/lib/active_admin/views/components/paginated_collection.rb +21 -20
  216. data/lib/active_admin/views/components/panel.rb +1 -1
  217. data/lib/active_admin/views/components/scopes.rb +7 -5
  218. data/lib/active_admin/views/components/sidebar_section.rb +0 -3
  219. data/lib/active_admin/views/components/site_title.rb +1 -1
  220. data/lib/active_admin/views/components/status_tag.rb +13 -26
  221. data/lib/active_admin/views/components/table_for.rb +20 -19
  222. data/lib/active_admin/views/components/tabs.rb +13 -4
  223. data/lib/active_admin/views/footer.rb +3 -2
  224. data/lib/active_admin/views/header.rb +2 -2
  225. data/lib/active_admin/views/index_as_blog.rb +1 -1
  226. data/lib/active_admin/views/index_as_grid.rb +1 -1
  227. data/lib/active_admin/views/index_as_table.rb +27 -19
  228. data/lib/active_admin/views/pages/base.rb +18 -11
  229. data/lib/active_admin/views/pages/index.rb +15 -13
  230. data/lib/active_admin/views/tabbed_navigation.rb +2 -2
  231. data/lib/active_admin/views/title_bar.rb +1 -1
  232. data/lib/activeadmin.rb +1 -1
  233. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  234. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  235. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  236. data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
  237. data/lib/generators/active_admin/install/install_generator.rb +18 -8
  238. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +45 -3
  239. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  240. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  241. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  242. data/lib/generators/active_admin/resource/resource_generator.rb +3 -3
  243. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  244. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  245. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  246. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  247. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  248. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
  249. data/lib/ransack_ext.rb +9 -9
  250. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  251. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  252. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  253. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  254. metadata +108 -127
  255. data/.circleci/config.yml +0 -467
  256. data/.github/ISSUE_TEMPLATE.md +0 -20
  257. data/.gitignore +0 -46
  258. data/.mdlrc +0 -1
  259. data/.rspec +0 -1
  260. data/.rspec_parallel +0 -2
  261. data/.rubocop.yml +0 -94
  262. data/.simplecov +0 -11
  263. data/.yardopts +0 -7
  264. data/Gemfile +0 -10
  265. data/Gemfile.common +0 -53
  266. data/Gemfile.lock +0 -431
  267. data/Rakefile +0 -23
  268. data/activeadmin.gemspec +0 -32
  269. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  270. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  271. data/app/assets/images/active_admin/orderable.png +0 -0
  272. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  273. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  274. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  275. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  276. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  277. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  278. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  279. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  280. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  281. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  282. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  283. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  284. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  285. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  286. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  287. data/bin/install_chromedriver.sh +0 -17
  288. data/codecov.yml +0 -25
  289. data/config/i18n-tasks.yml +0 -26
  290. data/config/mdl_style.rb +0 -11
  291. data/cucumber.yml +0 -7
  292. data/gemfiles/rails_42.gemfile +0 -10
  293. data/gemfiles/rails_42.gemfile.lock +0 -410
  294. data/gemfiles/rails_50.gemfile +0 -10
  295. data/gemfiles/rails_50.gemfile.lock +0 -424
  296. data/gemfiles/rails_51.gemfile +0 -10
  297. data/gemfiles/rails_51.gemfile.lock +0 -423
  298. data/lib/active_admin/event.rb +0 -24
  299. data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
  300. data/lib/active_admin/reloader.rb +0 -25
  301. data/lib/bug_report_templates/active_admin_master.rb +0 -111
  302. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  303. data/tasks/application_generator.rb +0 -48
  304. data/tasks/docs.rake +0 -64
  305. data/tasks/gemfiles.rake +0 -8
  306. data/tasks/lint.rake +0 -110
  307. data/tasks/local.rake +0 -27
  308. data/tasks/test.rake +0 -43
@@ -6,7 +6,9 @@ module ActiveAdmin
6
6
  attr_accessor :name, :options, :block
7
7
 
8
8
  def initialize(name, options = {}, &block)
9
- @name, @options, @block = name.to_s, options, block
9
+ @name = name.to_s
10
+ @options = options
11
+ @block = block
10
12
  normalize_display_options!
11
13
  end
12
14
 
@@ -1,3 +1,3 @@
1
1
  module ActiveAdmin
2
- VERSION = '1.4.2'
2
+ VERSION = "2.9.0"
3
3
  end
@@ -1,27 +1,27 @@
1
- require 'active_admin/abstract_view_factory'
1
+ require "active_admin/abstract_view_factory"
2
2
 
3
3
  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
- 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
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
17
 
18
18
  # Register All The Pages
19
- register index_page: ActiveAdmin::Views::Pages::Index,
20
- show_page: ActiveAdmin::Views::Pages::Show,
21
- new_page: ActiveAdmin::Views::Pages::Form,
22
- edit_page: ActiveAdmin::Views::Pages::Form,
23
- layout: ActiveAdmin::Views::Pages::Layout,
24
- page: ActiveAdmin::Views::Pages::Page
19
+ register index_page: ActiveAdmin::Views::Pages::Index,
20
+ show_page: ActiveAdmin::Views::Pages::Show,
21
+ new_page: ActiveAdmin::Views::Pages::Form,
22
+ edit_page: ActiveAdmin::Views::Pages::Form,
23
+ layout: ActiveAdmin::Views::Pages::Layout,
24
+ page: ActiveAdmin::Views::Pages::Page
25
25
 
26
26
  end
27
27
  end
@@ -2,7 +2,7 @@ module ActiveAdmin
2
2
  module ViewHelpers
3
3
 
4
4
  # Require all ruby files in the view helpers dir
5
- Dir[File.expand_path('../view_helpers', __FILE__) + "/*.rb"].each{|f| require f }
5
+ Dir[File.expand_path("view_helpers", __dir__) + "/*.rb"].each { |f| require f }
6
6
 
7
7
  include ActiveAdminApplicationHelper
8
8
  include AutoLinkHelper
@@ -6,22 +6,22 @@ module ActiveAdmin
6
6
  def breadcrumb_links(path = request.path)
7
7
  # remove leading "/" and split up the URL
8
8
  # and remove last since it's used as the page title
9
- parts = path.split('/').select(&:present?)[0..-2]
9
+ parts = path.split("/").select(&:present?)[0..-2]
10
10
 
11
11
  parts.each_with_index.map do |part, index|
12
12
  # 1. try using `display_name` if we can locate a DB object
13
13
  # 2. try using the model name translation
14
14
  # 3. default to calling `titlecase` on the URL fragment
15
- if part =~ /\A(\d+|[a-f0-9]{24}|(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}))\z/ && parts[index-1]
15
+ if part =~ /\A(\d+|[a-f0-9]{24}|(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}))\z/ && parts[index - 1]
16
16
  parent = active_admin_config.belongs_to_config.try :target
17
- config = parent && parent.resource_name.route_key == parts[index-1] ? parent : active_admin_config
18
- name = display_name config.find_resource part
17
+ config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
18
+ name = display_name config.find_resource part
19
19
  end
20
20
  name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase
21
21
 
22
22
  # Don't create a link if the resource's show action is disabled
23
23
  if !config || config.defined_actions.include?(:show)
24
- link_to name, '/' + parts[0..index].join('/')
24
+ link_to name, "/" + parts[0..index].join("/")
25
25
  else
26
26
  name
27
27
  end
@@ -2,20 +2,21 @@ 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
5
+ DISPLAY_NAME_FALLBACK = -> {
6
+ name = ""
7
+ klass = self.class
8
+ name << klass.model_name.human if klass.respond_to? :model_name
8
9
  name << " ##{send(klass.primary_key)}" if klass.respond_to? :primary_key
9
10
  name.present? ? name : to_s
10
11
  }
11
12
  def DISPLAY_NAME_FALLBACK.inspect
12
- 'DISPLAY_NAME_FALLBACK'
13
+ "DISPLAY_NAME_FALLBACK"
13
14
  end
14
15
 
15
16
  # Attempts to call any known display name methods on the resource.
16
17
  # See the setting in `application.rb` for the list of methods and their priority.
17
18
  def display_name(resource)
18
- sanitize(render_in_context(resource, display_name_method_for(resource)).to_s) unless resource.nil?
19
+ ERB::Util.html_escape(render_in_context(resource, display_name_method_for(resource))) unless resource.nil?
19
20
  end
20
21
 
21
22
  # Looks up and caches the first available display name method.
@@ -25,7 +26,7 @@ module ActiveAdmin
25
26
  @@display_name_methods_cache ||= {}
26
27
  @@display_name_methods_cache[resource.class] ||= begin
27
28
  methods = active_admin_application.display_name_methods - association_methods_for(resource)
28
- method = methods.detect{ |method| resource.respond_to? method }
29
+ method = methods.detect { |method| resource.respond_to? method }
29
30
 
30
31
  if method != :to_s || resource.method(method).source_location
31
32
  method
@@ -69,16 +70,24 @@ module ActiveAdmin
69
70
  object.to_s
70
71
  when Date, Time
71
72
  I18n.localize object, format: active_admin_application.localize_format
73
+ when Array
74
+ format_collection(object)
72
75
  else
73
76
  if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
74
- defined?(::Mongoid) && object.class.include?(Mongoid::Document)
77
+ defined?(::Mongoid) && object.class.include?(Mongoid::Document)
75
78
  auto_link object
79
+ elsif defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Relation)
80
+ format_collection(object)
76
81
  else
77
82
  display_name object
78
83
  end
79
84
  end
80
85
  end
81
86
 
87
+ def format_collection(collection)
88
+ safe_join(collection.map { |item| pretty_format(item) }, ", ")
89
+ end
90
+
82
91
  def boolean_attr?(resource, attr, value)
83
92
  case value
84
93
  when TrueClass, FalseClass
@@ -1,6 +1,7 @@
1
1
  module ActiveAdmin
2
2
  module ViewHelpers
3
3
  module DownloadFormatLinksHelper
4
+ private
4
5
 
5
6
  def build_download_formats(download_links)
6
7
  download_links = instance_exec(&download_links) if download_links.is_a?(Proc)
@@ -17,7 +18,7 @@ module ActiveAdmin
17
18
  def build_download_format_links(formats = self.class.formats)
18
19
  params = request.query_parameters.except :format, :commit
19
20
  div class: "download_links" do
20
- span I18n.t('active_admin.download')
21
+ span I18n.t("active_admin.download")
21
22
  formats.each do |format|
22
23
  a format.upcase, href: url_for(params: params, format: format)
23
24
  end
@@ -15,7 +15,7 @@ module ActiveAdmin
15
15
  #
16
16
  def fields_for_params(params, options = {})
17
17
  namespace = options[:namespace]
18
- except = Array.wrap(options[:except]).map &:to_s
18
+ except = Array.wrap(options[:except]).map &:to_s
19
19
 
20
20
  params.flat_map do |k, v|
21
21
  next if namespace.nil? && %w(controller action commit utf8).include?(k.to_s)
@@ -37,7 +37,7 @@ module ActiveAdmin
37
37
  { "#{k}[]" => v }
38
38
  end
39
39
  when nil
40
- { k => '' }
40
+ { k => "" }
41
41
  when TrueClass, FalseClass
42
42
  { k => v }
43
43
  else
@@ -1,4 +1,7 @@
1
+ # Utility methods for internal use.
2
+ # @private
1
3
  module MethodOrProcHelper
4
+ extend self
2
5
 
3
6
  # This method will either call the symbol on self or instance_exec the Proc
4
7
  # within self. Any args will be passed along to the method dispatch.
@@ -2,7 +2,7 @@ module ActiveAdmin
2
2
  module Views
3
3
 
4
4
  # Loads all the classes in views/*.rb
5
- Dir[File.expand_path('../views', __FILE__) + "/**/*.rb"].sort.each{ |f| require f }
5
+ Dir[File.expand_path("views", __dir__) + "/**/*.rb"].sort.each { |f| require f }
6
6
 
7
7
  end
8
8
  end
@@ -57,6 +57,12 @@ module ActiveAdmin
57
57
  end
58
58
  insert_tag(SemanticInputsProxy, form_builder, *args, &wrapped_block)
59
59
  else
60
+ # Set except option to prevent sensitive fields from being shown in forms by default.
61
+ opts = args.extract_options!
62
+ opts[:except] ||= []
63
+ ActiveAdmin.application.filter_attributes.each { |e| opts[:except] << e }
64
+ args << opts
65
+
60
66
  proxy_call_to_form(:inputs, *args, &block)
61
67
  end
62
68
  end
@@ -105,14 +111,14 @@ module ActiveAdmin
105
111
  create_another = params[:create_another]
106
112
  label = @resource.class.model_name.human
107
113
  Arbre::Context.new do
108
- li class: 'create_another' do
114
+ li class: "create_another" do
109
115
  input(
110
116
  checked: create_another,
111
- id: 'create_another',
112
- name: 'create_another',
113
- type: 'checkbox'
117
+ id: "create_another",
118
+ name: "create_another",
119
+ type: "checkbox"
114
120
  )
115
- label(I18n.t('active_admin.create_another', model: label), for: 'create_another')
121
+ label(I18n.t("active_admin.create_another", model: label), for: "create_another")
116
122
  end
117
123
  end
118
124
  end
@@ -125,7 +131,7 @@ module ActiveAdmin
125
131
  legend = args.shift if args.first.is_a?(::String)
126
132
  legend = html_options.delete(:name) if html_options.key?(:name)
127
133
  legend_tag = legend ? "<legend><span>#{legend}</span></legend>" : ""
128
- fieldset_attrs = html_options.map {|k, v| %Q{#{k}="#{v}"} }.join(" ")
134
+ fieldset_attrs = html_options.map { |k, v| %Q{#{k}="#{v}"} }.join(" ")
129
135
  @opening_tag = "<fieldset #{fieldset_attrs}>#{legend_tag}<ol>"
130
136
  @closing_tag = "</ol></fieldset>"
131
137
  super(*(args << html_options), &block)
@@ -5,9 +5,9 @@ module ActiveAdmin
5
5
  builder_method :attributes_table_for
6
6
 
7
7
  def build(obj, *attrs)
8
- @collection = Array.wrap(obj)
8
+ @collection = Array.wrap(obj)
9
9
  @resource_class = @collection.first.class
10
- options = { }
10
+ options = {}
11
11
  options[:for] = @collection.first if single_record?
12
12
  super(options)
13
13
  @table = table
@@ -16,19 +16,19 @@ module ActiveAdmin
16
16
  end
17
17
 
18
18
  def rows(*attrs)
19
- attrs.each {|attr| row(attr) }
19
+ attrs.each { |attr| row(attr) }
20
20
  end
21
21
 
22
22
  def row(*args, &block)
23
- title = args[0]
23
+ title = args[0]
24
24
  options = args.extract_options!
25
25
  classes = [:row]
26
26
  if options[:class]
27
27
  classes << options[:class]
28
28
  elsif title.present?
29
- classes << "row-#{ActiveAdmin::Dependency.rails.parameterize(title.to_s)}"
29
+ classes << "row-#{title.to_s.parameterize(separator: "_")}"
30
30
  end
31
- options[:class] = classes.join(' ')
31
+ options[:class] = classes.join(" ")
32
32
 
33
33
  @table << tr(options) do
34
34
  th do
@@ -45,7 +45,7 @@ module ActiveAdmin
45
45
  protected
46
46
 
47
47
  def default_id_for_prefix
48
- 'attributes_table'
48
+ "attributes_table"
49
49
  end
50
50
 
51
51
  # Build Colgroups
@@ -75,7 +75,7 @@ module ActiveAdmin
75
75
  end
76
76
 
77
77
  def empty_value
78
- span I18n.t('active_admin.empty'), class: "empty"
78
+ span I18n.t("active_admin.empty"), class: "empty"
79
79
  end
80
80
 
81
81
  def content_for(record, attr)
@@ -5,7 +5,7 @@ module ActiveAdmin
5
5
  builder_method :blank_slate
6
6
 
7
7
  def default_class_name
8
- 'blank_slate_container'
8
+ "blank_slate_container"
9
9
  end
10
10
 
11
11
  def build(content)
@@ -35,30 +35,30 @@ module ActiveAdmin
35
35
  super(options)
36
36
  end
37
37
 
38
- def item(*args)
38
+ def item(*args, **kwargs)
39
39
  within @menu do
40
- li link_to(*args)
40
+ li link_to(*args, **kwargs)
41
41
  end
42
42
  end
43
43
 
44
44
  private
45
45
 
46
46
  def build_button(name, button_options)
47
- button_options[:class] ||= ''
48
- button_options[:class] << ' dropdown_menu_button'
47
+ button_options[:class] ||= ""
48
+ button_options[:class] << " dropdown_menu_button"
49
49
 
50
- button_options[:href] = '#'
50
+ button_options[:href] = "#"
51
51
 
52
52
  a name, button_options
53
53
  end
54
54
 
55
55
  def build_menu(options)
56
- options[:class] ||= ''
57
- options[:class] << ' dropdown_menu_list'
56
+ options[:class] ||= ""
57
+ options[:class] << " dropdown_menu_list"
58
58
 
59
59
  menu_list = nil
60
60
 
61
- div class: 'dropdown_menu_list_wrapper' do
61
+ div class: "dropdown_menu_list_wrapper" do
62
62
  menu_list = ul(options)
63
63
  end
64
64
 
@@ -1,4 +1,4 @@
1
- require 'active_admin/helpers/collection'
1
+ require "active_admin/helpers/collection"
2
2
 
3
3
  module ActiveAdmin
4
4
  module Views
@@ -15,7 +15,7 @@ module ActiveAdmin
15
15
  end
16
16
 
17
17
  def tag_name
18
- 'ul'
18
+ "ul"
19
19
  end
20
20
 
21
21
  # Builds the links for presenting different index views to the user
@@ -37,7 +37,7 @@ module ActiveAdmin
37
37
  def build_index_list(index_class)
38
38
  li class: classes_for_index(index_class) do
39
39
  params = request.query_parameters.except :page, :commit, :format
40
- url_with_params = url_for(params.merge(as: index_class.index_name.to_sym))
40
+ url_with_params = url_for(**params.merge(as: index_class.index_name.to_sym).symbolize_keys)
41
41
 
42
42
  a href: url_with_params, class: "table_tools_button" do
43
43
  name = index_class.index_name
@@ -25,7 +25,7 @@ module ActiveAdmin
25
25
  end
26
26
 
27
27
  def tag_name
28
- 'ul'
28
+ "ul"
29
29
  end
30
30
  end
31
31
  end
@@ -18,7 +18,7 @@ module ActiveAdmin
18
18
  add_class "current" if item.current? assigns[:current_tab]
19
19
 
20
20
  if url
21
- text_node link_to label, url, item.html_options
21
+ text_node link_to label, url, **item.html_options
22
22
  else
23
23
  span label, item.html_options
24
24
  end
@@ -30,7 +30,7 @@ module ActiveAdmin
30
30
  end
31
31
 
32
32
  def tag_name
33
- 'li'
33
+ "li"
34
34
  end
35
35
 
36
36
  # Sorts by priority first, then alphabetically by label if needed.
@@ -44,14 +44,14 @@ module ActiveAdmin
44
44
  end
45
45
 
46
46
  def to_s
47
- visible? ? super : ''
47
+ visible? ? super : ""
48
48
  end
49
49
 
50
50
  private
51
51
 
52
52
  # URL is not nil, empty, or '#'
53
53
  def real_url?
54
- url && url.present? && url != '#'
54
+ url && url.present? && url != "#"
55
55
  end
56
56
  end
57
57
  end
@@ -1,5 +1,5 @@
1
- require 'active_admin/helpers/collection'
2
- require 'active_admin/view_helpers/download_format_links_helper'
1
+ require "active_admin/helpers/collection"
2
+ require "active_admin/view_helpers/download_format_links_helper"
3
3
 
4
4
  module ActiveAdmin
5
5
  module Views
@@ -38,12 +38,12 @@ module ActiveAdmin
38
38
  # download_links => Download links override (false or [:csv, :pdf])
39
39
  #
40
40
  def build(collection, options = {})
41
- @collection = collection
42
- @params = options.delete(:params)
43
- @param_name = options.delete(:param_name)
41
+ @collection = collection
42
+ @params = options.delete(:params)
43
+ @param_name = options.delete(:param_name)
44
44
  @download_links = options.delete(:download_links)
45
- @display_total = options.delete(:pagination_total) { true }
46
- @per_page = options.delete(:per_page)
45
+ @display_total = options.delete(:pagination_total) { true }
46
+ @per_page = options.delete(:per_page)
47
47
 
48
48
  unless collection.respond_to?(:total_pages)
49
49
  raise(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.")
@@ -92,22 +92,22 @@ module ActiveAdmin
92
92
  end
93
93
 
94
94
  def build_pagination
95
- options = { theme: 'active_admin' }
96
- options[:params] = @params if @params
95
+ options = { theme: @display_total ? "active_admin" : "active_admin_countless" }
96
+ options[:params] = @params if @params
97
97
  options[:param_name] = @param_name if @param_name
98
98
 
99
- if !@display_total && collection.respond_to?(:offset)
99
+ if !@display_total
100
100
  # The #paginate method in kaminari will query the resource with a
101
101
  # count(*) to determine how many pages there should be unless
102
102
  # you pass in the :total_pages option. We issue a query to determine
103
103
  # if there is another page or not, but the limit/offset make this
104
104
  # query fast.
105
- offset = collection.offset(collection.current_page * @per_page.to_i).limit(1).count
105
+ offset = collection.offset(collection.current_page * collection.limit_value).limit(1).count
106
106
  options[:total_pages] = collection.current_page + offset
107
107
  options[:right] = 0
108
108
  end
109
109
 
110
- text_node paginate collection, options
110
+ text_node paginate collection, **options
111
111
  end
112
112
 
113
113
  include ::ActiveAdmin::Helpers::Collection
@@ -116,27 +116,28 @@ module ActiveAdmin
116
116
  # modified from will_paginate
117
117
  def page_entries_info(options = {})
118
118
  if options[:entry_name]
119
- entry_name = options[:entry_name]
119
+ entry_name = options[:entry_name]
120
120
  entries_name = options[:entries_name] || entry_name.pluralize
121
121
  elsif collection_is_empty?
122
- entry_name = I18n.t "active_admin.pagination.entry", count: 1, default: 'entry'
123
- entries_name = I18n.t "active_admin.pagination.entry", count: 2, default: 'entries'
122
+ entry_name = I18n.t "active_admin.pagination.entry", count: 1, default: "entry"
123
+ entries_name = I18n.t "active_admin.pagination.entry", count: 2, default: "entries"
124
124
  else
125
125
  key = "activerecord.models." + collection.first.class.model_name.i18n_key.to_s
126
- entry_name = I18n.translate key, count: 1, default: collection.first.class.name.underscore.sub('_', ' ')
126
+
127
+ entry_name = I18n.translate key, count: 1, default: collection.first.class.name.underscore.sub("_", " ")
127
128
  entries_name = I18n.translate key, count: collection.size, default: entry_name.pluralize
128
129
  end
129
130
 
130
131
  if @display_total
131
132
  if collection.total_pages < 2
132
133
  case collection_size
133
- when 0; I18n.t("active_admin.pagination.empty", model: entries_name)
134
- when 1; I18n.t("active_admin.pagination.one", model: entry_name)
135
- else; I18n.t("active_admin.pagination.one_page", model: entries_name, n: collection.total_count)
134
+ when 0; I18n.t("active_admin.pagination.empty", model: entries_name)
135
+ when 1; I18n.t("active_admin.pagination.one", model: entry_name)
136
+ else; I18n.t("active_admin.pagination.one_page", model: entries_name, n: collection.total_count)
136
137
  end
137
138
  else
138
139
  offset = (collection.current_page - 1) * collection.limit_value
139
- total = collection.total_count
140
+ total = collection.total_count
140
141
  I18n.t "active_admin.pagination.multiple",
141
142
  model: entries_name,
142
143
  total: total,