activeadmin 2.4.0 → 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 (183) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +192 -30
  3. data/CONTRIBUTING.md +42 -62
  4. data/README.md +4 -4
  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/_header.scss +40 -8
  8. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  9. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  10. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  11. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  12. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +8 -0
  13. data/app/assets/stylesheets/active_admin/print.scss +2 -2
  14. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  15. data/app/javascript/active_admin/base.js +28 -0
  16. data/app/{assets/javascripts/active_admin/lib/batch_actions.es6 → javascript/active_admin/initializers/batch-actions.js} +4 -2
  17. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  18. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  19. data/app/javascript/active_admin/initializers/filters.js +10 -0
  20. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  21. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  22. data/app/{assets/javascripts/active_admin/lib/checkbox-toggler.es6 → javascript/active_admin/lib/checkbox-toggler.js} +5 -5
  23. data/app/{assets/javascripts/active_admin/lib/dropdown-menu.es6 → javascript/active_admin/lib/dropdown-menu.js} +3 -10
  24. data/app/javascript/active_admin/lib/filters.js +39 -0
  25. data/app/{assets/javascripts/active_admin/lib/modal_dialog.es6 → javascript/active_admin/lib/modal-dialog.js} +10 -8
  26. data/app/javascript/active_admin/lib/per-page.js +38 -0
  27. data/app/{assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 → javascript/active_admin/lib/table-checkbox-toggler.js} +5 -3
  28. data/app/javascript/active_admin/lib/utils.js +40 -0
  29. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  30. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  31. data/app/views/layouts/active_admin_logged_out.html.erb +15 -5
  32. data/config/locales/ar.yml +6 -6
  33. data/config/locales/az.yml +138 -0
  34. data/config/locales/en-CA.yml +3 -3
  35. data/config/locales/en-GB.yml +3 -3
  36. data/config/locales/en.yml +3 -3
  37. data/config/locales/es-MX.yml +2 -1
  38. data/config/locales/es.yml +5 -5
  39. data/config/locales/fr.yml +4 -4
  40. data/config/locales/it.yml +18 -0
  41. data/config/locales/ja.yml +3 -3
  42. data/config/locales/lv.yml +2 -2
  43. data/config/locales/vi.yml +6 -5
  44. data/docs/0-installation.md +26 -2
  45. data/docs/1-general-configuration.md +20 -0
  46. data/docs/11-decorators.md +16 -5
  47. data/docs/2-resource-customization.md +10 -1
  48. data/docs/3-index-pages.md +1 -1
  49. data/docs/5-forms.md +6 -1
  50. data/docs/6-show-pages.md +12 -0
  51. data/docs/9-batch-actions.md +2 -2
  52. data/docs/Gemfile +2 -2
  53. data/docs/Gemfile.lock +124 -113
  54. data/docs/_includes/top-menu.html +1 -1
  55. data/docs/documentation.md +1 -1
  56. data/docs/index.html +6 -6
  57. data/lib/active_admin/application.rb +14 -14
  58. data/lib/active_admin/application_settings.rb +3 -3
  59. data/lib/active_admin/authorization_adapter.rb +3 -3
  60. data/lib/active_admin/base_controller/authorization.rb +13 -12
  61. data/lib/active_admin/base_controller.rb +4 -4
  62. data/lib/active_admin/batch_actions/controller.rb +3 -3
  63. data/lib/active_admin/batch_actions/resource_extension.rb +9 -8
  64. data/lib/active_admin/batch_actions/views/batch_action_form.rb +3 -3
  65. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +6 -6
  66. data/lib/active_admin/batch_actions/views/selection_cells.rb +3 -3
  67. data/lib/active_admin/cancan_adapter.rb +1 -1
  68. data/lib/active_admin/collection_decorator.rb +31 -0
  69. data/lib/active_admin/csv_builder.rb +11 -7
  70. data/lib/active_admin/dependency.rb +11 -11
  71. data/lib/active_admin/devise.rb +5 -5
  72. data/lib/active_admin/dsl.rb +1 -1
  73. data/lib/active_admin/dynamic_settings_node.rb +2 -2
  74. data/lib/active_admin/engine.rb +10 -8
  75. data/lib/active_admin/error.rb +0 -2
  76. data/lib/active_admin/filters/active.rb +1 -1
  77. data/lib/active_admin/filters/active_filter.rb +6 -7
  78. data/lib/active_admin/filters/active_sidebar.rb +5 -5
  79. data/lib/active_admin/filters/forms.rb +6 -6
  80. data/lib/active_admin/filters/formtastic_addons.rb +1 -6
  81. data/lib/active_admin/filters/resource_extension.rb +1 -1
  82. data/lib/active_admin/filters.rb +7 -7
  83. data/lib/active_admin/form_builder.rb +24 -20
  84. data/lib/active_admin/generators/boilerplate.rb +1 -1
  85. data/lib/active_admin/helpers/optional_display.rb +2 -2
  86. data/lib/active_admin/inputs/datepicker_input.rb +1 -1
  87. data/lib/active_admin/inputs/filters/base/search_method_select.rb +4 -4
  88. data/lib/active_admin/inputs/filters/base.rb +1 -1
  89. data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
  90. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
  91. data/lib/active_admin/inputs/filters/date_range_input.rb +15 -12
  92. data/lib/active_admin/inputs/filters/select_input.rb +2 -2
  93. data/lib/active_admin/localizers/resource_localizer.rb +3 -3
  94. data/lib/active_admin/localizers.rb +1 -1
  95. data/lib/active_admin/menu.rb +6 -3
  96. data/lib/active_admin/menu_item.rb +7 -7
  97. data/lib/active_admin/namespace.rb +12 -12
  98. data/lib/active_admin/namespace_settings.rb +8 -5
  99. data/lib/active_admin/order_clause.rb +1 -1
  100. data/lib/active_admin/orm/active_record/comments/comment.rb +3 -3
  101. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +19 -19
  102. data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
  103. data/lib/active_admin/orm/active_record/comments.rb +19 -19
  104. data/lib/active_admin/orm/active_record.rb +1 -1
  105. data/lib/active_admin/page.rb +1 -1
  106. data/lib/active_admin/pundit_adapter.rb +5 -5
  107. data/lib/active_admin/resource/action_items.rb +5 -5
  108. data/lib/active_admin/resource/attributes.rb +1 -1
  109. data/lib/active_admin/resource/belongs_to.rb +2 -2
  110. data/lib/active_admin/resource/controllers.rb +1 -1
  111. data/lib/active_admin/resource/menu.rb +4 -4
  112. data/lib/active_admin/resource/naming.rb +5 -5
  113. data/lib/active_admin/resource/routes.rb +5 -7
  114. data/lib/active_admin/resource/scope_to.rb +7 -7
  115. data/lib/active_admin/resource/sidebars.rb +1 -1
  116. data/lib/active_admin/resource.rb +18 -18
  117. data/lib/active_admin/resource_controller/data_access.rb +1 -1
  118. data/lib/active_admin/resource_controller/decorators.rb +6 -28
  119. data/lib/active_admin/resource_controller/polymorphic_routes.rb +3 -2
  120. data/lib/active_admin/resource_controller/streaming.rb +7 -6
  121. data/lib/active_admin/resource_controller.rb +12 -11
  122. data/lib/active_admin/resource_dsl.rb +5 -5
  123. data/lib/active_admin/scope.rb +6 -6
  124. data/lib/active_admin/version.rb +1 -1
  125. data/lib/active_admin/view_factory.rb +17 -17
  126. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +3 -3
  127. data/lib/active_admin/view_helpers/display_helper.rb +5 -5
  128. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -1
  129. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  130. data/lib/active_admin/view_helpers.rb +1 -1
  131. data/lib/active_admin/views/components/active_admin_form.rb +5 -5
  132. data/lib/active_admin/views/components/attributes_table.rb +5 -5
  133. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  134. data/lib/active_admin/views/components/dropdown_menu.rb +8 -8
  135. data/lib/active_admin/views/components/index_list.rb +3 -3
  136. data/lib/active_admin/views/components/menu.rb +1 -1
  137. data/lib/active_admin/views/components/menu_item.rb +4 -4
  138. data/lib/active_admin/views/components/paginated_collection.rb +19 -18
  139. data/lib/active_admin/views/components/panel.rb +1 -1
  140. data/lib/active_admin/views/components/scopes.rb +7 -5
  141. data/lib/active_admin/views/components/site_title.rb +1 -1
  142. data/lib/active_admin/views/components/status_tag.rb +11 -11
  143. data/lib/active_admin/views/components/table_for.rb +18 -17
  144. data/lib/active_admin/views/components/tabs.rb +3 -3
  145. data/lib/active_admin/views/footer.rb +2 -1
  146. data/lib/active_admin/views/header.rb +2 -2
  147. data/lib/active_admin/views/index_as_blog.rb +1 -1
  148. data/lib/active_admin/views/index_as_grid.rb +1 -1
  149. data/lib/active_admin/views/index_as_table.rb +16 -16
  150. data/lib/active_admin/views/pages/base.rb +15 -11
  151. data/lib/active_admin/views/pages/index.rb +15 -13
  152. data/lib/active_admin/views/tabbed_navigation.rb +2 -2
  153. data/lib/active_admin/views/title_bar.rb +1 -1
  154. data/lib/active_admin/views.rb +1 -1
  155. data/lib/active_admin.rb +61 -63
  156. data/lib/activeadmin.rb +1 -1
  157. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  158. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  159. data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
  160. data/lib/generators/active_admin/install/install_generator.rb +14 -8
  161. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +9 -2
  162. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  163. data/lib/generators/active_admin/resource/resource_generator.rb +3 -3
  164. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  165. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  166. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  167. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  168. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
  169. data/lib/ransack_ext.rb +8 -8
  170. metadata +46 -84
  171. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  172. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  173. data/app/assets/images/active_admin/orderable.png +0 -0
  174. data/app/assets/javascripts/active_admin/base.es6 +0 -23
  175. data/app/assets/javascripts/active_admin/initializers/filters.es6 +0 -45
  176. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +0 -41
  177. data/app/assets/javascripts/active_admin/lib/per_page.es6 +0 -47
  178. /data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
  179. /data/app/{assets/javascripts/active_admin/ext/jquery-ui.es6 → javascript/active_admin/ext/jquery-ui.js} +0 -0
  180. /data/app/{assets/javascripts/active_admin/ext/jquery.es6 → javascript/active_admin/ext/jquery.js} +0 -0
  181. /data/app/{assets/javascripts/active_admin/initializers/datepicker.es6 → javascript/active_admin/initializers/datepicker.js} +0 -0
  182. /data/app/{assets/javascripts/active_admin/lib/has_many.es6 → javascript/active_admin/initializers/has-many.js} +0 -0
  183. /data/app/{assets/javascripts/active_admin/initializers/tabs.es6 → javascript/active_admin/initializers/tabs.js} +0 -0
