activeadmin 2.7.0 → 2.10.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 (214) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +166 -9
  3. data/CONTRIBUTING.md +7 -23
  4. data/README.md +3 -3
  5. data/app/assets/javascripts/active_admin/base.js +26 -21
  6. data/app/assets/stylesheets/active_admin/_base.scss +43 -37
  7. data/app/assets/stylesheets/active_admin/_forms.scss +3 -3
  8. data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
  9. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  10. data/app/javascript/active_admin/initializers/per-page.js +1 -1
  11. data/app/javascript/active_admin/lib/checkbox-toggler.js +3 -3
  12. data/app/javascript/active_admin/lib/dropdown-menu.js +1 -1
  13. data/app/javascript/active_admin/lib/modal-dialog.js +7 -7
  14. data/app/javascript/active_admin/lib/per-page.js +1 -1
  15. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +1 -1
  16. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  17. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  18. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  19. data/app/views/active_admin/page/index.html.arb +1 -0
  20. data/app/views/active_admin/resource/edit.html.arb +1 -0
  21. data/app/views/active_admin/resource/index.html.arb +1 -0
  22. data/app/views/active_admin/resource/new.html.arb +1 -0
  23. data/app/views/active_admin/resource/show.html.arb +1 -0
  24. data/app/views/layouts/active_admin.html.arb +1 -0
  25. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  26. data/config/locales/ar.yml +6 -6
  27. data/config/locales/es-MX.yml +2 -1
  28. data/config/locales/es.yml +2 -2
  29. data/config/locales/it.yml +18 -0
  30. data/config/locales/ja.yml +3 -3
  31. data/config/locales/ko.yml +1 -1
  32. data/config/locales/nl.yml +1 -1
  33. data/config/locales/ro.yml +3 -2
  34. data/docs/0-installation.md +1 -1
  35. data/docs/11-decorators.md +16 -5
  36. data/docs/5-forms.md +6 -1
  37. data/docs/6-show-pages.md +12 -0
  38. data/docs/8-custom-actions.md +1 -1
  39. data/docs/Gemfile +3 -2
  40. data/docs/Gemfile.lock +127 -93
  41. data/lib/active_admin/abstract_view_factory.rb +1 -0
  42. data/lib/active_admin/application.rb +17 -17
  43. data/lib/active_admin/application_settings.rb +4 -3
  44. data/lib/active_admin/asset_registration.rb +1 -0
  45. data/lib/active_admin/authorization_adapter.rb +4 -3
  46. data/lib/active_admin/base_controller/authorization.rb +14 -12
  47. data/lib/active_admin/base_controller/menu.rb +1 -0
  48. data/lib/active_admin/base_controller.rb +5 -5
  49. data/lib/active_admin/batch_actions/controller.rb +4 -3
  50. data/lib/active_admin/batch_actions/resource_extension.rb +10 -8
  51. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
  52. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
  53. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
  54. data/lib/active_admin/batch_actions.rb +1 -0
  55. data/lib/active_admin/callbacks.rb +1 -0
  56. data/lib/active_admin/cancan_adapter.rb +2 -1
  57. data/lib/active_admin/collection_decorator.rb +32 -0
  58. data/lib/active_admin/component.rb +1 -0
  59. data/lib/active_admin/controller_action.rb +1 -0
  60. data/lib/active_admin/csv_builder.rb +5 -4
  61. data/lib/active_admin/dependency.rb +13 -12
  62. data/lib/active_admin/deprecation.rb +1 -0
  63. data/lib/active_admin/devise.rb +6 -5
  64. data/lib/active_admin/dsl.rb +2 -1
  65. data/lib/active_admin/dynamic_setting.rb +1 -0
  66. data/lib/active_admin/dynamic_settings_node.rb +3 -2
  67. data/lib/active_admin/engine.rb +11 -8
  68. data/lib/active_admin/error.rb +1 -2
  69. data/lib/active_admin/filters/active.rb +2 -1
  70. data/lib/active_admin/filters/active_filter.rb +6 -6
  71. data/lib/active_admin/filters/active_sidebar.rb +4 -30
  72. data/lib/active_admin/filters/dsl.rb +1 -0
  73. data/lib/active_admin/filters/forms.rb +7 -6
  74. data/lib/active_admin/filters/formtastic_addons.rb +2 -6
  75. data/lib/active_admin/filters/resource_extension.rb +2 -1
  76. data/lib/active_admin/filters.rb +8 -7
  77. data/lib/active_admin/form_builder.rb +25 -20
  78. data/lib/active_admin/generators/boilerplate.rb +2 -1
  79. data/lib/active_admin/helpers/collection.rb +2 -0
  80. data/lib/active_admin/helpers/i18n.rb +1 -0
  81. data/lib/active_admin/helpers/optional_display.rb +3 -2
  82. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  83. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  84. data/lib/active_admin/inputs/datepicker_input.rb +2 -1
  85. data/lib/active_admin/inputs/filters/base/search_method_select.rb +5 -4
  86. data/lib/active_admin/inputs/filters/base.rb +2 -1
  87. data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
  88. data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
  89. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  90. data/lib/active_admin/inputs/filters/date_range_input.rb +1 -0
  91. data/lib/active_admin/inputs/filters/numeric_input.rb +1 -0
  92. data/lib/active_admin/inputs/filters/select_input.rb +3 -2
  93. data/lib/active_admin/inputs/filters/string_input.rb +1 -0
  94. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  95. data/lib/active_admin/inputs.rb +1 -0
  96. data/lib/active_admin/localizers/resource_localizer.rb +4 -3
  97. data/lib/active_admin/localizers.rb +2 -1
  98. data/lib/active_admin/menu.rb +2 -1
  99. data/lib/active_admin/menu_collection.rb +1 -0
  100. data/lib/active_admin/menu_item.rb +8 -7
  101. data/lib/active_admin/namespace.rb +14 -13
  102. data/lib/active_admin/namespace_settings.rb +6 -5
  103. data/lib/active_admin/order_clause.rb +2 -1
  104. data/lib/active_admin/orm/active_record/comments/comment.rb +4 -3
  105. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  106. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  107. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  108. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +20 -19
  109. data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
  110. data/lib/active_admin/orm/active_record/comments.rb +20 -19
  111. data/lib/active_admin/orm/active_record.rb +2 -1
  112. data/lib/active_admin/orm/mongoid.rb +1 -0
  113. data/lib/active_admin/page.rb +2 -1
  114. data/lib/active_admin/page_controller.rb +1 -0
  115. data/lib/active_admin/page_dsl.rb +1 -0
  116. data/lib/active_admin/page_presenter.rb +1 -0
  117. data/lib/active_admin/pundit_adapter.rb +6 -5
  118. data/lib/active_admin/resource/action_items.rb +6 -5
  119. data/lib/active_admin/resource/attributes.rb +2 -1
  120. data/lib/active_admin/resource/belongs_to.rb +3 -2
  121. data/lib/active_admin/resource/controllers.rb +2 -1
  122. data/lib/active_admin/resource/includes.rb +1 -0
  123. data/lib/active_admin/resource/menu.rb +5 -4
  124. data/lib/active_admin/resource/model.rb +1 -0
  125. data/lib/active_admin/resource/naming.rb +5 -4
  126. data/lib/active_admin/resource/ordering.rb +1 -0
  127. data/lib/active_admin/resource/page_presenters.rb +1 -0
  128. data/lib/active_admin/resource/pagination.rb +1 -0
  129. data/lib/active_admin/resource/routes.rb +6 -7
  130. data/lib/active_admin/resource/scope_to.rb +8 -7
  131. data/lib/active_admin/resource/scopes.rb +1 -0
  132. data/lib/active_admin/resource/sidebars.rb +2 -1
  133. data/lib/active_admin/resource.rb +18 -17
  134. data/lib/active_admin/resource_collection.rb +1 -0
  135. data/lib/active_admin/resource_controller/action_builder.rb +1 -0
  136. data/lib/active_admin/resource_controller/data_access.rb +4 -3
  137. data/lib/active_admin/resource_controller/decorators.rb +7 -28
  138. data/lib/active_admin/resource_controller/polymorphic_routes.rb +1 -0
  139. data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
  140. data/lib/active_admin/resource_controller/scoping.rb +1 -0
  141. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  142. data/lib/active_admin/resource_controller/streaming.rb +8 -6
  143. data/lib/active_admin/resource_controller.rb +13 -11
  144. data/lib/active_admin/resource_dsl.rb +11 -25
  145. data/lib/active_admin/router.rb +1 -0
  146. data/lib/active_admin/scope.rb +7 -6
  147. data/lib/active_admin/settings_node.rb +1 -0
  148. data/lib/active_admin/sidebar_section.rb +1 -0
  149. data/lib/active_admin/version.rb +2 -1
  150. data/lib/active_admin/view_factory.rb +18 -17
  151. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  152. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -0
  153. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  154. data/lib/active_admin/view_helpers/display_helper.rb +15 -7
  155. data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
  156. data/lib/active_admin/view_helpers/fields_for.rb +3 -2
  157. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  158. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  159. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
  160. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  161. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  162. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  163. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  164. data/lib/active_admin/view_helpers.rb +2 -1
  165. data/lib/active_admin/views/action_items.rb +1 -0
  166. data/lib/active_admin/views/components/active_admin_form.rb +7 -6
  167. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  168. data/lib/active_admin/views/components/attributes_table.rb +6 -5
  169. data/lib/active_admin/views/components/blank_slate.rb +2 -1
  170. data/lib/active_admin/views/components/columns.rb +1 -0
  171. data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
  172. data/lib/active_admin/views/components/index_list.rb +4 -3
  173. data/lib/active_admin/views/components/menu.rb +2 -1
  174. data/lib/active_admin/views/components/menu_item.rb +5 -4
  175. data/lib/active_admin/views/components/paginated_collection.rb +19 -18
  176. data/lib/active_admin/views/components/panel.rb +2 -1
  177. data/lib/active_admin/views/components/scopes.rb +6 -5
  178. data/lib/active_admin/views/components/sidebar.rb +1 -0
  179. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  180. data/lib/active_admin/views/components/site_title.rb +2 -1
  181. data/lib/active_admin/views/components/status_tag.rb +12 -11
  182. data/lib/active_admin/views/components/table_for.rb +17 -16
  183. data/lib/active_admin/views/components/tabs.rb +4 -3
  184. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  185. data/lib/active_admin/views/footer.rb +3 -1
  186. data/lib/active_admin/views/header.rb +3 -2
  187. data/lib/active_admin/views/index_as_block.rb +1 -0
  188. data/lib/active_admin/views/index_as_blog.rb +2 -1
  189. data/lib/active_admin/views/index_as_grid.rb +2 -1
  190. data/lib/active_admin/views/index_as_table.rb +17 -16
  191. data/lib/active_admin/views/pages/base.rb +11 -8
  192. data/lib/active_admin/views/pages/form.rb +1 -0
  193. data/lib/active_admin/views/pages/index.rb +15 -13
  194. data/lib/active_admin/views/pages/layout.rb +1 -0
  195. data/lib/active_admin/views/pages/page.rb +1 -0
  196. data/lib/active_admin/views/pages/show.rb +1 -0
  197. data/lib/active_admin/views/tabbed_navigation.rb +3 -2
  198. data/lib/active_admin/views/title_bar.rb +2 -1
  199. data/lib/active_admin/views.rb +2 -1
  200. data/lib/active_admin.rb +61 -61
  201. data/lib/activeadmin.rb +2 -1
  202. data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
  203. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  204. data/lib/generators/active_admin/devise/devise_generator.rb +6 -5
  205. data/lib/generators/active_admin/install/install_generator.rb +8 -7
  206. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +2 -2
  207. data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
  208. data/lib/generators/active_admin/page/page_generator.rb +2 -1
  209. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  210. data/lib/generators/active_admin/resource/resource_generator.rb +4 -3
  211. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +2 -2
  212. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +8 -7
  213. data/lib/ransack_ext.rb +9 -8
  214. metadata +24 -50
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
  module Decorators
