activeadmin 1.4.3 → 2.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +92 -11
- data/CONTRIBUTING.md +12 -11
- data/README.md +34 -8
- data/app/assets/javascripts/active_admin/base.es6 +23 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
- data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
- data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
- data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +55 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
- data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
- data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
- data/app/assets/stylesheets/active_admin/_forms.scss +2 -14
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
- data/app/views/active_admin/devise/registrations/new.html.erb +1 -2
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
- data/app/views/layouts/active_admin_logged_out.html.erb +1 -1
- data/config/locales/bg.yml +0 -1
- data/config/locales/he.yml +0 -1
- data/config/locales/hu.yml +4 -0
- data/config/locales/lt.yml +2 -2
- data/config/locales/uk.yml +2 -0
- data/docs/0-installation.md +2 -2
- data/docs/13-authorization-adapter.md +4 -4
- data/docs/CNAME +1 -1
- data/docs/index.html +2 -2
- data/lib/active_admin/application.rb +8 -14
- data/lib/active_admin/application_settings.rb +3 -0
- data/lib/active_admin/asset_registration.rb +0 -8
- data/lib/active_admin/base_controller/authorization.rb +2 -4
- data/lib/active_admin/base_controller.rb +6 -6
- data/lib/active_admin/batch_actions/controller.rb +1 -1
- data/lib/active_admin/batch_actions/resource_extension.rb +4 -4
- data/lib/active_admin/callbacks.rb +1 -1
- data/lib/active_admin/csv_builder.rb +1 -1
- data/lib/active_admin/dependency.rb +7 -75
- data/lib/active_admin/dsl.rb +1 -8
- data/lib/active_admin/error.rb +1 -1
- data/lib/active_admin/filters/active_filter.rb +3 -1
- data/lib/active_admin/filters/active_sidebar.rb +5 -1
- data/lib/active_admin/filters/forms.rb +2 -2
- data/lib/active_admin/filters/formtastic_addons.rb +1 -1
- data/lib/active_admin/filters/resource_extension.rb +3 -3
- data/lib/active_admin/form_builder.rb +3 -3
- data/lib/active_admin/generators/boilerplate.rb +1 -1
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +1 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
- data/lib/active_admin/menu_item.rb +1 -1
- data/lib/active_admin/namespace.rb +2 -2
- data/lib/active_admin/namespace_settings.rb +7 -4
- data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +10 -5
- data/lib/active_admin/orm/active_record/comments.rb +4 -4
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/pundit_adapter.rb +13 -4
- data/lib/active_admin/resource/action_items.rb +1 -1
- data/lib/active_admin/resource/attributes.rb +7 -4
- data/lib/active_admin/resource/menu.rb +3 -3
- data/lib/active_admin/resource/naming.rb +3 -3
- data/lib/active_admin/resource/routes.rb +9 -4
- data/lib/active_admin/resource/scopes.rb +3 -3
- data/lib/active_admin/resource/sidebars.rb +1 -1
- data/lib/active_admin/resource.rb +2 -2
- data/lib/active_admin/resource_collection.rb +2 -2
- data/lib/active_admin/resource_controller/action_builder.rb +10 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
- data/lib/active_admin/resource_dsl.rb +5 -3
- data/lib/active_admin/router.rb +1 -1
- data/lib/active_admin/scope.rb +4 -4
- data/lib/active_admin/settings_node.rb +1 -1
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_helpers/display_helper.rb +10 -2
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +2 -0
- data/lib/active_admin/view_helpers.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +7 -1
- data/lib/active_admin/views/components/attributes_table.rb +3 -3
- data/lib/active_admin/views/components/paginated_collection.rb +1 -1
- data/lib/active_admin/views/components/sidebar_section.rb +0 -3
- data/lib/active_admin/views/components/status_tag.rb +1 -18
- data/lib/active_admin/views/components/table_for.rb +2 -2
- data/lib/active_admin/views/components/tabs.rb +11 -2
- data/lib/active_admin/views/footer.rb +1 -1
- data/lib/active_admin/views/index_as_table.rb +5 -4
- data/lib/active_admin/views/pages/base.rb +3 -0
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin.rb +9 -4
- data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/install/install_generator.rb +6 -2
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -1
- data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
- data/lib/generators/active_admin/page/page_generator.rb +1 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +1 -1
- data/lib/ransack_ext.rb +3 -3
- data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
- data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
- data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
- metadata +106 -95
- data/.circleci/config.yml +0 -572
- data/.github/ISSUE_TEMPLATE.md +0 -20
- data/.gitignore +0 -16
- data/.mdlrc +0 -1
- data/.rspec +0 -1
- data/.rspec_parallel +0 -2
- data/.rubocop.yml +0 -99
- data/.simplecov +0 -9
- data/.yardopts +0 -7
- data/Gemfile +0 -30
- data/Gemfile.common +0 -26
- data/Gemfile.lock +0 -433
- data/Rakefile +0 -24
- data/activeadmin.gemspec +0 -32
- data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
- data/bin/install_chromedriver.sh +0 -17
- data/config/i18n-tasks.yml +0 -26
- data/config/mdl_style.rb +0 -11
- data/cucumber.yml +0 -7
- data/gemfiles/rails_42.gemfile +0 -10
- data/gemfiles/rails_42.gemfile.lock +0 -339
- data/gemfiles/rails_50.gemfile +0 -10
- data/gemfiles/rails_50.gemfile.lock +0 -353
- data/gemfiles/rails_51.gemfile +0 -10
- data/gemfiles/rails_51.gemfile.lock +0 -353
- data/lib/active_admin/event.rb +0 -24
- data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
- data/lib/bug_report_templates/active_admin_master.rb +0 -111
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
- data/tasks/application_generator.rb +0 -50
- data/tasks/docs.rake +0 -64
- data/tasks/gemfiles.rake +0 -8
- data/tasks/lint.rake +0 -110
- data/tasks/local.rake +0 -27
- data/tasks/release.rake +0 -6
- data/tasks/test.rake +0 -42
|
@@ -43,12 +43,6 @@ module ActiveAdmin
|
|
|
43
43
|
@namespaces = Namespace::Store.new
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
# == Deprecated Settings
|
|
47
|
-
|
|
48
|
-
def allow_comments=(*)
|
|
49
|
-
raise "`config.allow_comments` is no longer provided in ActiveAdmin 1.x. Use `config.comments` instead."
|
|
50
|
-
end
|
|
51
|
-
|
|
52
46
|
include AssetRegistration
|
|
53
47
|
|
|
54
48
|
# Event that gets triggered on load of Active Admin
|
|
@@ -68,7 +62,7 @@ module ActiveAdmin
|
|
|
68
62
|
|
|
69
63
|
# Registers a brand new configuration for the given resource.
|
|
70
64
|
def register(resource, options = {}, &block)
|
|
71
|
-
ns = options.fetch(:namespace){ default_namespace }
|
|
65
|
+
ns = options.fetch(:namespace) { default_namespace }
|
|
72
66
|
namespace(ns).register resource, options, &block
|
|
73
67
|
end
|
|
74
68
|
|
|
@@ -98,7 +92,7 @@ module ActiveAdmin
|
|
|
98
92
|
# @&block The registration block.
|
|
99
93
|
#
|
|
100
94
|
def register_page(name, options = {}, &block)
|
|
101
|
-
ns = options.fetch(:namespace){ default_namespace }
|
|
95
|
+
ns = options.fetch(:namespace) { default_namespace }
|
|
102
96
|
namespace(ns).register_page name, options, &block
|
|
103
97
|
end
|
|
104
98
|
|
|
@@ -119,7 +113,7 @@ module ActiveAdmin
|
|
|
119
113
|
def load!
|
|
120
114
|
unless loaded?
|
|
121
115
|
ActiveSupport::Notifications.publish BeforeLoadEvent, self # before_load hook
|
|
122
|
-
files.each{ |file| load file }
|
|
116
|
+
files.each { |file| load file } # load files
|
|
123
117
|
namespace(default_namespace) # init AA resources
|
|
124
118
|
ActiveSupport::Notifications.publish AfterLoadEvent, self # after_load hook
|
|
125
119
|
@@loaded = true
|
|
@@ -127,12 +121,12 @@ module ActiveAdmin
|
|
|
127
121
|
end
|
|
128
122
|
|
|
129
123
|
def load(file)
|
|
130
|
-
DatabaseHitDuringLoad.capture{ super }
|
|
124
|
+
DatabaseHitDuringLoad.capture { super }
|
|
131
125
|
end
|
|
132
126
|
|
|
133
127
|
# Returns ALL the files to be loaded
|
|
134
128
|
def files
|
|
135
|
-
load_paths.flatten.compact.uniq.flat_map{ |path| Dir["#{path}/**/*.rb"] }
|
|
129
|
+
load_paths.flatten.compact.uniq.flat_map { |path| Dir["#{path}/**/*.rb"] }
|
|
136
130
|
end
|
|
137
131
|
|
|
138
132
|
# Creates all the necessary routes for the ActiveAdmin configurations
|
|
@@ -171,9 +165,9 @@ module ActiveAdmin
|
|
|
171
165
|
private
|
|
172
166
|
|
|
173
167
|
def register_default_assets
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
168
|
+
register_stylesheet 'active_admin.css', media: 'screen'
|
|
169
|
+
register_stylesheet 'active_admin/print.css', media: 'print'
|
|
170
|
+
register_javascript 'active_admin.js'
|
|
177
171
|
end
|
|
178
172
|
|
|
179
173
|
# Since app/admin is alphabetically before app/models, we have to remove it
|
|
@@ -35,5 +35,8 @@ module ActiveAdmin
|
|
|
35
35
|
|
|
36
36
|
# To make debugging easier, by default don't stream in development
|
|
37
37
|
register :disable_streaming_in, ['development']
|
|
38
|
+
|
|
39
|
+
# Remove sensitive attributes from being displayed, made editable, or exported by default
|
|
40
|
+
register :filter_attributes, [:encrypted_password, :password, :password_confirmation]
|
|
38
41
|
end
|
|
39
42
|
end
|
|
@@ -2,10 +2,6 @@ module ActiveAdmin
|
|
|
2
2
|
module AssetRegistration
|
|
3
3
|
|
|
4
4
|
def register_stylesheet(path, options = {})
|
|
5
|
-
Deprecation.warn <<-MSG.strip_heredoc
|
|
6
|
-
The `register_stylesheet` config is deprecated and will be removed
|
|
7
|
-
in v2. Import your "#{path}" stylesheet in the active_admin.scss.
|
|
8
|
-
MSG
|
|
9
5
|
stylesheets[path] = options
|
|
10
6
|
end
|
|
11
7
|
|
|
@@ -18,10 +14,6 @@ module ActiveAdmin
|
|
|
18
14
|
end
|
|
19
15
|
|
|
20
16
|
def register_javascript(name)
|
|
21
|
-
Deprecation.warn <<-MSG.strip_heredoc
|
|
22
|
-
The `register_javascript` config is deprecated and will be removed
|
|
23
|
-
in v2. Import your "#{name}" javascript in the active_admin.js.
|
|
24
|
-
MSG
|
|
25
17
|
javascripts.add name
|
|
26
18
|
end
|
|
27
19
|
|
|
@@ -111,16 +111,14 @@ module ActiveAdmin
|
|
|
111
111
|
redirect_backwards_or_to_root
|
|
112
112
|
end
|
|
113
113
|
|
|
114
|
-
body
|
|
115
|
-
|
|
116
|
-
format.csv { render body => error, status: :unauthorized }
|
|
114
|
+
format.csv { render body: error, status: :unauthorized }
|
|
117
115
|
format.json { render json: { error: error }, status: :unauthorized }
|
|
118
116
|
format.xml { render xml: "<error>#{error}</error>", status: :unauthorized }
|
|
119
117
|
end
|
|
120
118
|
end
|
|
121
119
|
|
|
122
120
|
def redirect_backwards_or_to_root
|
|
123
|
-
|
|
121
|
+
redirect_back fallback_location: active_admin_root
|
|
124
122
|
end
|
|
125
123
|
|
|
126
124
|
end
|
|
@@ -22,6 +22,11 @@ module ActiveAdmin
|
|
|
22
22
|
attr_accessor :active_admin_config
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
include Authorization
|
|
26
|
+
include Menu
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
25
30
|
# By default Rails will render un-implemented actions when the view exists. Because Active
|
|
26
31
|
# Admin allows you to not render any of the actions by using the #actions method, we need
|
|
27
32
|
# to check if they are implemented.
|
|
@@ -29,11 +34,6 @@ module ActiveAdmin
|
|
|
29
34
|
raise AbstractController::ActionNotFound unless action_methods.include?(params[:action])
|
|
30
35
|
end
|
|
31
36
|
|
|
32
|
-
include Authorization
|
|
33
|
-
include Menu
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
-
|
|
37
37
|
# Calls the authentication method as defined in ActiveAdmin.authentication_method
|
|
38
38
|
def authenticate_active_admin_user
|
|
39
39
|
send(active_admin_namespace.authentication_method) if active_admin_namespace.authentication_method
|
|
@@ -74,7 +74,7 @@ module ActiveAdmin
|
|
|
74
74
|
|
|
75
75
|
def active_admin_root
|
|
76
76
|
controller, action = active_admin_namespace.root_to.split '#'
|
|
77
|
-
{controller: controller, action: action}
|
|
77
|
+
{ controller: controller, action: action }
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
end
|
|
@@ -22,7 +22,7 @@ module ActiveAdmin
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def current_batch_action
|
|
25
|
-
active_admin_config.batch_actions.detect{ |action| action.sym.to_s == params[:batch_action] }
|
|
25
|
+
active_admin_config.batch_actions.detect { |action| action.sym.to_s == params[:batch_action] }
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
COLLECTION_APPLIES = [
|
|
@@ -57,8 +57,8 @@ module ActiveAdmin
|
|
|
57
57
|
def add_default_batch_action
|
|
58
58
|
destroy_options = {
|
|
59
59
|
priority: 100,
|
|
60
|
-
confirm: proc{ I18n.t('active_admin.batch_actions.delete_confirmation', plural_model: active_admin_config.plural_resource_label.downcase) },
|
|
61
|
-
if: proc{ controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
|
|
60
|
+
confirm: proc { I18n.t('active_admin.batch_actions.delete_confirmation', plural_model: active_admin_config.plural_resource_label.downcase) },
|
|
61
|
+
if: proc { controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
add_batch_action :destroy, proc { I18n.t('active_admin.delete') }, destroy_options do |selected_ids|
|
|
@@ -84,7 +84,7 @@ module ActiveAdmin
|
|
|
84
84
|
|
|
85
85
|
attr_reader :block, :title, :sym
|
|
86
86
|
|
|
87
|
-
DEFAULT_CONFIRM_MESSAGE = proc{ I18n.t 'active_admin.batch_actions.default_confirmation' }
|
|
87
|
+
DEFAULT_CONFIRM_MESSAGE = proc { I18n.t 'active_admin.batch_actions.default_confirmation' }
|
|
88
88
|
|
|
89
89
|
# Create a Batch Action
|
|
90
90
|
#
|
|
@@ -133,7 +133,7 @@ module ActiveAdmin
|
|
|
133
133
|
# Returns the display if block. If the block was not explicitly defined
|
|
134
134
|
# a default block always returning true will be returned.
|
|
135
135
|
def display_if_block
|
|
136
|
-
@options[:if] || proc{ true }
|
|
136
|
+
@options[:if] || proc { true }
|
|
137
137
|
end
|
|
138
138
|
|
|
139
139
|
# Used for sorting
|
|
@@ -75,7 +75,7 @@ module ActiveAdmin
|
|
|
75
75
|
|
|
76
76
|
# def run_create_callbacks
|
|
77
77
|
define_method "run_#{name}_callbacks" do |*args, &block|
|
|
78
|
-
self.class.send("before_#{name}_callbacks").each{ |cbk| run_callback(cbk, *args) }
|
|
78
|
+
self.class.send("before_#{name}_callbacks").each { |cbk| run_callback(cbk, *args) }
|
|
79
79
|
value = block.try :call
|
|
80
80
|
self.class.send("after_#{name}_callbacks").each { |cbk| run_callback(cbk, *args) }
|
|
81
81
|
return value
|
|
@@ -50,7 +50,7 @@ module ActiveAdmin
|
|
|
50
50
|
csv << bom if bom
|
|
51
51
|
|
|
52
52
|
if column_names
|
|
53
|
-
csv << CSV.generate_line(columns.map{ |c| encode c.name, options }, csv_options)
|
|
53
|
+
csv << CSV.generate_line(columns.map { |c| encode c.name, options }, csv_options)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
ActiveRecord::Base.uncached do
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
module Dependency
|
|
3
3
|
module Requirements
|
|
4
|
-
DEVISE = '>=
|
|
4
|
+
DEVISE = '>= 4.0', '< 5'
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
# Provides a clean interface to check for gem dependencies at runtime.
|
|
@@ -55,8 +55,12 @@ module ActiveAdmin
|
|
|
55
55
|
Matcher.new name.to_s
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
def self.
|
|
59
|
-
rails
|
|
58
|
+
def self.rails_version
|
|
59
|
+
rails.spec.version
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def self.supports_zeitwerk?
|
|
63
|
+
rails >= "6.0.0.beta3" && RUBY_ENGINE != "jruby"
|
|
60
64
|
end
|
|
61
65
|
|
|
62
66
|
class Matcher
|
|
@@ -94,78 +98,6 @@ module ActiveAdmin
|
|
|
94
98
|
info = spec ? "#{spec.name} #{spec.version}" : '(missing)'
|
|
95
99
|
"<ActiveAdmin::Dependency::Matcher for #{info}>"
|
|
96
100
|
end
|
|
97
|
-
|
|
98
|
-
def adapter
|
|
99
|
-
@adapter ||= Adapter.const_get(@name.camelize).new self
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def method_missing(method, *args, &block)
|
|
103
|
-
if respond_to_missing?(method)
|
|
104
|
-
adapter.send method, *args, &block
|
|
105
|
-
else
|
|
106
|
-
super
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def respond_to_missing?(method, include_private = false)
|
|
111
|
-
adapter.respond_to?(method) || super
|
|
112
|
-
rescue NameError
|
|
113
|
-
# 🐾
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# Dependency adapters provide an easy way to wrap the conditional logic
|
|
118
|
-
# necessary to support multiple versions of a gem.
|
|
119
|
-
#
|
|
120
|
-
# ActiveAdmin::Dependency.rails.adapter.parameterize 'a b'
|
|
121
|
-
# => 'a_b'
|
|
122
|
-
#
|
|
123
|
-
# ActiveAdmin::Dependency.rails.parameterize 'a b'
|
|
124
|
-
# => 'a_b'
|
|
125
|
-
#
|
|
126
|
-
# ActiveAdmin::Dependency.devise.adapter
|
|
127
|
-
# -> NameError: uninitialized constant ActiveAdmin::Dependency::Adapter::Devise
|
|
128
|
-
#
|
|
129
|
-
module Adapter
|
|
130
|
-
class Base
|
|
131
|
-
def initialize(version)
|
|
132
|
-
@version = version
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
class Rails < Base
|
|
137
|
-
def optional_belongs_to_flag
|
|
138
|
-
if Dependency.rails5?
|
|
139
|
-
{ optional: true }
|
|
140
|
-
else
|
|
141
|
-
{ required: false }
|
|
142
|
-
end
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def parameterize(string)
|
|
146
|
-
if Dependency.rails5?
|
|
147
|
-
string.parameterize separator: '_'
|
|
148
|
-
else
|
|
149
|
-
string.parameterize '_'
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
def redirect_back(controller, fallback_location)
|
|
154
|
-
controller.instance_exec do
|
|
155
|
-
if Dependency.rails5?
|
|
156
|
-
redirect_back fallback_location: fallback_location
|
|
157
|
-
elsif controller.request.headers.key? 'HTTP_REFERER'
|
|
158
|
-
redirect_to :back
|
|
159
|
-
else
|
|
160
|
-
redirect_to fallback_location
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
def render_key
|
|
166
|
-
Dependency.rails5? ? :body : :text
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
101
|
end
|
|
170
102
|
|
|
171
103
|
end
|
data/lib/active_admin/dsl.rb
CHANGED
|
@@ -83,14 +83,7 @@ module ActiveAdmin
|
|
|
83
83
|
# this action item on.
|
|
84
84
|
# :except: A single or array of controller actions not to
|
|
85
85
|
# display this action item on.
|
|
86
|
-
def action_item(name
|
|
87
|
-
if name.is_a?(Hash)
|
|
88
|
-
options = name
|
|
89
|
-
name = nil
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
Deprecation.warn "using `action_item` without a name is deprecated! Use `action_item(:edit)`." unless name
|
|
93
|
-
|
|
86
|
+
def action_item(name, options = {}, &block)
|
|
94
87
|
config.add_action_item(name, options, &block)
|
|
95
88
|
end
|
|
96
89
|
|
data/lib/active_admin/error.rb
CHANGED
|
@@ -22,7 +22,7 @@ module ActiveAdmin
|
|
|
22
22
|
class ErrorLoading < Error
|
|
23
23
|
# Locates the most recent file and line from the caught exception's backtrace.
|
|
24
24
|
def find_cause(folder, backtrace)
|
|
25
|
-
backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/){ [$1, $2] }.first
|
|
25
|
+
backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/) { [$1, $2] }.first
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
@@ -28,7 +28,9 @@ module ActiveAdmin
|
|
|
28
28
|
def label
|
|
29
29
|
# TODO: to remind us to go back to the simpler str.downcase once we support ruby >= 2.4 only.
|
|
30
30
|
translated_predicate = predicate_name.mb_chars.downcase.to_s
|
|
31
|
-
if filter_label
|
|
31
|
+
if filter_label && filter_label.is_a?(Proc)
|
|
32
|
+
"#{filter_label.call} #{translated_predicate}"
|
|
33
|
+
elsif filter_label
|
|
32
34
|
"#{filter_label} #{translated_predicate}"
|
|
33
35
|
elsif related_class
|
|
34
36
|
"#{related_class_name} #{translated_predicate}"
|
|
@@ -5,7 +5,7 @@ module ActiveAdmin
|
|
|
5
5
|
class ActiveSidebar < ActiveAdmin::SidebarSection
|
|
6
6
|
|
|
7
7
|
def initialize
|
|
8
|
-
super
|
|
8
|
+
super 'search_status', sidebar_options
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def block
|
|
@@ -39,6 +39,10 @@ module ActiveAdmin
|
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
+
def title
|
|
43
|
+
I18n.t("active_admin.search_status.headline")
|
|
44
|
+
end
|
|
45
|
+
|
|
42
46
|
protected
|
|
43
47
|
|
|
44
48
|
def sidebar_options
|
|
@@ -48,8 +48,8 @@ module ActiveAdmin
|
|
|
48
48
|
def active_admin_filters_form_for(search, filters, options = {})
|
|
49
49
|
defaults = { builder: ActiveAdmin::Filters::FormBuilder,
|
|
50
50
|
url: collection_path,
|
|
51
|
-
html: {class: 'filter_form'} }
|
|
52
|
-
required = { html: {method: :get},
|
|
51
|
+
html: { class: 'filter_form' } }
|
|
52
|
+
required = { html: { method: :get },
|
|
53
53
|
as: :q }
|
|
54
54
|
options = defaults.deep_merge(options).deep_merge(required)
|
|
55
55
|
|
|
@@ -37,7 +37,7 @@ module ActiveAdmin
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def polymorphic_foreign_type?(method)
|
|
40
|
-
klass.reflect_on_all_associations.select{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
40
|
+
klass.reflect_on_all_associations.select { |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
41
41
|
.map(&:foreign_type).include? method.to_s
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -123,10 +123,10 @@ module ActiveAdmin
|
|
|
123
123
|
# Returns a default set of filters for the associations
|
|
124
124
|
def default_association_filters
|
|
125
125
|
if resource_class.respond_to?(:reflect_on_all_associations)
|
|
126
|
-
poly, not_poly = resource_class.reflect_on_all_associations.partition{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
126
|
+
poly, not_poly = resource_class.reflect_on_all_associations.partition { |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
127
127
|
|
|
128
128
|
# remove deeply nested associations
|
|
129
|
-
not_poly.reject!{ |r| r.chain.length > 2 }
|
|
129
|
+
not_poly.reject! { |r| r.chain.length > 2 }
|
|
130
130
|
|
|
131
131
|
filters = poly.map(&:foreign_type) + not_poly.map(&:name)
|
|
132
132
|
filters.map &:to_sym
|
|
@@ -140,7 +140,7 @@ module ActiveAdmin
|
|
|
140
140
|
end
|
|
141
141
|
|
|
142
142
|
def filters_sidebar_section
|
|
143
|
-
ActiveAdmin::SidebarSection.new :filters, only: :index, if: ->{ active_admin_config.filters.any? } do
|
|
143
|
+
ActiveAdmin::SidebarSection.new :filters, only: :index, if: -> { active_admin_config.filters.any? } do
|
|
144
144
|
active_admin_filters_form_for assigns[:search], active_admin_config.filters
|
|
145
145
|
end
|
|
146
146
|
end
|
|
@@ -20,7 +20,7 @@ module ActiveAdmin
|
|
|
20
20
|
self.input_class_finder = ::Formtastic::InputClassFinder
|
|
21
21
|
self.action_class_finder = ::Formtastic::ActionClassFinder
|
|
22
22
|
|
|
23
|
-
def cancel_link(url = {action: "index"}, html_options = {}, li_attrs = {})
|
|
23
|
+
def cancel_link(url = { action: "index" }, html_options = {}, li_attrs = {})
|
|
24
24
|
li_attrs[:class] ||= "cancel"
|
|
25
25
|
li_content = template.link_to I18n.t('active_admin.cancel'), url, html_options
|
|
26
26
|
template.content_tag(:li, li_content, li_attrs)
|
|
@@ -111,7 +111,7 @@ module ActiveAdmin
|
|
|
111
111
|
end
|
|
112
112
|
elsif allow_destroy?(form_builder.object)
|
|
113
113
|
form_builder.input(:_destroy, as: :boolean,
|
|
114
|
-
wrapper_html: {class: 'has_many_delete'},
|
|
114
|
+
wrapper_html: { class: 'has_many_delete' },
|
|
115
115
|
label: I18n.t('active_admin.has_many_delete'))
|
|
116
116
|
end
|
|
117
117
|
|
|
@@ -163,7 +163,7 @@ module ActiveAdmin
|
|
|
163
163
|
class: class_string,
|
|
164
164
|
for_options: { child_index: placeholder }
|
|
165
165
|
}
|
|
166
|
-
html = template.capture{ __getobj__.send(:inputs_for_nested_attributes, opts, &form_block) }
|
|
166
|
+
html = template.capture { __getobj__.send(:inputs_for_nested_attributes, opts, &form_block) }
|
|
167
167
|
text = new_record.is_a?(String) ? new_record : I18n.t('active_admin.has_many_new', model: assoc_name.human)
|
|
168
168
|
|
|
169
169
|
template.link_to text, '#', class: "button has_many_add", data: {
|
|
@@ -34,7 +34,7 @@ module ActiveAdmin
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def form_inputs
|
|
37
|
-
attributes.reject{|a| %w(id created_at updated_at).include? a}.map{ |a| form_input(a) }.join("\n")
|
|
37
|
+
attributes.reject { |a| %w(id created_at updated_at).include? a }.map { |a| form_input(a) }.join("\n")
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def form_input(name)
|
|
@@ -19,7 +19,7 @@ module ActiveAdmin
|
|
|
19
19
|
private
|
|
20
20
|
def datepicker_options
|
|
21
21
|
options = self.options.fetch(:datepicker_options, {})
|
|
22
|
-
options = Hash[options.map{ |k, v| [k.to_s.camelcase(:lower), v] }]
|
|
22
|
+
options = Hash[options.map { |k, v| [k.to_s.camelcase(:lower), v] }]
|
|
23
23
|
{ datepicker_options: options }
|
|
24
24
|
end
|
|
25
25
|
end
|
|
@@ -57,8 +57,8 @@ module ActiveAdmin
|
|
|
57
57
|
|
|
58
58
|
def current_filter
|
|
59
59
|
@current_filter ||= begin
|
|
60
|
-
methods = filters.map{ |f| "#{method}_#{f}" }
|
|
61
|
-
methods.detect{ |m| @object.public_send m } || methods.first
|
|
60
|
+
methods = filters.map { |f| "#{method}_#{f}" }
|
|
61
|
+
methods.detect { |m| @object.public_send m } || methods.first
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
|
|
@@ -50,7 +50,7 @@ module ActiveAdmin
|
|
|
50
50
|
@url = options[:url] || '#'
|
|
51
51
|
@priority = options[:priority] || 10
|
|
52
52
|
@html_options = options[:html_options] || {}
|
|
53
|
-
@should_display = options[:if] || proc{true}
|
|
53
|
+
@should_display = options[:if] || proc { true }
|
|
54
54
|
@parent = options[:parent]
|
|
55
55
|
|
|
56
56
|
yield(self) if block_given? # Builder style syntax
|
|
@@ -150,8 +150,8 @@ module ActiveAdmin
|
|
|
150
150
|
if logout_link_path
|
|
151
151
|
html_options = html_options.reverse_merge(method: logout_link_method || :get)
|
|
152
152
|
menu.add id: 'logout', priority: priority, html_options: html_options,
|
|
153
|
-
label: ->{ I18n.t 'active_admin.logout' },
|
|
154
|
-
url: ->{ render_or_call_method_or_proc_on self, active_admin_namespace.logout_link_path },
|
|
153
|
+
label: -> { I18n.t 'active_admin.logout' },
|
|
154
|
+
url: -> { render_or_call_method_or_proc_on self, active_admin_namespace.logout_link_path },
|
|
155
155
|
if: :current_active_admin_user?
|
|
156
156
|
end
|
|
157
157
|
end
|
|
@@ -17,16 +17,19 @@ module ActiveAdmin
|
|
|
17
17
|
# Set the site title image displayed in the main layout (has precendence over :site_title)
|
|
18
18
|
register :site_title_image, "", :string_symbol_or_proc
|
|
19
19
|
|
|
20
|
+
# Add to the site head
|
|
21
|
+
register :head, "", :string_symbol_or_proc
|
|
22
|
+
|
|
20
23
|
# Set the site footer text (defaults to Powered by ActiveAdmin text with version)
|
|
21
24
|
register :footer, "", :string_symbol_or_proc
|
|
22
25
|
|
|
23
26
|
# Set a favicon
|
|
24
27
|
register :favicon, false
|
|
25
28
|
|
|
26
|
-
# Additional meta tags to place in head of logged in pages
|
|
29
|
+
# Additional meta tags to place in head of logged in pages
|
|
27
30
|
register :meta_tags, {}
|
|
28
31
|
|
|
29
|
-
# Additional meta tags to place in head of logged out pages
|
|
32
|
+
# Additional meta tags to place in head of logged out pages
|
|
30
33
|
register :meta_tags_for_logged_out_pages, { robots: "noindex, nofollow" }
|
|
31
34
|
|
|
32
35
|
# The view factory to use to generate all the view classes. Take
|
|
@@ -53,10 +56,10 @@ module ActiveAdmin
|
|
|
53
56
|
# Whether filters are enabled
|
|
54
57
|
register :filters, true
|
|
55
58
|
|
|
56
|
-
# The namespace root
|
|
59
|
+
# The namespace root
|
|
57
60
|
register :root_to, 'dashboard#index'
|
|
58
61
|
|
|
59
|
-
# Options that
|
|
62
|
+
# Options that are passed to root_to
|
|
60
63
|
register :root_to_options, {}
|
|
61
64
|
|
|
62
65
|
# Options passed to the routes, i.e. { path: '/custom' }
|
|
@@ -3,7 +3,7 @@ module ActiveAdmin
|
|
|
3
3
|
|
|
4
4
|
self.table_name = "#{table_name_prefix}active_admin_comments#{table_name_suffix}"
|
|
5
5
|
|
|
6
|
-
belongs_to :resource,
|
|
6
|
+
belongs_to :resource, polymorphic: true, optional: true
|
|
7
7
|
belongs_to :author, polymorphic: true
|
|
8
8
|
|
|
9
9
|
validates_presence_of :body, :namespace, :resource
|
|
@@ -18,7 +18,7 @@ module ActiveAdmin
|
|
|
18
18
|
def self.find_for_resource_in_namespace(resource, namespace)
|
|
19
19
|
where(
|
|
20
20
|
resource_type: resource_type(resource),
|
|
21
|
-
resource_id: resource,
|
|
21
|
+
resource_id: resource.id,
|
|
22
22
|
namespace: namespace.to_s
|
|
23
23
|
).order(ActiveAdmin.application.namespaces[namespace.to_sym].comments_order)
|
|
24
24
|
end
|
|
@@ -11,10 +11,12 @@ module ActiveAdmin
|
|
|
11
11
|
attr_accessor :resource
|
|
12
12
|
|
|
13
13
|
def build(resource)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
if authorized?(ActiveAdmin::Auth::READ, ActiveAdmin::Comment)
|
|
15
|
+
@resource = resource
|
|
16
|
+
@comments = active_admin_authorization.scope_collection(ActiveAdmin::Comment.find_for_resource_in_namespace(resource, active_admin_namespace.name).includes(:author).page(params[:page]))
|
|
17
|
+
super(title, for: resource)
|
|
18
|
+
build_comments
|
|
19
|
+
end
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
protected
|
|
@@ -32,7 +34,10 @@ module ActiveAdmin
|
|
|
32
34
|
end
|
|
33
35
|
|
|
34
36
|
text_node paginate @comments
|
|
35
|
-
|
|
37
|
+
|
|
38
|
+
if authorized?(ActiveAdmin::Auth::CREATE, ActiveAdmin::Comment)
|
|
39
|
+
build_comment_form
|
|
40
|
+
end
|
|
36
41
|
end
|
|
37
42
|
|
|
38
43
|
def build_comment(comment)
|
|
@@ -64,21 +64,21 @@ ActiveAdmin.after_load do |app|
|
|
|
64
64
|
def create
|
|
65
65
|
create! do |success, failure|
|
|
66
66
|
success.html do
|
|
67
|
-
|
|
67
|
+
redirect_back fallback_location: active_admin_root
|
|
68
68
|
end
|
|
69
69
|
failure.html do
|
|
70
70
|
flash[:error] = I18n.t 'active_admin.comments.errors.empty_text'
|
|
71
|
-
|
|
71
|
+
redirect_back fallback_location: active_admin_root
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
def destroy
|
|
76
76
|
destroy! do |success, failure|
|
|
77
77
|
success.html do
|
|
78
|
-
|
|
78
|
+
redirect_back fallback_location: active_admin_root
|
|
79
79
|
end
|
|
80
80
|
failure.html do
|
|
81
|
-
|
|
81
|
+
redirect_back fallback_location: active_admin_root
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
end
|