@@ -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,8 +92,8 @@ module ActiveAdmin
92
92
  end
93
93
 
94
94
  def build_pagination
95
- options = { theme: @display_total ? 'active_admin' : 'active_admin_countless' }
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
99
  if !@display_total
@@ -107,7 +107,7 @@ module ActiveAdmin
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,
@@ -29,7 +29,7 @@ module ActiveAdmin
29
29
  def header_action(*args)
30
30
  action = args[0]
31
31
 
32
- @title << div(class: 'header_action') do
32
+ @title << div(class: "header_action") do
33
33
  action
34
34
  end
35
35
  end
@@ -1,5 +1,5 @@
1
- require 'active_admin/helpers/collection'
2
- require 'active_admin/view_helpers/method_or_proc_helper'
1
+ require "active_admin/helpers/collection"
2
+ require "active_admin/view_helpers/method_or_proc_helper"
3
3
 
4
4
  module ActiveAdmin
5
5
  module Views
@@ -17,7 +17,7 @@ module ActiveAdmin
17
17
  end
18
18
 
19
19
  def tag_name
20
- 'div'
20
+ "div"
21
21
  end
22
22
 
23
23
  def build(scopes, options = {})
@@ -26,6 +26,8 @@ module ActiveAdmin
26
26
  group_scopes.each do |scope|