@@ -28,7 +29,7 @@ module ActiveAdmin
28
29
 
29
30
  def decorate?
30
31
  case action_name
31
- when 'new', 'edit', 'create', 'update'
32
+ when "new", "edit", "create", "update"
32
33
  form = active_admin_config.get_page_presenter :form
33
34
  form && form.options[:decorate] && decorator_class.present?
34
35
  else
@@ -53,49 +54,27 @@ module ActiveAdmin
53
54
 
54
55
  def self.wrap(decorator)
55
56
  collection_decorator = find_collection_decorator(decorator)
56
-
57
- if draper_collection_decorator? collection_decorator
58
- name = "#{collection_decorator.name} of #{decorator} + ActiveAdmin"
59
- @cache[name] ||= wrap! collection_decorator, name
60
- else
61
- collection_decorator
62
- end
57
+ name = "#{collection_decorator.name} of #{decorator} + ActiveAdmin"
58
+ @cache[name] ||= wrap! collection_decorator, name
63
59
  end
64
60
 
65
- private
66
-
67
61
  def self.wrap!(parent, name)
68
62
  ::Class.new parent do
69
63
  delegate :reorder, :page, :current_page, :total_pages, :limit_value,
70
64
  :total_count, :total_pages, :offset, :to_key, :group_values,
