activeadmin 2.4.0 → 2.8.0

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

Potentially problematic release.


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

Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +148 -30
  3. data/CONTRIBUTING.md +36 -56
  4. data/README.md +2 -2
  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/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
  10. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  11. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  12. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  13. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +8 -0
  14. data/app/assets/stylesheets/active_admin/print.scss +2 -2
  15. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  16. data/app/javascript/active_admin/base.js +28 -0
  17. data/app/{assets/javascripts/active_admin/ext/jquery-ui.es6 → javascript/active_admin/ext/jquery-ui.js} +0 -0
  18. data/app/{assets/javascripts/active_admin/ext/jquery.es6 → javascript/active_admin/ext/jquery.js} +0 -0
  19. data/app/{assets/javascripts/active_admin/lib/batch_actions.es6 → javascript/active_admin/initializers/batch-actions.js} +4 -2
  20. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  21. data/app/{assets/javascripts/active_admin/initializers/datepicker.es6 → javascript/active_admin/initializers/datepicker.js} +0 -0
  22. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  23. data/app/javascript/active_admin/initializers/filters.js +10 -0
  24. data/app/{assets/javascripts/active_admin/lib/has_many.es6 → javascript/active_admin/initializers/has-many.js} +0 -0
  25. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  26. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  27. data/app/{assets/javascripts/active_admin/initializers/tabs.es6 → javascript/active_admin/initializers/tabs.js} +0 -0
  28. data/app/{assets/javascripts/active_admin/lib/checkbox-toggler.es6 → javascript/active_admin/lib/checkbox-toggler.js} +5 -5
  29. data/app/{assets/javascripts/active_admin/lib/dropdown-menu.es6 → javascript/active_admin/lib/dropdown-menu.js} +3 -10
  30. data/app/javascript/active_admin/lib/filters.js +39 -0
  31. data/app/{assets/javascripts/active_admin/lib/modal_dialog.es6 → javascript/active_admin/lib/modal-dialog.js} +10 -8
  32. data/app/javascript/active_admin/lib/per-page.js +38 -0
  33. data/app/{assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 → javascript/active_admin/lib/table-checkbox-toggler.js} +5 -3
  34. data/app/javascript/active_admin/lib/utils.js +40 -0
  35. data/app/views/layouts/active_admin_logged_out.html.erb +15 -5
  36. data/config/locales/ar.yml +6 -6
  37. data/config/locales/az.yml +138 -0
  38. data/config/locales/en-CA.yml +3 -3
  39. data/config/locales/en-GB.yml +3 -3
  40. data/config/locales/en.yml +3 -3
  41. data/config/locales/es-MX.yml +2 -1
  42. data/config/locales/es.yml +5 -5
  43. data/config/locales/fr.yml +4 -4
  44. data/config/locales/it.yml +18 -0
  45. data/config/locales/ja.yml +3 -3
  46. data/config/locales/lv.yml +2 -2
  47. data/config/locales/vi.yml +6 -5
  48. data/docs/0-installation.md +26 -2
  49. data/docs/1-general-configuration.md +20 -0
  50. data/docs/11-decorators.md +16 -5
  51. data/docs/2-resource-customization.md +10 -1
  52. data/docs/3-index-pages.md +1 -1
  53. data/docs/9-batch-actions.md +2 -2
  54. data/docs/Gemfile.lock +119 -109
  55. data/docs/_includes/top-menu.html +1 -1
  56. data/docs/documentation.md +1 -1
  57. data/docs/index.html +6 -6
  58. data/lib/active_admin.rb +43 -44
  59. data/lib/active_admin/application.rb +7 -7
  60. data/lib/active_admin/authorization_adapter.rb +3 -3
  61. data/lib/active_admin/base_controller/authorization.rb +9 -9
  62. data/lib/active_admin/batch_actions/controller.rb +3 -3
  63. data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -1
  64. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +5 -5
  65. data/lib/active_admin/collection_decorator.rb +31 -0
  66. data/lib/active_admin/csv_builder.rb +11 -7
  67. data/lib/active_admin/dependency.rb +7 -7
  68. data/lib/active_admin/filters.rb +1 -1
  69. data/lib/active_admin/filters/active_filter.rb +1 -1
  70. data/lib/active_admin/filters/forms.rb +3 -3
  71. data/lib/active_admin/filters/resource_extension.rb +1 -1
  72. data/lib/active_admin/form_builder.rb +5 -5
  73. data/lib/active_admin/helpers/optional_display.rb +2 -2
  74. data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
  75. data/lib/active_admin/inputs/filters/date_range_input.rb +15 -12
  76. data/lib/active_admin/localizers/resource_localizer.rb +1 -1
  77. data/lib/active_admin/menu.rb +5 -2
  78. data/lib/active_admin/menu_item.rb +7 -7
  79. data/lib/active_admin/namespace.rb +7 -7
  80. data/lib/active_admin/namespace_settings.rb +3 -0
  81. data/lib/active_admin/orm/active_record/comments.rb +11 -11
  82. data/lib/active_admin/orm/active_record/comments/comment.rb +3 -3
  83. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +3 -3
  84. data/lib/active_admin/pundit_adapter.rb +4 -4
  85. data/lib/active_admin/resource.rb +1 -1
  86. data/lib/active_admin/resource/action_items.rb +1 -1
  87. data/lib/active_admin/resource/menu.rb +4 -4
  88. data/lib/active_admin/resource/naming.rb +4 -4
  89. data/lib/active_admin/resource/routes.rb +5 -5
  90. data/lib/active_admin/resource/scope_to.rb +7 -7
  91. data/lib/active_admin/resource_controller.rb +4 -3
  92. data/lib/active_admin/resource_controller/data_access.rb +1 -1
  93. data/lib/active_admin/resource_controller/decorators.rb +5 -25
  94. data/lib/active_admin/resource_controller/polymorphic_routes.rb +3 -2
  95. data/lib/active_admin/resource_dsl.rb +5 -5
  96. data/lib/active_admin/scope.rb +5 -5
  97. data/lib/active_admin/version.rb +1 -1
  98. data/lib/active_admin/view_factory.rb +16 -16
  99. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +1 -1
  100. data/lib/active_admin/view_helpers/display_helper.rb +3 -3
  101. data/lib/active_admin/view_helpers/fields_for.rb +1 -1
  102. data/lib/active_admin/views/components/attributes_table.rb +2 -2
  103. data/lib/active_admin/views/components/dropdown_menu.rb +2 -2
  104. data/lib/active_admin/views/components/index_list.rb +1 -1
  105. data/lib/active_admin/views/components/menu_item.rb +1 -1
  106. data/lib/active_admin/views/components/paginated_collection.rb +15 -14
  107. data/lib/active_admin/views/components/scopes.rb +2 -0
  108. data/lib/active_admin/views/components/table_for.rb +12 -11
  109. data/lib/active_admin/views/components/tabs.rb +1 -1
  110. data/lib/active_admin/views/index_as_table.rb +6 -6
  111. data/lib/active_admin/views/pages/base.rb +9 -5
  112. data/lib/active_admin/views/pages/index.rb +9 -8
  113. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  114. data/lib/generators/active_admin/devise/devise_generator.rb +4 -4
  115. data/lib/generators/active_admin/install/install_generator.rb +7 -1
  116. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +9 -2
  117. data/lib/generators/active_admin/resource/resource_generator.rb +1 -1
  118. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  119. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  120. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  121. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  122. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
  123. metadata +44 -48
  124. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  125. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  126. data/app/assets/images/active_admin/orderable.png +0 -0
  127. data/app/assets/javascripts/active_admin/base.es6 +0 -23
  128. data/app/assets/javascripts/active_admin/initializers/filters.es6 +0 -45
  129. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +0 -41
  130. data/app/assets/javascripts/active_admin/lib/per_page.es6 +0 -47