27
27
  build_scope(scope, options) if call_method_or_exec_proc(scope.display_if_block)
28
28
  end
29
+
30
+ nil
29
31
  end
30
32
  end
31
33
  end
@@ -36,9 +38,9 @@ module ActiveAdmin
36
38
  li class: classes_for_scope(scope) do
37
39
  params = request.query_parameters.except :page, :scope, :commit, :format
38
40
 
39
- a href: url_for(scope: scope.id, params: params), class: 'table_tools_button' do
41
+ a href: url_for(scope: scope.id, params: params), class: "table_tools_button" do
40
42
  text_node scope_name(scope)
41
- span class: 'count' do
43
+ span class: "count" do
42
44
  "(#{get_scope_count(scope)})"
43
45
  end if options[:scope_count] && scope.show_count
44
46
  end
@@ -4,7 +4,7 @@ module ActiveAdmin
4
4
  class SiteTitle < Component
5
5
 
6
6
  def tag_name
7
- 'h1'
7
+ "h1"
8
8
  end
9
9
 
10
10
  def build(namespace)
@@ -5,11 +5,11 @@ module ActiveAdmin
5
5
  builder_method :status_tag
6
6
 
7
7
  def tag_name
8
- 'span'
8
+ "span"
9
9
  end
10
10
 