71
- :except, :find_each, :ransack
65
+ :except, :find_each, :ransack, to: :object
72
66
 
73
67
  define_singleton_method(:name) { name }
74
68
  end
75
69
  end
76
70
 
77
- # Draper::CollectionDecorator was introduced in 1.0.0
78
- # Draper::Decorator#collection_decorator_class was introduced in 1.3.0
79
71
  def self.find_collection_decorator(decorator)
80
- if Dependency.draper? '>= 1.3.0'
72
+ if decorator.respond_to?(:collection_decorator_class)
81
73
  decorator.collection_decorator_class
82
- elsif Dependency.draper? '>= 1.0.0'
83
- draper_collection_decorator
84
74
  else
85
- decorator
75
+ CollectionDecorator
86
76
  end
87
77
  end
88
-
89
- def self.draper_collection_decorator?(decorator)
90
- decorator && decorator <= draper_collection_decorator
91
- rescue NameError
92
- false
93
- end
94
-
95
- def self.draper_collection_decorator
96
- ::Draper::CollectionDecorator
97
- end
98
-
99
78
  end
100
79
  end
101
80
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/resource"
2
3
  require "active_admin/resource/model"
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
  module ResourceClassMethods
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
 
@@ -1,4 +1,5 @@
1
- require 'csv'
1
+ # frozen_string_literal: true
2
+ require "csv"
2
3
 