@@ -8,7 +8,7 @@
8
8
  </div>
9
9
 
10
10
  <div id="tidelift">
11
- <a href="https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=homepage" target="_blank">
11
+ <a href="https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=referral&utm_campaign=enterprise" target="_blank">
12
12
  <span class="cta">
13
13
  Active Admin for enterprise available via Tidelift
14
14
  </span>
@@ -29,7 +29,7 @@ configurations.
29
29
  Migrate your db and start the server:
30
30
 
31
31
  ```bash
32
- $> rake db:migrate
32
+ $> rails db:migrate
33
33
  $> rails server
34
34
  ```
35
35
 
@@ -50,7 +50,7 @@
50
50
  </h3>
51
51
 
52
52
  <p>
53
- Each resource that is registered wtih Active Admin becomes available as <span class="caps">JSON</span>, <span class="caps">XML</span> and <span class="caps">CSV</span> download. Customize the output to meet your requirements.
53
+ Each resource that is registered with Active Admin becomes available as <span class="caps">JSON</span>, <span class="caps">XML</span> and <span class="caps">CSV</span> download. Customize the output to meet your requirements.
54
54
  </p>
55
55
  </div>
56
56
 
@@ -133,7 +133,7 @@
133
133
  </h2>
134
134
 
135
135
  <p>