11
11
  def default_class_name
12
- 'status_tag'
12
+ "status_tag"
13
13
  end
14
14
 
15
15
  # @overload status_tag(status, options = {})
@@ -49,12 +49,12 @@ module ActiveAdmin
49
49
 
50
50
  def convert_to_boolean_status(status)
51
51
  case status
52
- when true, 'true'
53
- 'Yes'
54
- when false, 'false'
55
- 'No'
52
+ when true, "true"
53
+ "Yes"
54
+ when false, "false"
55
+ "No"
56
56
  when nil
57
- 'Unset'
57
+ "Unset"
58
58
  else
59
59
  status
60
60
  end
@@ -62,12 +62,12 @@ module ActiveAdmin
62
62
 
63
63
  def status_to_class(status)
64
64
  case status
65
- when 'Unset'
66
- 'unset no'
65
+ when "Unset"
66
+ "unset no"
67
67
  when String, Symbol
68
- status.to_s.titleize.gsub(/\s/, '').underscore
68
+ status.to_s.titleize.gsub(/\s/, "").underscore
69
69
  else
70
- ''
70
+ ""
71
71
  end
72
72
  end
73
73
  end
@@ -4,17 +4,18 @@ module ActiveAdmin
4
4
  builder_method :table_for
5
5
 
6
6
  def tag_name
7
- 'table'
7
+ "table"
8
8
  end
9
9
 
10
10
  def build(obj, *attrs)
11
- options = attrs.extract_options!
12
- @sortable = options.delete(:sortable)
13
- @collection = obj.respond_to?(:each) && !obj.is_a?(Hash) ? obj : [obj]
11
+ options = attrs.extract_options!
12
+ @sortable = options.delete(:sortable)
13
+ @collection = obj.respond_to?(:each) && !obj.is_a?(Hash) ? obj : [obj]
14
14
  @resource_class = options.delete(:i18n)
15
15
  @resource_class ||= @collection.klass if @collection.respond_to? :klass
16
- @columns = []
17
- @row_class = options.delete(:row_class)
16
+
17
+ @columns = []
18
+ @row_class = options.delete(:row_class)
18
19
 
19
20
  build_table
20
21
  super(options)
@@ -28,7 +29,7 @@ module ActiveAdmin
28
29
  def column(*args, &block)
29
30
  options = default_options.merge(args.extract_options!)
30
31
  title = args[0]
31
- data = args[1] || args[0]
32
+ data = args[1] || args[0]
32
33
 
33
34
  col = Column.new(title, data, @resource_class, options, &block)
34
35
  @columns << col
@@ -64,12 +65,12 @@ module ActiveAdmin
64
65
  end
65
66
 
66
67
  def build_table_header(col)
67
- classes = Arbre::HTML::ClassList.new
68
+ classes = Arbre::HTML::ClassList.new
68
69
  sort_key = sortable? && col.sortable? && col.sort_key
69
- params = request.query_parameters.except :page, :order, :commit, :format
70
+ params = request.query_parameters.except :page, :order, :commit, :format
70
71
 
71
- classes << 'sortable' if sort_key
72
- classes << "sorted-#{current_sort[1]}" if sort_key && current_sort[0] == sort_key
72
+ classes << "sortable" if sort_key
73
+ classes << "sorted-#{current_sort[1]}" if sort_key && current_sort[0] == sort_key
73
74
  classes << col.html_class
74
75
 
75
76
  if sort_key
@@ -85,13 +86,13 @@ module ActiveAdmin
85
86
  @tbody = tbody do
86
87
  # Build enough rows for our collection
87
88
  @collection.each do |elem|
88
- classes = [helpers.cycle('odd', 'even')]
89
+ classes = [helpers.cycle("odd", "even")]
89
90
 
90
91
  if @row_class
91
92
  classes << @row_class.call(elem)
92
93
  end
93
94
 