3
4
  module ActiveAdmin
4
5
  class ResourceController < BaseController
@@ -18,11 +19,12 @@ module ActiveAdmin
18
19
  protected
19
20
 
20
21
  def stream_resource(&block)
21
- headers['X-Accel-Buffering'] = 'no'
22
- headers['Cache-Control'] = 'no-cache'
22
+ headers["X-Accel-Buffering"] = "no"
23
+ headers["Cache-Control"] = "no-cache"
24
+ headers["Last-Modified"] = Time.current.httpdate
23
25
 
24
26
  if ActiveAdmin.application.disable_streaming_in.include? Rails.env
25
- self.response_body = block['']
27
+ self.response_body = block[""]
26
28
  else
27
29
  self.response_body = Enumerator.new &block
28
30
  end
@@ -33,8 +35,8 @@ module ActiveAdmin
33
35
  end
34
36
 
35
37
  def stream_csv
36
- headers['Content-Type'] = 'text/csv; charset=utf-8' # In Rails 5 it's set to HTML??
37
- headers['Content-Disposition'] = %{attachment; filename="#{csv_filename}"}
38
+ headers["Content-Type"] = "text/csv; charset=utf-8" # In Rails 5 it's set to HTML??
39
+ headers["Content-Disposition"] = %{attachment; filename="#{csv_filename}"}
38
40
  stream_resource &active_admin_config.csv_builder.method(:build).to_proc.curry[self]