136
- <a href="https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=homepage">
136
+ <a href="https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=referral&utm_campaign=enterprise">
137
137
  Available as part of the Tidelift Subscription
138
138
  </a>
139
139
  </p>
@@ -150,11 +150,11 @@
150
150
  </p>
151
151
 
152
152
  <div class="tidelift-buttons">
153
- <a href="https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=referral" target="_blank">
153
+ <a href="https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=referral&utm_campaign=enterprise" target="_blank">
154
154
  <span>LEARN MORE</span>
155
155
  </a>
156
156
 
157
- <a href="https://tidelift.com/subscription/request-a-demo?utm_source=rubygems-activeadmin&utm_medium=referral" target="_blank">
157
+ <a href="https://tidelift.com/subscription/request-a-demo?utm_source=rubygems-activeadmin&utm_medium=referral&utm_campaign=enterprise" target="_blank">
158
158
  <span>REQUEST A DEMO</span>
159
159
  </a>
160
160
  </div>
@@ -202,11 +202,11 @@
202
202
  </p>
203
203
 
204
204
  <div class="tidelift-buttons">
205
- <a href="https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=referral" target="_blank">
205
+ <a href="https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=referral&utm_campaign=enterprise" target="_blank">
206
206
  <span>LEARN MORE</span>
207
207
  </a>
208
208
 
209
- <a href="https://tidelift.com/subscription/request-a-demo?utm_source=rubygems-activeadmin&utm_medium=referral" target="_blank">
209
+ <a href="https://tidelift.com/subscription/request-a-demo?utm_source=rubygems-activeadmin&utm_medium=referral&utm_campaign=enterprise" target="_blank">
210
210
  <span>REQUEST A DEMO</span>
211
211
  </a>
212
212
  </div>
@@ -10,50 +10,49 @@ require 'inherited_resources'
10
10
  require 'jquery-rails'
11
11
  require 'sassc-rails'
12
12
  require 'arbre'
13
- require 'sprockets/es6'
14
13
 
15
14
  require 'active_admin/helpers/i18n'
16
15
 
17
16
  module ActiveAdmin
18
17
 