94
- tr(class: classes.flatten.join(' '), id: dom_id_for(elem))
95
+ tr(class: classes.flatten.join(" "), id: dom_id_for(elem))
95
96
  end
96
97
  end
97
98
  end
@@ -125,8 +126,8 @@ module ActiveAdmin
125
126
  # 'desc' it will return 'asc'
126
127
  def order_for_sort_key(sort_key)
127
128
  current_key, current_order = current_sort
128
- return 'desc' unless current_key == sort_key
129
- current_order == 'desc' ? 'asc' : 'desc'
129
+ return "desc" unless current_key == sort_key
130
+ current_order == "desc" ? "asc" : "desc"
130
131
  end
131
132
 
132
133
  def default_options
@@ -137,7 +138,7 @@ module ActiveAdmin
137
138
 
138
139
  class Column
139
140
 
140
- attr_accessor :title, :data , :html_class
141
+ attr_accessor :title, :data, :html_class
141
142
 
142
143
  def initialize(*args, &block)
143
144
  @options = args.extract_options!
@@ -149,7 +150,7 @@ module ActiveAdmin
149
150
  elsif @title.present?
150
151
  html_classes << "col-#{@title.to_s.parameterize(separator: "_")}"
151
152
  end
152
- @html_class = html_classes.join(' ')
153
+ @html_class = html_classes.join(" ")
153
154
  @data = args[1] || args[0]
154
155
  @data = block if block
155
156
  @resource_class = args[2]
@@ -10,8 +10,8 @@ module ActiveAdmin
10
10
  end
11
11
 
12
12
  def build(&block)
13
- @menu = ul(class: 'nav nav-tabs', role: "tablist")
14
- @tabs_content = div(class: 'tab-content')
13
+ @menu = ul(class: "nav nav-tabs", role: "tablist")
14
+ @tabs_content = div(class: "tab-content")
15
15
  end
16
16
 
17
17
  def build_menu_item(title, options, &block)
@@ -32,7 +32,7 @@ module ActiveAdmin
32
32
 
33
33
  def fragmentize(string)
34
34
  result = string.parameterize
35
- result = URI.encode(string) if result.blank?
35
+ result = CGI.escape(string) if result.blank?
36
36
  result
37
37
  end
38
38
  end
@@ -20,7 +20,8 @@ module ActiveAdmin
20
20
  end
21
21
 
22
22
  def powered_by_message