39
41
  end
40
42
 
@@ -1,11 +1,13 @@
1
- require 'active_admin/resource_controller/action_builder'
2
- require 'active_admin/resource_controller/data_access'
3
- require 'active_admin/resource_controller/decorators'
4
- require 'active_admin/resource_controller/polymorphic_routes'
5
- require 'active_admin/resource_controller/scoping'
6
- require 'active_admin/resource_controller/streaming'
7
- require 'active_admin/resource_controller/sidebars'
8
- require 'active_admin/resource_controller/resource_class_methods'
1
+ # frozen_string_literal: true
2
+ require "active_admin/collection_decorator"
3
+ require "active_admin/resource_controller/action_builder"
4
+ require "active_admin/resource_controller/data_access"
5
+ require "active_admin/resource_controller/decorators"
6
+ require "active_admin/resource_controller/polymorphic_routes"
7
+ require "active_admin/resource_controller/scoping"
8
+ require "active_admin/resource_controller/streaming"
9
+ require "active_admin/resource_controller/sidebars"
10
+ require "active_admin/resource_controller/resource_class_methods"
9
11
 
10
12
  module ActiveAdmin
11
13
  # All Resources Controller inherits from this controller.
@@ -24,13 +26,13 @@ module ActiveAdmin
24
26
  include Streaming
25
27
  include Sidebars
26
28
  include ViewHelpers::DownloadFormatLinksHelper
27
- extend ResourceClassMethods
29
+ extend ResourceClassMethods
28
30
 
29
31
  def self.active_admin_config=(config)
30
32
  if @active_admin_config = config
31
33
  defaults resource_class: config.resource_class,
32
- route_prefix: config.route_prefix,
33
- instance_name: config.resource_name.singular
34
+ route_prefix: config.route_prefix,
35
+ instance_name: config.resource_name.singular
34
36
  end
35
37
  end
36
38
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  # This is the class where all the register blocks are evaluated.
3
4
  class ResourceDSL < DSL
@@ -62,11 +63,12 @@ module ActiveAdmin
62
63
  #
63
64
  def permit_params(*args, &block)
64
65
  param_key = config.param_key.to_sym
65
- belongs_to_param = config.belongs_to_param
66
- create_another_param = :create_another if config.create_another
67
66
 
68
67
  controller do
69
68
  define_method :permitted_params do
69
+ belongs_to_param = active_admin_config.belongs_to_param
70
+ create_another_param = :create_another if active_admin_config.create_another
71
+
70
72
  permitted_params =
71
73
  active_admin_namespace.permitted_params +
72
74
  Array.wrap(belongs_to_param) +
@@ -183,31 +185,15 @@ module ActiveAdmin
183
185
  # == Before / After Destroy
184
186
  # Called before and after the object is destroyed from the database.
185
187
  #
186
- delegate :before_build, :after_build, to: :controller
187
- delegate :before_create, :after_create, to: :controller
188
- delegate :before_update, :after_update, to: :controller
189
- delegate :before_save, :after_save, to: :controller
188
+ delegate :before_build, :after_build, to: :controller
189
+ delegate :before_create, :after_create, to: :controller
190
+ delegate :before_update, :after_update, to: :controller
191
+ delegate :before_save, :after_save, to: :controller
190
192
  delegate :before_destroy, :after_destroy, to: :controller
191
193
 