19
- autoload :VERSION, 'active_admin/version'
20
- autoload :Application, 'active_admin/application'
21
- autoload :AssetRegistration, 'active_admin/asset_registration'
22
- autoload :Authorization, 'active_admin/authorization_adapter'
23
- autoload :AuthorizationAdapter, 'active_admin/authorization_adapter'
24
- autoload :Callbacks, 'active_admin/callbacks'
25
- autoload :Component, 'active_admin/component'
26
- autoload :BaseController, 'active_admin/base_controller'
27
- autoload :CanCanAdapter, 'active_admin/cancan_adapter'
28
- autoload :ControllerAction, 'active_admin/controller_action'
29
- autoload :CSVBuilder, 'active_admin/csv_builder'
30
- autoload :Dependency, 'active_admin/dependency'
31
- autoload :Deprecation, 'active_admin/deprecation'
32
- autoload :Devise, 'active_admin/devise'
33
- autoload :DSL, 'active_admin/dsl'
34
- autoload :FormBuilder, 'active_admin/form_builder'
35
- autoload :Inputs, 'active_admin/inputs'
36
- autoload :Localizers, 'active_admin/localizers'
37
- autoload :Menu, 'active_admin/menu'
38
- autoload :MenuCollection, 'active_admin/menu_collection'
39
- autoload :MenuItem, 'active_admin/menu_item'
40
- autoload :Namespace, 'active_admin/namespace'
41
- autoload :OrderClause, 'active_admin/order_clause'
42
- autoload :Page, 'active_admin/page'
43
- autoload :PagePresenter, 'active_admin/page_presenter'
44
- autoload :PageController, 'active_admin/page_controller'
45
- autoload :PageDSL, 'active_admin/page_dsl'
46
- autoload :PunditAdapter, 'active_admin/pundit_adapter'
47
- autoload :Resource, 'active_admin/resource'
48
- autoload :ResourceController, 'active_admin/resource_controller'
49
- autoload :ResourceDSL, 'active_admin/resource_dsl'
50
- autoload :Scope, 'active_admin/scope'
51
- autoload :ScopeChain, 'active_admin/helpers/scope_chain'
52
- autoload :SidebarSection, 'active_admin/sidebar_section'
53
- autoload :TableBuilder, 'active_admin/table_builder'
54
- autoload :ViewFactory, 'active_admin/view_factory'
55
- autoload :ViewHelpers, 'active_admin/view_helpers'
56
- autoload :Views, 'active_admin/views'
18
+ autoload :VERSION, 'active_admin/version'
19
+ autoload :Application, 'active_admin/application'
20
+ autoload :AssetRegistration, 'active_admin/asset_registration'
21
+ autoload :Authorization, 'active_admin/authorization_adapter'
22
+ autoload :AuthorizationAdapter, 'active_admin/authorization_adapter'
23
+ autoload :Callbacks, 'active_admin/callbacks'
24
+ autoload :Component, 'active_admin/component'
25
+ autoload :BaseController, 'active_admin/base_controller'
26
+ autoload :CanCanAdapter, 'active_admin/cancan_adapter'
27
+ autoload :ControllerAction, 'active_admin/controller_action'
28
+ autoload :CSVBuilder, 'active_admin/csv_builder'
29
+ autoload :Dependency, 'active_admin/dependency'
30
+ autoload :Deprecation, 'active_admin/deprecation'
31
+ autoload :Devise, 'active_admin/devise'
32
+ autoload :DSL, 'active_admin/dsl'
33
+ autoload :FormBuilder, 'active_admin/form_builder'
34
+ autoload :Inputs, 'active_admin/inputs'
35
+ autoload :Localizers, 'active_admin/localizers'
36
+ autoload :Menu, 'active_admin/menu'
37
+ autoload :MenuCollection, 'active_admin/menu_collection'
38
+ autoload :MenuItem, 'active_admin/menu_item'
39
+ autoload :Namespace, 'active_admin/namespace'
40
+ autoload :OrderClause, 'active_admin/order_clause'
41
+ autoload :Page, 'active_admin/page'
42
+ autoload :PagePresenter, 'active_admin/page_presenter'
43
+ autoload :PageController, 'active_admin/page_controller'
44
+ autoload :PageDSL, 'active_admin/page_dsl'
45
+ autoload :PunditAdapter, 'active_admin/pundit_adapter'
46
+ autoload :Resource, 'active_admin/resource'
47
+ autoload :ResourceController, 'active_admin/resource_controller'
48
+ autoload :ResourceDSL, 'active_admin/resource_dsl'
49
+ autoload :Scope, 'active_admin/scope'
50
+ autoload :ScopeChain, 'active_admin/helpers/scope_chain'
51
+ autoload :SidebarSection, 'active_admin/sidebar_section'
52
+ autoload :TableBuilder, 'active_admin/table_builder'
53
+ autoload :ViewFactory, 'active_admin/view_factory'
54
+ autoload :ViewHelpers, 'active_admin/view_helpers'
55
+ autoload :Views, 'active_admin/views'
57
56
 
58
57
  class << self
59
58
 
@@ -70,11 +69,11 @@ module ActiveAdmin
70
69
  application.prepare!
71
70
  end
72
71
 
73
- delegate :register, to: :application
72
+ delegate :register, to: :application
74
73
  delegate :register_page, to: :application
75
- delegate :unload!, to: :application
76
- delegate :load!, to: :application
77
- delegate :routes, to: :application
74
+ delegate :unload!, to: :application
75
+ delegate :load!, to: :application
76
+ delegate :routes, to: :application
78
77
 
79
78
  # A callback is triggered each time (before) Active Admin loads the configuration files.
80
79
  # In development mode, this will happen whenever the user changes files. In production
@@ -131,4 +130,4 @@ require 'active_admin/filters'
131
130
 
132
131
  # Require ORM-specific plugins
133
132
  require 'active_admin/orm/active_record' if defined? ActiveRecord
134
- require 'active_admin/orm/mongoid' if defined? Mongoid
133
+ require 'active_admin/orm/mongoid' if defined? Mongoid
@@ -46,7 +46,7 @@ module ActiveAdmin
46
46
 
47
47
  # Event that gets triggered on load of Active Admin