23
- I18n.t('active_admin.powered_by',
23
+ I18n.t(
24
+ "active_admin.powered_by",
24
25
  active_admin: link_to("Active Admin", "https://activeadmin.info"),
25
26
  version: ActiveAdmin::VERSION).html_safe
26
27
  end
@@ -10,8 +10,8 @@ module ActiveAdmin
10
10
  @utility_menu = @namespace.fetch_menu(:utility_navigation)
11
11
 
12
12
  site_title @namespace
13
- global_navigation @menu, class: 'header-item tabs'
14
- utility_navigation @utility_menu, id: "utility_nav", class: 'header-item tabs'
13
+ global_navigation @menu, class: "header-item tabs"
14
+ utility_navigation @utility_menu, id: "utility_nav", class: "header-item tabs"
15
15
  end
16
16
 
17
17
  end
@@ -135,7 +135,7 @@ module ActiveAdmin
135
135
 
136
136
  def build_body(post)
137
137
  if @body
138
- div class: 'content' do
138
+ div class: "content" do
139
139
  render_method_on_post_or_call_proc post, @body
140
140
  end
141
141
  end
@@ -68,7 +68,7 @@ module ActiveAdmin
68
68
  end
69
69
 
70
70
  def build_empty_cell
71
- td '&nbsp;'.html_safe
71
+ td "&nbsp;".html_safe
72
72
  end
73
73
 
74
74
  def default_number_of_columns
@@ -278,13 +278,13 @@ module ActiveAdmin
278
278
  # Display a column for checkbox
279
279
  def selectable_column
280
280
  return unless active_admin_config.batch_actions.any?
281
- column resource_selection_toggle_cell, class: 'col-selectable', sortable: false do |resource|
281
+ column resource_selection_toggle_cell, class: "col-selectable", sortable: false do |resource|
282
282
  resource_selection_cell resource
283
283
  end
284
284
  end
285
285
 
286
286
  def index_column(start_value = 1)
287
- column '#', class: 'col-index', sortable: false do |resource|
287
+ column "#", class: "col-index", sortable: false do |resource|
288
288
  @collection.offset_value + @collection.index(resource) + start_value
289
289
  end
290
290
  end
@@ -293,9 +293,9 @@ module ActiveAdmin
293
293
  def id_column
294
294
  raise "#{resource_class.name} has no primary_key!" unless resource_class.primary_key
295
295
  column(resource_class.human_attribute_name(resource_class.primary_key), sortable: resource_class.primary_key) do |resource|
296
- if controller.action_methods.include?('show')
296
+ if controller.action_methods.include?("show")
297
297
  link_to resource.id, resource_path(resource), class: "resource_id_link"
298
- elsif controller.action_methods.include?('edit')
298
+ elsif controller.action_methods.include?("edit")
299
299
  link_to resource.id, edit_resource_path(resource), class: "resource_id_link"
300
300
  else
301
301
  resource.id
@@ -304,7 +304,7 @@ module ActiveAdmin
304
304
  end
305
305
 
306
306
  def default_actions
307
- raise '`default_actions` is no longer provided in ActiveAdmin 1.x. Use `actions` instead.'
307
+ raise "`default_actions` is no longer provided in ActiveAdmin 1.x. Use `actions` instead."
308
308
  end
309
309
 
310
310
  # Add links to perform actions.
@@ -344,12 +344,12 @@ module ActiveAdmin
344
344
  #
345
345
  # ```
346
346
  def actions(options = {}, &block)
347
- name = options.delete(:name) { '' }
348
- defaults = options.delete(:defaults) { true }
349
- dropdown = options.delete(:dropdown) { false }
350
- dropdown_name = options.delete(:dropdown_name) { I18n.t 'active_admin.dropdown_actions.button_label', default: 'Actions' }
347
+ name = options.delete(:name) { "" }
348
+ defaults = options.delete(:defaults) { true }
349
+ dropdown = options.delete(:dropdown) { false }
350
+ dropdown_name = options.delete(:dropdown_name) { I18n.t "active_admin.dropdown_actions.button_label", default: "Actions" }
351
351
 
352
- options[:class] ||= 'col-actions'
352
+ options[:class] ||= "col-actions"
353
353
 
354
354
  column name, options do |resource|
355
355
  if dropdown
@@ -373,23 +373,23 @@ module ActiveAdmin
373
373
 
374
374
  def defaults(resource, options = {})
375
375
  localizer = ActiveAdmin::Localizers.resource(active_admin_config)
376
- if controller.action_methods.include?('show') && authorized?(ActiveAdmin::Auth::READ, resource)
376
+ if controller.action_methods.include?("show") && authorized?(ActiveAdmin::Auth::READ, resource)
377
377
  item localizer.t(:view), resource_path(resource), class: "view_link #{options[:css_class]}", title: localizer.t(:view)
378
378
  end
379
- if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
379
+ if controller.action_methods.include?("edit") && authorized?(ActiveAdmin::Auth::UPDATE, resource)
380
380
  item localizer.t(:edit), edit_resource_path(resource), class: "edit_link #{options[:css_class]}", title: localizer.t(:edit)
381
381
  end
382
- if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
382
+ if controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, resource)
383
383
  item localizer.t(:delete), resource_path(resource), class: "delete_link #{options[:css_class]}", title: localizer.t(:delete),
384
- method: :delete, data: { confirm: localizer.t(:delete_confirmation) }
384
+ method: :delete, data: { confirm: localizer.t(:delete_confirmation) }
385
385
  end
386
386
  end
387
387
 
388
388
  class TableActions < ActiveAdmin::Component
389
389
  builder_method :table_actions
390
390
 
391
- def item *args
392
- text_node link_to *args
391
+ def item *args, **kwargs
392
+ text_node link_to(*args, **kwargs)
393
393
  end
394
394
  end
395
395
  end # IndexTableFor
@@ -15,7 +15,7 @@ module ActiveAdmin
15
15
  end
16
16
 
17
17
  def main_content
18
- I18n.t('active_admin.main_content', model: title).html_safe
18
+ I18n.t("active_admin.main_content", model: title).html_safe
19
19
  end
20
20
 
21
21
  private
@@ -29,15 +29,17 @@ module ActiveAdmin
29
29
  text_node(active_admin_namespace.head)
30
30
 
31
31
  active_admin_application.stylesheets.each do |style, options|