192
- # This code defines both *_filter and *_action for Rails 5.0 and *_action for Rails >= 5.1
193
- phases = [
194
- :before, :skip_before,
195
- :after, :skip_after,
196
- :around, :skip
197
- ]
198
- keywords = if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1
199
- [:action]
200
- else
201
- [:action, :filter]
202
- end
203
-
204
- keywords.each do |name|
205
- phases.each do |action|
206
- define_method "#{action}_#{name}" do |*args, &block|
207
- controller.public_send "#{action}_action", *args, &block
208
- end
209
- end
210
- end
194
+ standard_rails_filters =
195
+ AbstractController::Callbacks::ClassMethods.public_instance_methods.select { |m| m.match(/_action\z/) }
196
+ delegate *standard_rails_filters, to: :controller
211
197
 
212
198
  # Specify which actions to create in the controller
213
199
  #
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  # @private
3
4
  class Router
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Scope
3
4
 
@@ -45,17 +46,17 @@ module ActiveAdmin
45
46
  @scope_block = block
46
47
  end
47
48
 
48
- @localizer = options[:localizer]
49
- @show_count = options.fetch(:show_count, true)
50
- @display_if_block = options[:if] || proc { true }
51
- @default_block = options[:default] || proc { false }
52
- @group = options[:group].try(:to_sym)
49
+ @localizer = options[:localizer]
50
+ @show_count = options.fetch(:show_count, true)
51
+ @display_if_block = options[:if] || proc { true }
52
+ @default_block = options[:default] || proc { false }
53
+ @group = options[:group].try(:to_sym)
53
54
  end
54
55
 
55
56
  def name
56
57
  case @name
57
58
  when String then @name
58
- when Symbol then @localizer ? @localizer.t(@name, scope: 'scopes') : @name.to_s.titleize
59
+ when Symbol then @localizer ? @localizer.t(@name, scope: "scopes") : @name.to_s.titleize
59
60
  else @name
60
61
  end
61
62
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  class SettingsNode
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  class SidebarSection
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
- VERSION = '2.7.0'
3
+ VERSION = "2.10.0"
3
4
  end
@@ -1,27 +1,28 @@
1
- require 'active_admin/abstract_view_factory'
1
+ # frozen_string_literal: true
2
+ require "active_admin/abstract_view_factory"
2
3
 
3
4
  module ActiveAdmin
4
5
  class ViewFactory < AbstractViewFactory
5
6
 
6
7
  # 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
8
+ register global_navigation: ActiveAdmin::Views::TabbedNavigation,
9
+ utility_navigation: ActiveAdmin::Views::TabbedNavigation,
10
+ site_title: ActiveAdmin::Views::SiteTitle,
11
+ unsupported_browser: ActiveAdmin::Views::UnsupportedBrowser,
12
+ action_items: ActiveAdmin::Views::ActionItems,
13
+ title_bar: ActiveAdmin::Views::TitleBar,
14
+ header: ActiveAdmin::Views::Header,
15
+ footer: ActiveAdmin::Views::Footer,
16
+ index_scopes: ActiveAdmin::Views::Scopes,
17
+ blank_slate: ActiveAdmin::Views::BlankSlate
17
18
 
18
19
  # 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
20
+ register index_page: ActiveAdmin::Views::Pages::Index,
21
+ show_page: ActiveAdmin::Views::Pages::Show,
22
+ new_page: ActiveAdmin::Views::Pages::Form,
23
+ edit_page: ActiveAdmin::Views::Pages::Form,
24
+ layout: ActiveAdmin::Views::Pages::Layout,
25
+ page: ActiveAdmin::Views::Pages::Page
25
26
 
26
27
  end
27
28
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module ActiveAdminApplicationHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module AutoLinkHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module BreadcrumbHelper
@@ -6,7 +7,7 @@ module ActiveAdmin
6
7
  def breadcrumb_links(path = request.path)
7
8
  # remove leading "/" and split up the URL
8
9
  # and remove last since it's used as the page title
9
- parts = path.split('/').select(&:present?)[0..-2]
10
+ parts = path.split("/").select(&:present?)[0..-2]
10
11
 
11
12
  parts.each_with_index.map do |part, index|
12
13
  # 1. try using `display_name` if we can locate a DB object