48
48
  BeforeLoadEvent = 'active_admin.application.before_load'.freeze
49
- AfterLoadEvent = 'active_admin.application.after_load'.freeze
49
+ AfterLoadEvent = 'active_admin.application.after_load'.freeze
50
50
 
51
51
  # Runs before the app's AA initializer
52
52
  def setup!
@@ -73,7 +73,7 @@ module ActiveAdmin
73
73
  def namespace(name)
74
74
  name ||= :root
75
75
 
76
- namespace = namespaces[name] ||= begin
76
+ namespace = namespaces[name.to_sym] ||= begin
77
77
  namespace = Namespace.new(self, name)
78
78
  ActiveSupport::Notifications.publish ActiveAdmin::Namespace::RegisterEvent, namespace
79
79
  namespace
@@ -112,9 +112,9 @@ module ActiveAdmin
112
112
  def load!
113
113
  unless loaded?
114
114
  ActiveSupport::Notifications.publish BeforeLoadEvent, self # before_load hook
115
- files.each { |file| load file } # load files
116
- namespace(default_namespace) # init AA resources
117
- ActiveSupport::Notifications.publish AfterLoadEvent, self # after_load hook
115
+ files.each { |file| load file } # load files
116
+ namespace(default_namespace) # init AA resources
117
+ ActiveSupport::Notifications.publish AfterLoadEvent, self # after_load hook
118
118
  @@loaded = true
119
119
  end
120
120
  end
@@ -125,7 +125,7 @@ module ActiveAdmin
125
125
 
126
126
  # Returns ALL the files to be loaded
127
127
  def files
128
- load_paths.flatten.compact.uniq.flat_map { |path| Dir["#{path}/**/*.rb"] }
128
+ load_paths.flatten.compact.uniq.flat_map { |path| Dir["#{path}/**/*.rb"] }.sort
129
129
  end
130
130
 
131
131
  # Creates all the necessary routes for the ActiveAdmin configurations
@@ -176,7 +176,7 @@ module ActiveAdmin
176
176
  # files from being loaded twice in production.
177
177
  def remove_active_admin_load_paths_from_rails_autoload_and_eager_load
178
178
  ActiveSupport::Dependencies.autoload_paths -= load_paths
179
- Rails.application.config.eager_load_paths -= load_paths
179
+ Rails.application.config.eager_load_paths -= load_paths
180
180
  end
181
181
 
182
182
  # Hook into the Rails code reloading mechanism so that things are reloaded
@@ -2,9 +2,9 @@ module ActiveAdmin
2
2
 
3
3
  # Default Authorization permissions for Active Admin
4
4
  module Authorization
5
- READ = :read
6
- CREATE = :create
7
- UPDATE = :update
5
+ READ = :read
6
+ CREATE = :create
7
+ UPDATE = :update
8
8
  DESTROY = :destroy
9
9
  end
10
10
 
@@ -4,12 +4,12 @@ module ActiveAdmin
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  ACTIONS_DICTIONARY = {
7
- index: ActiveAdmin::Authorization::READ,
8
- show: ActiveAdmin::Authorization::READ,
9
- new: ActiveAdmin::Authorization::CREATE,
10
- create: ActiveAdmin::Authorization::CREATE,
11
- edit: ActiveAdmin::Authorization::UPDATE,
12
- update: ActiveAdmin::Authorization::UPDATE,
7
+ index: ActiveAdmin::Authorization::READ,
8
+ show: ActiveAdmin::Authorization::READ,
9
+ new: ActiveAdmin::Authorization::CREATE,
10
+ create: ActiveAdmin::Authorization::CREATE,
11
+ edit: ActiveAdmin::Authorization::UPDATE,
12
+ update: ActiveAdmin::Authorization::UPDATE,
13
13
  destroy: ActiveAdmin::Authorization::DESTROY
14
14
  }
15
15
 
@@ -112,9 +112,9 @@ module ActiveAdmin
112
112
  redirect_backwards_or_to_root
113
113
  end
114
114
 
115
- format.csv { render body: error, status: :unauthorized }
116
- format.json { render json: { error: error }, status: :unauthorized }
117
- format.xml { render xml: "<error>#{error}</error>", status: :unauthorized }
115
+ format.csv { render body: error, status: :unauthorized }
116
+ format.json { render json: { error: error }, status: :unauthorized }
117
+ format.xml { render xml: "<error>#{error}</error>", status: :unauthorized }
118
118
  end