32
- text_node stylesheet_link_tag(style, options).html_safe
32
+ stylesheet_tag = active_admin_namespace.use_webpacker ? stylesheet_pack_tag(style, **options) : stylesheet_link_tag(style, **options)
33
+ text_node(stylesheet_tag.html_safe) if stylesheet_tag
33
34
  end
34
35
 
35
36
  active_admin_namespace.meta_tags.each do |name, content|
36
- text_node(tag(:meta, name: name, content: content))
37
+ text_node(meta(name: name, content: content))
37
38
  end
38
39
 
39
40
  active_admin_application.javascripts.each do |path|
40
- text_node(javascript_include_tag(path))
41
+ javascript_tag = active_admin_namespace.use_webpacker ? javascript_pack_tag(path) : javascript_include_tag(path)
42
+ text_node(javascript_tag)
41
43
  end
42
44
 
43
45
  if active_admin_namespace.favicon
@@ -63,9 +65,9 @@ module ActiveAdmin
63
65
  def body_classes
64
66
  Arbre::HTML::ClassList.new [
65
67
  params[:action],
66
- params[:controller].tr('/', '_'),
67
- 'active_admin', 'logged_in',
68
- active_admin_namespace.name.to_s + '_namespace'
68
+ params[:controller].tr("/", "_"),
69
+ "active_admin", "logged_in",
70
+ active_admin_namespace.name.to_s + "_namespace"
69
71
  ]
70
72
  end
71
73
 
@@ -79,14 +81,16 @@ module ActiveAdmin
79
81
  build_flash_messages
80
82
  div id: "active_admin_content", class: (skip_sidebar? ? "without_sidebar" : "with_sidebar") do
81
83
  build_main_content_wrapper
82
- sidebar sidebar_sections_for_action, id: 'sidebar' unless skip_sidebar?
84
+ sidebar sidebar_sections_for_action, id: "sidebar" unless skip_sidebar?
83
85
  end
84
86
  end
85
87
 
86
88
  def build_flash_messages
87
- div class: 'flashes' do
88
- flash_messages.each do |type, message|
89
- div message, class: "flash flash_#{type}"
89
+ div class: "flashes" do
90
+ flash_messages.each do |type, messages|
91
+ [*messages].each do |message|
92
+ div message, class: "flash flash_#{type}"
93
+ end
90
94
  end
91
95
  end
92
96
  end
@@ -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
@@ -111,7 +111,7 @@ module ActiveAdmin
111
111
 
112
112
  def render_blank_slate
113
113
  blank_slate_content = I18n.t("active_admin.blank_slate.content", resource_name: active_admin_config.plural_resource_label)
114
- if controller.action_methods.include?('new') && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
114
+ if controller.action_methods.include?("new") && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
115
115
  blank_slate_content = [blank_slate_content, blank_slate_link].compact.join(" ")
116
116
  end
117
117
  insert_tag(view_factory.blank_slate, blank_slate_content)
@@ -124,18 +124,20 @@ module ActiveAdmin
124
124
 
125
125
  def render_index
126
126
  renderer_class = find_index_renderer_class(config[:as])
127
- paginator = config.fetch(:paginator, true)
128
- download_links = config.fetch(:download_links, active_admin_config.namespace.download_links)
127
+
128
+ paginator = config.fetch(:paginator, true)
129
+ download_links = config.fetch(:download_links, active_admin_config.namespace.download_links)
129
130
  pagination_total = config.fetch(:pagination_total, true)
130
- per_page = config.fetch(:per_page, active_admin_config.per_page)
131
-
132
- paginated_collection(collection, entry_name: active_admin_config.resource_label,
133
- entries_name: active_admin_config.plural_resource_label(count: collection_size),
134
- download_links: download_links,
135
- paginator: paginator,
136
- per_page: per_page,
137
- pagination_total: pagination_total) do
138
- div class: 'index_content' do
131
+ per_page = config.fetch(:per_page, active_admin_config.per_page)
132
+
133
+ paginated_collection(
134
+ collection, entry_name: active_admin_config.resource_label,
135
+ entries_name: active_admin_config.plural_resource_label(count: collection_size),
136
+ download_links: download_links,
137
+ paginator: paginator,
138
+ per_page: per_page,
139
+ pagination_total: pagination_total) do
140
+ div class: "index_content" do
139
141
  insert_tag(renderer_class, config, collection)
140
142
  end
141
143
  end