@@ -15,13 +16,13 @@ module ActiveAdmin
15
16
  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
17
  parent = active_admin_config.belongs_to_config.try :target
17
18
  config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
18
- name = display_name config.find_resource part
19
+ name = display_name config.find_resource part
19
20
  end
20
21
  name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase
21
22
 
22
23
  # Don't create a link if the resource's show action is disabled
23
24
  if !config || config.defined_actions.include?(:show)
24
- link_to name, '/' + parts[0..index].join('/')
25
+ link_to name, "/" + parts[0..index].join("/")
25
26
  else
26
27
  name
27
28
  end
@@ -1,16 +1,24 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module DisplayHelper
4
5
 
5
6
  DISPLAY_NAME_FALLBACK = -> {
6
- name = ""
7
7
  klass = self.class
8
- name << klass.model_name.human if klass.respond_to? :model_name
9
- name << " ##{send(klass.primary_key)}" if klass.respond_to? :primary_key
8
+ name = if klass.respond_to?(:model_name)
9
+ if klass.respond_to?(:primary_key)
10
+ "#{klass.model_name.human} ##{send(klass.primary_key)}"
11
+ else
12
+ klass.model_name.human
13
+ end
14
+ elsif klass.respond_to?(:primary_key)
15
+ " ##{send(klass.primary_key)}"
16
+ end
10
17
  name.present? ? name : to_s
11
18
  }
19
+
12
20
  def DISPLAY_NAME_FALLBACK.inspect
13
- 'DISPLAY_NAME_FALLBACK'
21
+ "DISPLAY_NAME_FALLBACK"
14
22
  end
15
23
 
16
24
  # Attempts to call any known display name methods on the resource.
@@ -26,7 +34,7 @@ module ActiveAdmin
26
34
  @@display_name_methods_cache ||= {}
27
35
  @@display_name_methods_cache[resource.class] ||= begin
28
36
  methods = active_admin_application.display_name_methods - association_methods_for(resource)
29
- method = methods.detect { |method| resource.respond_to? method }
37
+ method = methods.detect { |method| resource.respond_to? method }
30
38
 
31
39
  if method != :to_s || resource.method(method).source_location
32
40
  method
@@ -74,7 +82,7 @@ module ActiveAdmin
74
82
  format_collection(object)
75
83
  else
76
84
  if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
77
- defined?(::Mongoid) && object.class.include?(Mongoid::Document)
85
+ defined?(::Mongoid) && object.class.include?(Mongoid::Document)
78
86
  auto_link object
79
87
  elsif defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Relation)
80
88
  format_collection(object)
@@ -85,7 +93,7 @@ module ActiveAdmin
85
93
  end
86
94
 
87
95
  def format_collection(collection)
88
- safe_join(collection.map { |item| pretty_format(item) }, ', ')
96
+ safe_join(collection.map { |item| pretty_format(item) }, ", ")
89
97
  end
90
98
 
91
99
  def boolean_attr?(resource, attr, value)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module DownloadFormatLinksHelper
@@ -18,7 +19,7 @@ module ActiveAdmin
18
19
  def build_download_format_links(formats = self.class.formats)
19
20
  params = request.query_parameters.except :format, :commit
20
21
  div class: "download_links" do
21
- span I18n.t('active_admin.download')
22
+ span I18n.t("active_admin.download")
22
23
  formats.each do |format|
23
24
  a format.upcase, href: url_for(params: params, format: format)
24
25
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module FormHelper
@@ -15,7 +16,7 @@ module ActiveAdmin
15
16
  #
16
17
  def fields_for_params(params, options = {})
17
18
  namespace = options[:namespace]
18
- except = Array.wrap(options[:except]).map &:to_s
19
+ except = Array.wrap(options[:except]).map &:to_s
19
20
 
20
21
  params.flat_map do |k, v|
21
22
  next if namespace.nil? && %w(controller action commit utf8).include?(k.to_s)
@@ -37,7 +38,7 @@ module ActiveAdmin
37
38
  { "#{k}[]" => v }
38
39
  end