119
119
  end
120
120
 
@@ -5,10 +5,10 @@ module ActiveAdmin
5
5
  # Controller action that is called when submitting the batch action form
6
6
  def batch_action
7
7
  if action_present?
8
- selection = params[:collection_selection] || []
9
- inputs = JSON.parse params[:batch_action_inputs] || '{}'
8
+ selection = params[:collection_selection] || []
9
+ inputs = JSON.parse params[:batch_action_inputs] || '{}'
10
10
  valid_keys = MethodOrProcHelper.render_in_context(self, current_batch_action.inputs).try(:keys)
11
- inputs = inputs.with_indifferent_access.slice *valid_keys
11
+ inputs = inputs.with_indifferent_access.slice *valid_keys
12
12
  instance_exec selection, inputs, &current_batch_action.block
13
13
  else
14
14
  raise "Couldn't find batch action \"#{params[:batch_action]}\""
@@ -16,7 +16,7 @@ module ActiveAdmin
16
16
  # batch_action => name of the specific action called
17
17
  # batch_action_inputs => a JSON string of any requested confirmation values
18
18
  text_node form_tag active_admin_config.route_batch_action_path(params, url_options), id: options[:id]
19
- input name: :batch_action, id: :batch_action, type: :hidden
19
+ input name: :batch_action, id: :batch_action, type: :hidden
20
20
  input name: :batch_action_inputs, id: :batch_action_inputs, type: :hidden
21
21
 
22
22
  super(options)
@@ -31,17 +31,17 @@ module ActiveAdmin
31
31
  confirmation_text = render_or_call_method_or_proc_on(self, batch_action.confirm)
32
32
 
33
33
  options = {
34
- :class => "batch_action",
35
- "data-action" => batch_action.sym,
36
- "data-confirm" => confirmation_text,
37
- "data-inputs" => render_in_context(self, batch_action.inputs).to_json
34
+ class: "batch_action",
35
+ "data-action": batch_action.sym,
36
+ "data-confirm": confirmation_text,
37
+ "data-inputs": render_in_context(self, batch_action.inputs).to_json
38
38
  }
39
39
 
40
40
  default_title = render_or_call_method_or_proc_on(self, batch_action.title)
41
41
  title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", default: default_title)
42
42
  label = I18n.t("active_admin.batch_actions.action_label", title: title)
43
43
 
44
- item label, "#", options
44
+ item label, "#", **options
45
45
  end
46
46
  end
47
47
  end
@@ -0,0 +1,31 @@
1
+ module ActiveAdmin
2
+ # This class decorates a collection of objects delegating
3
+ # mehods to behave like an Array. It's used to decouple ActiveAdmin
4
+ # from Draper and thus being able to use PORO decorators as well.
5
+ #
6
+ # It's implementation is heavily based on the Draper::CollectionDecorator
7
+ # https://github.com/drapergem/draper/blob/aaa06bd2f1e219838b241a5534e7ca513edd1fe2/lib/draper/collection_decorator.rb
8
+ class CollectionDecorator
9
+ # @return the collection being decorated.
10
+ attr_reader :object
11
+
12
+ # @return [Class] the decorator class used to decorate each item, as set by {#initialize}.
13
+ attr_reader :decorator_class
14
+
15
+ array_methods = Array.instance_methods - Object.instance_methods
16
+ delegate :==, :as_json, *array_methods, to: :decorated_collection
17
+
18
+ def initialize(object, with:)
19
+ @object = object
20
+ @decorator_class = with
21
+ end
22
+
23
+ class << self
24
+ alias_method :decorate, :new
25
+ end
26
+
27
+ def decorated_collection
28
+ @decorated_collection ||= object.map { |item| decorator_class.new(item) }
29
+ end
30
+ end
31
+ end
@@ -42,23 +42,23 @@ module ActiveAdmin
42
42
  end
43
43
 
44
44
  def build(controller, csv)
45
- @collection = controller.send :find_collection, except: :pagination
46
- columns = exec_columns controller.view_context
47
- bom = options.delete :byte_order_mark
45
+ @collection = controller.send :find_collection, except: :pagination
46
+ columns = exec_columns controller.view_context
47
+ bom = options.delete :byte_order_mark
48
48
  column_names = options.delete(:column_names) { true }
49
- csv_options = options.except :encoding_options, :humanize_name
49
+ csv_options = options.except :encoding_options, :humanize_name
50
50
 
51
51
  csv << bom if bom
52
52
 
53
53
  if column_names
54
- csv << CSV.generate_line(columns.map { |c| encode c.name, options }, csv_options)
54
+ csv << CSV.generate_line(columns.map { |c| encode c.name, options }, **csv_options)
55
55
  end
56
56
 
57
57
  ActiveRecord::Base.uncached do
58
58
  (1..paginated_collection.total_pages).each do |page|
59
59
  paginated_collection(page).each do |resource|
60
60
  resource = controller.send :apply_decorator, resource
61
- csv << CSV.generate_line(build_row(resource, columns, options), csv_options)
61
+ csv << CSV.generate_line(build_row(resource, columns, options), **csv_options)
62
62
  end
63
63
  end
64
64
  end
@@ -81,7 +81,11 @@ module ActiveAdmin
81
81
 
82
82
  def encode(content, options)
83
83
  if options[:encoding]
84
- content.to_s.encode options[:encoding], options[:encoding_options]
84
+ if options[:encoding_options]
85
+ content.to_s.encode options[:encoding], **options[:encoding_options]
86
+ else
87
+ content.to_s.encode options[:encoding]
88
+ end
85
89
  else
86
90
  content
87
91
  end
@@ -6,22 +6,22 @@ module ActiveAdmin
6
6
 
7
7
  # Provides a clean interface to check for gem dependencies at runtime.
8
8
  #
9
- # ActiveAdmin::Dependency.draper
10
- # => #<ActiveAdmin::Dependency::Matcher for draper 1.2.1>
9
+ # ActiveAdmin::Dependency.rails
10
+ # => #<ActiveAdmin::Dependency::Matcher for rails 6.0.3.2>
11
11
  #
12
- # ActiveAdmin::Dependency.draper?
12
+ # ActiveAdmin::Dependency.rails?
13
13
  # => true
14
14
  #
15
- # ActiveAdmin::Dependency.draper? '>= 1.5.0'
15
+ # ActiveAdmin::Dependency.rails? '>= 6.1'
16
16
  # => false
17
17
  #
18
- # ActiveAdmin::Dependency.draper? '= 1.2.1'
18
+ # ActiveAdmin::Dependency.rails? '= 6.0.3.2'
19
19
  # => true
20
20
  #
21
- # ActiveAdmin::Dependency.draper? '~> 1.2.0'
21
+ # ActiveAdmin::Dependency.rails? '~> 6.0.3'
22
22
  # => true
23
23
  #
24
- # ActiveAdmin::Dependency.rails? '>= 4.2.7', '<= 5.0.2'
24
+ # ActiveAdmin::Dependency.rails? '>= 6.0.3', '<= 6.1.0'
25
25
  # => true
26
26
  #
27
27
  # ActiveAdmin::Dependency.rails! '5'
@@ -7,5 +7,5 @@ require 'active_admin/filters/active_sidebar'
7
7
 
8
8
  # Add our Extensions
9
9
  ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::Filters::DSL
10
- ActiveAdmin::Resource.send :include, ActiveAdmin::Filters::ResourceExtension
10
+ ActiveAdmin::Resource.send :include, ActiveAdmin::Filters::ResourceExtension
11
11
  ActiveAdmin::ViewHelpers.send :include, ActiveAdmin::Filters::ViewHelper
@@ -96,7 +96,7 @@ module ActiveAdmin
96
96
  end
97
97
 
98
98
  def filter
99
- resource.filters[name.to_sym]
99
+ resource.filters[name.to_sym] || resource.filters[condition.key.to_sym]
100
100
  end
101
101
 
102
102
  def related_primary_key
@@ -51,12 +51,12 @@ module ActiveAdmin
51
51
  html: { class: 'filter_form' } }
52
52
  required = { html: { method: :get },
53
53
  as: :q }
54
- options = defaults.deep_merge(options).deep_merge(required)
54
+ options = defaults.deep_merge(options).deep_merge(required)
55
55
 
56
56
  form_for search, options do |f|
57
57
  filters.each do |attribute, opts|
58
- next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
59
- next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
58
+ next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
59
+ next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
60
60
 
61
61
  filter_opts = opts.except(:if, :unless)
62
62
  filter_opts[:input_html] = instance_exec(&filter_opts[:input_html]) if filter_opts[:input_html].is_a?(Proc)