39
40
  when nil
40
- { k => '' }
41
+ { k => "" }
41
42
  when TrueClass, FalseClass
42
43
  { k => v }
43
44
  else
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module FlashHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module FormHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Utility methods for internal use.
2
3
  # @private
3
4
  module MethodOrProcHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module ScopeNameHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module SidebarHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module TitleHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
  module ViewFactoryHelper
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ViewHelpers
3
4
 
4
5
  # Require all ruby files in the view helpers dir
5
- Dir[File.expand_path('view_helpers', __dir__) + "/*.rb"].each { |f| require f }
6
+ Dir[File.expand_path("view_helpers", __dir__) + "/*.rb"].each { |f| require f }
6
7
 
7
8
  include ActiveAdminApplicationHelper
8
9
  include AutoLinkHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Views
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Views
3
4
  class FormtasticProxy < ::Arbre::Rails::Forms::FormBuilderProxy
@@ -16,7 +17,7 @@ module ActiveAdmin
16
17
  end
17
18
 
18
19
  def to_s
19
- opening_tag << children.to_s << closing_tag
20
+ opening_tag + children.to_s + closing_tag
20
21
  end
21
22
  end
22
23
 
@@ -111,14 +112,14 @@ module ActiveAdmin
111
112
  create_another = params[:create_another]
112
113
  label = @resource.class.model_name.human
113
114
  Arbre::Context.new do
114
- li class: 'create_another' do
115
+ li class: "create_another" do
115
116
  input(
116
117
  checked: create_another,
117
- id: 'create_another',
118
- name: 'create_another',
119
- type: 'checkbox'
118
+ id: "create_another",
119
+ name: "create_another",
120
+ type: "checkbox"
120
121
  )
121
- label(I18n.t('active_admin.create_another', model: label), for: 'create_another')
122
+ label(I18n.t("active_admin.create_another", model: label), for: "create_another")
122
123
  end
123
124
  end
124
125
  end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+ require "active_admin/filters/active"
3
+
4
+ module ActiveAdmin
5
+ module Views
6
+
7
+ class ActiveFiltersSidebarContent < ActiveAdmin::Component
8
+ builder_method :active_filters_sidebar_content
9
+
10
+ def build
11
+ active_filters = ActiveAdmin::Filters::Active.new(active_admin_config, assigns[:search])
12
+ active_scopes = assigns[:search].instance_variable_get("@scope_args")
13
+
14
+ scope_block(current_scope)
15
+ filters_list(active_filters, active_scopes)
16
+ end
17
+
18
+ def scope_block(current_scope)
19
+ return unless current_scope
20
+
21
+ h4 I18n.t("active_admin.search_status.current_scope"), style: "display: inline"
22
+ b scope_name(current_scope), class: "current_scope_name"
23
+ end
24
+
25
+ def filters_list(active_filters, active_scopes)
26
+ div style: "margin-top: 10px" do
27
+ h4 I18n.t("active_admin.search_status.current_filters"), style: "margin-bottom: 10px"
28
+ ul do
29
+ if active_filters.filters.blank? && active_scopes.blank?
30
+ li I18n.t("active_admin.search_status.no_current_filters")
31
+ else
32
+ active_filters.filters.each { |filter| filter_item(filter) }
33
+ active_scopes.each { |name, value| scope_item(name, value) }
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ def filter_item(filter)
40
+ li filter.html_options do
41
+ span filter.label
42
+ b to_sentence(filter.values.map { |v| pretty_format(v) })
43
+ end
44
+ end
45
+
46
+ def scope_item(name, value)
47
+ filter_name = name.gsub(/_eq$/, "")
48
+ filter = active_admin_config.filters[filter_name.to_sym]
49
+ label = filter.try(:[], :label) || filter_name.titleize
50
+
51
+ li class: "current_filter_#{name}" do
52
+ span "#{label} #{Ransack::Translate.predicate('eq')}"
53
+ b value
54
+ end
55
+ end
56
+ end
57
+
58
+ end
59
+ end