activeadmin 2.4.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +192 -30
- data/CONTRIBUTING.md +42 -62
- data/README.md +4 -4
- data/app/assets/javascripts/active_admin/base.js +517 -0
- data/app/assets/stylesheets/active_admin/_base.scss +29 -29
- data/app/assets/stylesheets/active_admin/_header.scss +40 -8
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
- data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +8 -0
- data/app/assets/stylesheets/active_admin/print.scss +2 -2
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
- data/app/javascript/active_admin/base.js +28 -0
- data/app/{assets/javascripts/active_admin/lib/batch_actions.es6 → javascript/active_admin/initializers/batch-actions.js} +4 -2
- data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
- data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
- data/app/javascript/active_admin/initializers/filters.js +10 -0
- data/app/javascript/active_admin/initializers/per-page.js +13 -0
- data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
- data/app/{assets/javascripts/active_admin/lib/checkbox-toggler.es6 → javascript/active_admin/lib/checkbox-toggler.js} +5 -5
- data/app/{assets/javascripts/active_admin/lib/dropdown-menu.es6 → javascript/active_admin/lib/dropdown-menu.js} +3 -10
- data/app/javascript/active_admin/lib/filters.js +39 -0
- data/app/{assets/javascripts/active_admin/lib/modal_dialog.es6 → javascript/active_admin/lib/modal-dialog.js} +10 -8
- data/app/javascript/active_admin/lib/per-page.js +38 -0
- data/app/{assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 → javascript/active_admin/lib/table-checkbox-toggler.js} +5 -3
- data/app/javascript/active_admin/lib/utils.js +40 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
- data/app/views/layouts/active_admin_logged_out.html.erb +15 -5
- data/config/locales/ar.yml +6 -6
- data/config/locales/az.yml +138 -0
- data/config/locales/en-CA.yml +3 -3
- data/config/locales/en-GB.yml +3 -3
- data/config/locales/en.yml +3 -3
- data/config/locales/es-MX.yml +2 -1
- data/config/locales/es.yml +5 -5
- data/config/locales/fr.yml +4 -4
- data/config/locales/it.yml +18 -0
- data/config/locales/ja.yml +3 -3
- data/config/locales/lv.yml +2 -2
- data/config/locales/vi.yml +6 -5
- data/docs/0-installation.md +26 -2
- data/docs/1-general-configuration.md +20 -0
- data/docs/11-decorators.md +16 -5
- data/docs/2-resource-customization.md +10 -1
- data/docs/3-index-pages.md +1 -1
- data/docs/5-forms.md +6 -1
- data/docs/6-show-pages.md +12 -0
- data/docs/9-batch-actions.md +2 -2
- data/docs/Gemfile +2 -2
- data/docs/Gemfile.lock +124 -113
- data/docs/_includes/top-menu.html +1 -1
- data/docs/documentation.md +1 -1
- data/docs/index.html +6 -6
- data/lib/active_admin/application.rb +14 -14
- data/lib/active_admin/application_settings.rb +3 -3
- data/lib/active_admin/authorization_adapter.rb +3 -3
- data/lib/active_admin/base_controller/authorization.rb +13 -12
- data/lib/active_admin/base_controller.rb +4 -4
- data/lib/active_admin/batch_actions/controller.rb +3 -3
- data/lib/active_admin/batch_actions/resource_extension.rb +9 -8
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +3 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +6 -6
- data/lib/active_admin/batch_actions/views/selection_cells.rb +3 -3
- data/lib/active_admin/cancan_adapter.rb +1 -1
- data/lib/active_admin/collection_decorator.rb +31 -0
- data/lib/active_admin/csv_builder.rb +11 -7
- data/lib/active_admin/dependency.rb +11 -11
- data/lib/active_admin/devise.rb +5 -5
- data/lib/active_admin/dsl.rb +1 -1
- data/lib/active_admin/dynamic_settings_node.rb +2 -2
- data/lib/active_admin/engine.rb +10 -8
- data/lib/active_admin/error.rb +0 -2
- data/lib/active_admin/filters/active.rb +1 -1
- data/lib/active_admin/filters/active_filter.rb +6 -7
- data/lib/active_admin/filters/active_sidebar.rb +5 -5
- data/lib/active_admin/filters/forms.rb +6 -6
- data/lib/active_admin/filters/formtastic_addons.rb +1 -6
- data/lib/active_admin/filters/resource_extension.rb +1 -1
- data/lib/active_admin/filters.rb +7 -7
- data/lib/active_admin/form_builder.rb +24 -20
- data/lib/active_admin/generators/boilerplate.rb +1 -1
- data/lib/active_admin/helpers/optional_display.rb +2 -2
- data/lib/active_admin/inputs/datepicker_input.rb +1 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +4 -4
- data/lib/active_admin/inputs/filters/base.rb +1 -1
- data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
- data/lib/active_admin/inputs/filters/date_range_input.rb +15 -12
- data/lib/active_admin/inputs/filters/select_input.rb +2 -2
- data/lib/active_admin/localizers/resource_localizer.rb +3 -3
- data/lib/active_admin/localizers.rb +1 -1
- data/lib/active_admin/menu.rb +6 -3
- data/lib/active_admin/menu_item.rb +7 -7
- data/lib/active_admin/namespace.rb +12 -12
- data/lib/active_admin/namespace_settings.rb +8 -5
- data/lib/active_admin/order_clause.rb +1 -1
- data/lib/active_admin/orm/active_record/comments/comment.rb +3 -3
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +19 -19
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
- data/lib/active_admin/orm/active_record/comments.rb +19 -19
- data/lib/active_admin/orm/active_record.rb +1 -1
- data/lib/active_admin/page.rb +1 -1
- data/lib/active_admin/pundit_adapter.rb +5 -5
- data/lib/active_admin/resource/action_items.rb +5 -5
- data/lib/active_admin/resource/attributes.rb +1 -1
- data/lib/active_admin/resource/belongs_to.rb +2 -2
- data/lib/active_admin/resource/controllers.rb +1 -1
- data/lib/active_admin/resource/menu.rb +4 -4
- data/lib/active_admin/resource/naming.rb +5 -5
- data/lib/active_admin/resource/routes.rb +5 -7
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/sidebars.rb +1 -1
- data/lib/active_admin/resource.rb +18 -18
- data/lib/active_admin/resource_controller/data_access.rb +1 -1
- data/lib/active_admin/resource_controller/decorators.rb +6 -28
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +3 -2
- data/lib/active_admin/resource_controller/streaming.rb +7 -6
- data/lib/active_admin/resource_controller.rb +12 -11
- data/lib/active_admin/resource_dsl.rb +5 -5
- data/lib/active_admin/scope.rb +6 -6
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +17 -17
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +3 -3
- data/lib/active_admin/view_helpers/display_helper.rb +5 -5
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -1
- data/lib/active_admin/view_helpers/fields_for.rb +2 -2
- data/lib/active_admin/view_helpers.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +5 -5
- data/lib/active_admin/views/components/attributes_table.rb +5 -5
- data/lib/active_admin/views/components/blank_slate.rb +1 -1
- data/lib/active_admin/views/components/dropdown_menu.rb +8 -8
- data/lib/active_admin/views/components/index_list.rb +3 -3
- data/lib/active_admin/views/components/menu.rb +1 -1
- data/lib/active_admin/views/components/menu_item.rb +4 -4
- data/lib/active_admin/views/components/paginated_collection.rb +19 -18
- data/lib/active_admin/views/components/panel.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +7 -5
- data/lib/active_admin/views/components/site_title.rb +1 -1
- data/lib/active_admin/views/components/status_tag.rb +11 -11
- data/lib/active_admin/views/components/table_for.rb +18 -17
- data/lib/active_admin/views/components/tabs.rb +3 -3
- data/lib/active_admin/views/footer.rb +2 -1
- data/lib/active_admin/views/header.rb +2 -2
- data/lib/active_admin/views/index_as_blog.rb +1 -1
- data/lib/active_admin/views/index_as_grid.rb +1 -1
- data/lib/active_admin/views/index_as_table.rb +16 -16
- data/lib/active_admin/views/pages/base.rb +15 -11
- data/lib/active_admin/views/pages/index.rb +15 -13
- data/lib/active_admin/views/tabbed_navigation.rb +2 -2
- data/lib/active_admin/views/title_bar.rb +1 -1
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin.rb +61 -63
- data/lib/activeadmin.rb +1 -1
- data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
- data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
- data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
- data/lib/generators/active_admin/install/install_generator.rb +14 -8
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +9 -2
- data/lib/generators/active_admin/page/page_generator.rb +1 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +3 -3
- data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
- data/lib/ransack_ext.rb +8 -8
- metadata +46 -84
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.es6 +0 -23
- data/app/assets/javascripts/active_admin/initializers/filters.es6 +0 -45
- data/app/assets/javascripts/active_admin/lib/active_admin.es6 +0 -41
- data/app/assets/javascripts/active_admin/lib/per_page.es6 +0 -47
- /data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
- /data/app/{assets/javascripts/active_admin/ext/jquery-ui.es6 → javascript/active_admin/ext/jquery-ui.js} +0 -0
- /data/app/{assets/javascripts/active_admin/ext/jquery.es6 → javascript/active_admin/ext/jquery.js} +0 -0
- /data/app/{assets/javascripts/active_admin/initializers/datepicker.es6 → javascript/active_admin/initializers/datepicker.js} +0 -0
- /data/app/{assets/javascripts/active_admin/lib/has_many.es6 → javascript/active_admin/initializers/has-many.js} +0 -0
- /data/app/{assets/javascripts/active_admin/initializers/tabs.es6 → javascript/active_admin/initializers/tabs.js} +0 -0
|
@@ -7,12 +7,12 @@ module ActiveAdmin
|
|
|
7
7
|
# To disable this menu item, call `menu(false)` from the DSL
|
|
8
8
|
def menu_item_options=(options)
|
|
9
9
|
if options == false
|
|
10
|
-
@include_in_menu
|
|
10
|
+
@include_in_menu = false
|
|
11
11
|
@menu_item_options = {}
|
|
12
12
|
else
|
|
13
13
|
@include_in_menu = true
|
|
14
14
|
@navigation_menu_name = options[:menu_name]
|
|
15
|
-
@menu_item_options
|
|
15
|
+
@menu_item_options = default_menu_options.merge options
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
@@ -27,8 +27,8 @@ module ActiveAdmin
|
|
|
27
27
|
{
|
|
28
28
|
id: resource_name.plural,
|
|
29
29
|
label: proc { resource.plural_resource_label },
|
|
30
|
-
url:
|
|
31
|
-
if:
|
|
30
|
+
url: proc { resource.route_collection_path(params, url_options) },
|
|
31
|
+
if: proc { authorized?(Auth::READ, menu_resource_class) }
|
|
32
32
|
}
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -4,7 +4,7 @@ module ActiveAdmin
|
|
|
4
4
|
module Naming
|
|
5
5
|
def resource_name
|
|
6
6
|
@resource_name ||= begin
|
|
7
|
-
as = @options[:as].gsub /\s/,
|
|
7
|
+
as = @options[:as].gsub /\s/, "" if @options[:as]
|
|
8
8
|
|
|
9
9
|
if as || !resource_class.respond_to?(:model_name)
|
|
10
10
|
Name.new resource_class, as
|
|
@@ -17,13 +17,13 @@ module ActiveAdmin
|
|
|
17
17
|
# Returns the name to call this resource such as "Bank Account"
|
|
18
18
|
def resource_label
|
|
19
19
|
resource_name.translate count: 1,
|
|
20
|
-
|
|
20
|
+
default: resource_name.to_s.gsub("::", " ").titleize
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
# Returns the plural version of this resource such as "Bank Accounts"
|
|
24
24
|
def plural_resource_label(options = {})
|
|
25
|
-
defaults = { count:
|
|
26
|
-
|
|
25
|
+
defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
|
|
26
|
+
default: resource_label.pluralize.titleize }
|
|
27
27
|
resource_name.translate defaults.merge options
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -46,7 +46,7 @@ module ActiveAdmin
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
def translate(options = {})
|
|
49
|
-
I18n.t i18n_key, { scope: [:activerecord, :models] }.merge(options)
|
|
49
|
+
I18n.t i18n_key, **{ scope: [:activerecord, :models] }.merge(options)
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def route_key
|
|
@@ -42,8 +42,6 @@ module ActiveAdmin
|
|
|
42
42
|
config[:route_collection_name] == config[:route_instance_name]
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
private
|
|
46
|
-
|
|
47
45
|
class RouteBuilder
|
|
48
46
|
def initialize(resource)
|
|
49
47
|
@resource = resource
|
|
@@ -98,13 +96,13 @@ module ActiveAdmin
|
|
|
98
96
|
suffix = options[:suffix] || "path"
|
|
99
97
|
route = []
|
|
100
98
|
|
|
101
|
-
route << options[:action]
|
|
102
|
-
route << resource.route_prefix
|
|
99
|
+
route << options[:action] # "batch_action", "edit" or "new"
|
|
100
|
+
route << resource.route_prefix # "admin"
|
|
103
101
|
route << belongs_to_name if nested? # "category"
|
|
104
|
-
route << resource_path_name
|
|
105
|
-
route << suffix
|
|
102
|
+
route << resource_path_name # "posts" or "post"
|
|
103
|
+
route << suffix # "path" or "index path"
|
|
106
104
|
|
|
107
|
-
route.compact.join(
|
|
105
|
+
route.compact.join("_").to_sym # :admin_category_posts_path
|
|
108
106
|
end
|
|
109
107
|
|
|
110
108
|
# @return params to pass to instance path
|
|
@@ -38,10 +38,10 @@ module ActiveAdmin
|
|
|
38
38
|
options = args.extract_options!
|
|
39
39
|
method = args.first
|
|
40
40
|
|
|
41
|
-
scope_to_config[:method]
|
|
42
|
-
scope_to_config[:association_method]
|
|
43
|
-
scope_to_config[:if]
|
|
44
|
-
scope_to_config[:unless]
|
|
41
|
+
scope_to_config[:method] = block || method
|
|
42
|
+
scope_to_config[:association_method] = options[:association_method]
|
|
43
|
+
scope_to_config[:if] = options[:if]
|
|
44
|
+
scope_to_config[:unless] = options[:unless]
|
|
45
45
|
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -55,10 +55,10 @@ module ActiveAdmin
|
|
|
55
55
|
|
|
56
56
|
def scope_to_config
|
|
57
57
|
@scope_to_config ||= {
|
|
58
|
-
method:
|
|
58
|
+
method: nil,
|
|
59
59
|
association_method: nil,
|
|
60
|
-
if:
|
|
61
|
-
unless:
|
|
60
|
+
if: nil,
|
|
61
|
+
unless: nil
|
|
62
62
|
}
|
|
63
63
|
end
|
|
64
64
|
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
9
|
-
require
|
|
10
|
-
require
|
|
11
|
-
require
|
|
12
|
-
require
|
|
13
|
-
require
|
|
14
|
-
require
|
|
15
|
-
require
|
|
1
|
+
require "active_admin/resource/action_items"
|
|
2
|
+
require "active_admin/resource/attributes"
|
|
3
|
+
require "active_admin/resource/controllers"
|
|
4
|
+
require "active_admin/resource/menu"
|
|
5
|
+
require "active_admin/resource/page_presenters"
|
|
6
|
+
require "active_admin/resource/pagination"
|
|
7
|
+
require "active_admin/resource/routes"
|
|
8
|
+
require "active_admin/resource/naming"
|
|
9
|
+
require "active_admin/resource/scopes"
|
|
10
|
+
require "active_admin/resource/includes"
|
|
11
|
+
require "active_admin/resource/scope_to"
|
|
12
|
+
require "active_admin/resource/sidebars"
|
|
13
|
+
require "active_admin/resource/belongs_to"
|
|
14
|
+
require "active_admin/resource/ordering"
|
|
15
|
+
require "active_admin/resource/model"
|
|
16
16
|
|
|
17
17
|
module ActiveAdmin
|
|
18
18
|
|
|
@@ -27,7 +27,7 @@ module ActiveAdmin
|
|
|
27
27
|
class Resource
|
|
28
28
|
|
|
29
29
|
# Event dispatched when a new resource is registered
|
|
30
|
-
RegisterEvent =
|
|
30
|
+
RegisterEvent = "active_admin.resource.register".freeze
|
|
31
31
|
|
|
32
32
|
# The namespace this config belongs to
|
|
33
33
|
attr_reader :namespace
|
|
@@ -44,7 +44,7 @@ module ActiveAdmin
|
|
|
44
44
|
# The default sort order to use in the controller
|
|
45
45
|
attr_writer :sort_order
|
|
46
46
|
def sort_order
|
|
47
|
-
@sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s :
|
|
47
|
+
@sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s : "id") + "_desc"
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
# Set the configuration for the CSV
|
|
@@ -70,7 +70,7 @@ module ActiveAdmin
|
|
|
70
70
|
def initialize(namespace, resource_class, options = {})
|
|
71
71
|
@namespace = namespace
|
|
72
72
|
@resource_class_name = "::#{resource_class.name}"
|
|
73
|
-
@options
|
|
73
|
+
@options = options
|
|
74
74
|
@sort_order = options[:sort_order]
|
|
75
75
|
@member_actions = []
|
|
76
76
|
@collection_actions = []
|
|
@@ -258,7 +258,7 @@ module ActiveAdmin
|
|
|
258
258
|
end
|
|
259
259
|
|
|
260
260
|
def collection_applies(options = {})
|
|
261
|
-
only
|
|
261
|
+
only = Array(options.fetch(:only, COLLECTION_APPLIES))
|
|
262
262
|
except = Array(options.fetch(:except, []))
|
|
263
263
|
|
|
264
264
|
COLLECTION_APPLIES & only - except
|
|
@@ -28,7 +28,7 @@ module ActiveAdmin
|
|
|
28
28
|
|
|
29
29
|
def decorate?
|
|
30
30
|
case action_name
|
|
31
|
-
when
|
|
31
|
+
when "new", "edit", "create", "update"
|
|
32
32
|
form = active_admin_config.get_page_presenter :form
|
|
33
33
|
form && form.options[:decorate] && decorator_class.present?
|
|
34
34
|
else
|
|
@@ -53,49 +53,27 @@ module ActiveAdmin
|
|
|
53
53
|
|
|
54
54
|
def self.wrap(decorator)
|
|
55
55
|
collection_decorator = find_collection_decorator(decorator)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
name = "#{collection_decorator.name} of #{decorator} + ActiveAdmin"
|
|
59
|
-
@cache[name] ||= wrap! collection_decorator, name
|
|
60
|
-
else
|
|
61
|
-
collection_decorator
|
|
62
|
-
end
|
|
56
|
+
name = "#{collection_decorator.name} of #{decorator} + ActiveAdmin"
|
|
57
|
+
@cache[name] ||= wrap! collection_decorator, name
|
|
63
58
|
end
|
|
64
59
|
|
|
65
|
-
private
|
|
66
|
-
|
|
67
60
|
def self.wrap!(parent, name)
|
|
68
61
|
::Class.new parent do
|
|
69
62
|
delegate :reorder, :page, :current_page, :total_pages, :limit_value,
|
|
70
63
|
:total_count, :total_pages, :offset, :to_key, :group_values,
|
|
71
|
-
:except, :find_each, :ransack
|
|
64
|
+
:except, :find_each, :ransack, to: :object
|
|
72
65
|
|
|
73
66
|
define_singleton_method(:name) { name }
|
|
74
67
|
end
|
|
75
68
|
end
|
|
76
69
|
|
|
77
|
-
# Draper::CollectionDecorator was introduced in 1.0.0
|
|
78
|
-
# Draper::Decorator#collection_decorator_class was introduced in 1.3.0
|
|
79
70
|
def self.find_collection_decorator(decorator)
|
|
80
|
-
if
|
|
71
|
+
if decorator.respond_to?(:collection_decorator_class)
|
|
81
72
|
decorator.collection_decorator_class
|
|
82
|
-
elsif Dependency.draper? '>= 1.0.0'
|
|
83
|
-
draper_collection_decorator
|
|
84
73
|
else
|
|
85
|
-
|
|
74
|
+
CollectionDecorator
|
|
86
75
|
end
|
|
87
76
|
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
77
|
end
|
|
100
78
|
end
|
|
101
79
|
end
|
|
@@ -25,8 +25,9 @@ module ActiveAdmin
|
|
|
25
25
|
return ActiveAdmin::Model.new(active_admin_config, record)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
belongs_to_resource = active_admin_config.belongs_to_config.try(:resource)
|
|
29
|
+
if belongs_to_resource && record.is_a?(belongs_to_resource.resource_class)
|
|
30
|
+
return ActiveAdmin::Model.new(belongs_to_resource, record)
|
|
30
31
|
end
|
|
31
32
|
|
|
32
33
|
record
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "csv"
|
|
2
2
|
|
|
3
3
|
module ActiveAdmin
|
|
4
4
|
class ResourceController < BaseController
|
|
@@ -18,11 +18,12 @@ module ActiveAdmin
|
|
|
18
18
|
protected
|
|
19
19
|
|
|
20
20
|
def stream_resource(&block)
|
|
21
|
-
headers[
|
|
22
|
-
headers[
|
|
21
|
+
headers["X-Accel-Buffering"] = "no"
|
|
22
|
+
headers["Cache-Control"] = "no-cache"
|
|
23
|
+
headers["Last-Modified"] = Time.current.httpdate
|
|
23
24
|
|
|
24
25
|
if ActiveAdmin.application.disable_streaming_in.include? Rails.env
|
|
25
|
-
self.response_body = block[
|
|
26
|
+
self.response_body = block[""]
|
|
26
27
|
else
|
|
27
28
|
self.response_body = Enumerator.new &block
|
|
28
29
|
end
|
|
@@ -33,8 +34,8 @@ module ActiveAdmin
|
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
def stream_csv
|
|
36
|
-
headers[
|
|
37
|
-
headers[
|
|
37
|
+
headers["Content-Type"] = "text/csv; charset=utf-8" # In Rails 5 it's set to HTML??
|
|
38
|
+
headers["Content-Disposition"] = %{attachment; filename="#{csv_filename}"}
|
|
38
39
|
stream_resource &active_admin_config.csv_builder.method(:build).to_proc.curry[self]
|
|
39
40
|
end
|
|
40
41
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
1
|
+
require "active_admin/collection_decorator"
|
|
2
|
+
require "active_admin/resource_controller/action_builder"
|
|
3
|
+
require "active_admin/resource_controller/data_access"
|
|
4
|
+
require "active_admin/resource_controller/decorators"
|
|
5
|
+
require "active_admin/resource_controller/polymorphic_routes"
|
|
6
|
+
require "active_admin/resource_controller/scoping"
|
|
7
|
+
require "active_admin/resource_controller/streaming"
|
|
8
|
+
require "active_admin/resource_controller/sidebars"
|
|
9
|
+
require "active_admin/resource_controller/resource_class_methods"
|
|
9
10
|
|
|
10
11
|
module ActiveAdmin
|
|
11
12
|
# All Resources Controller inherits from this controller.
|
|
@@ -24,13 +25,13 @@ module ActiveAdmin
|
|
|
24
25
|
include Streaming
|
|
25
26
|
include Sidebars
|
|
26
27
|
include ViewHelpers::DownloadFormatLinksHelper
|
|
27
|
-
extend
|
|
28
|
+
extend ResourceClassMethods
|
|
28
29
|
|
|
29
30
|
def self.active_admin_config=(config)
|
|
30
31
|
if @active_admin_config = config
|
|
31
32
|
defaults resource_class: config.resource_class,
|
|
32
|
-
route_prefix:
|
|
33
|
-
instance_name:
|
|
33
|
+
route_prefix: config.route_prefix,
|
|
34
|
+
instance_name: config.resource_name.singular
|
|
34
35
|
end
|
|
35
36
|
end
|
|
36
37
|
|
|
@@ -183,16 +183,16 @@ module ActiveAdmin
|
|
|
183
183
|
# == Before / After Destroy
|
|
184
184
|
# Called before and after the object is destroyed from the database.
|
|
185
185
|
#
|
|
186
|
-
delegate :before_build,
|
|
187
|
-
delegate :before_create,
|
|
188
|
-
delegate :before_update,
|
|
189
|
-
delegate :before_save,
|
|
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
|
|
190
190
|
delegate :before_destroy, :after_destroy, to: :controller
|
|
191
191
|
|
|
192
192
|
# This code defines both *_filter and *_action for Rails 5.0 and *_action for Rails >= 5.1
|
|
193
193
|
phases = [
|
|
194
194
|
:before, :skip_before,
|
|
195
|
-
:after,
|
|
195
|
+
:after, :skip_after,
|
|
196
196
|
:around, :skip
|
|
197
197
|
]
|
|
198
198
|
keywords = if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1
|
data/lib/active_admin/scope.rb
CHANGED
|
@@ -45,17 +45,17 @@ module ActiveAdmin
|
|
|
45
45
|
@scope_block = block
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
-
@localizer
|
|
49
|
-
@show_count
|
|
50
|
-
@display_if_block = options[:if]
|
|
51
|
-
@default_block
|
|
52
|
-
@group
|
|
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)
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def name
|
|
56
56
|
case @name
|
|
57
57
|
when String then @name
|
|
58
|
-
when Symbol then @localizer ? @localizer.t(@name, scope:
|
|
58
|
+
when Symbol then @localizer ? @localizer.t(@name, scope: "scopes") : @name.to_s.titleize
|
|
59
59
|
else @name
|
|
60
60
|
end
|
|
61
61
|
end
|
data/lib/active_admin/version.rb
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "active_admin/abstract_view_factory"
|
|
2
2
|
|
|
3
3
|
module ActiveAdmin
|
|
4
4
|
class ViewFactory < AbstractViewFactory
|
|
5
5
|
|
|
6
6
|
# Register Helper Renderers
|
|
7
|
-
register
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
register global_navigation: ActiveAdmin::Views::TabbedNavigation,
|
|
8
|
+
utility_navigation: ActiveAdmin::Views::TabbedNavigation,
|
|
9
|
+
site_title: ActiveAdmin::Views::SiteTitle,
|
|
10
|
+
unsupported_browser: ActiveAdmin::Views::UnsupportedBrowser,
|
|
11
|
+
action_items: ActiveAdmin::Views::ActionItems,
|
|
12
|
+
title_bar: ActiveAdmin::Views::TitleBar,
|
|
13
|
+
header: ActiveAdmin::Views::Header,
|
|
14
|
+
footer: ActiveAdmin::Views::Footer,
|
|
15
|
+
index_scopes: ActiveAdmin::Views::Scopes,
|
|
16
|
+
blank_slate: ActiveAdmin::Views::BlankSlate
|
|
17
17
|
|
|
18
18
|
# Register All The Pages
|
|
19
|
-
register
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
register index_page: ActiveAdmin::Views::Pages::Index,
|
|
20
|
+
show_page: ActiveAdmin::Views::Pages::Show,
|
|
21
|
+
new_page: ActiveAdmin::Views::Pages::Form,
|
|
22
|
+
edit_page: ActiveAdmin::Views::Pages::Form,
|
|
23
|
+
layout: ActiveAdmin::Views::Pages::Layout,
|
|
24
|
+
page: ActiveAdmin::Views::Pages::Page
|
|
25
25
|
|
|
26
26
|
end
|
|
27
27
|
end
|
|
@@ -6,7 +6,7 @@ module ActiveAdmin
|
|
|
6
6
|
def breadcrumb_links(path = request.path)
|
|
7
7
|
# remove leading "/" and split up the URL
|
|
8
8
|
# and remove last since it's used as the page title
|
|
9
|
-
parts = path.split(
|
|
9
|
+
parts = path.split("/").select(&:present?)[0..-2]
|
|
10
10
|
|
|
11
11
|
parts.each_with_index.map do |part, index|
|
|
12
12
|
# 1. try using `display_name` if we can locate a DB object
|
|
@@ -15,13 +15,13 @@ module ActiveAdmin
|
|
|
15
15
|
if part =~ /\A(\d+|[a-f0-9]{24}|(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}))\z/ && parts[index - 1]
|
|
16
16
|
parent = active_admin_config.belongs_to_config.try :target
|
|
17
17
|
config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
|
|
18
|
-
name
|
|
18
|
+
name = display_name config.find_resource part
|
|
19
19
|
end
|
|
20
20
|
name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase
|
|
21
21
|
|
|
22
22
|
# Don't create a link if the resource's show action is disabled
|
|
23
23
|
if !config || config.defined_actions.include?(:show)
|
|
24
|
-
link_to name,
|
|
24
|
+
link_to name, "/" + parts[0..index].join("/")
|
|
25
25
|
else
|
|
26
26
|
name
|
|
27
27
|
end
|
|
@@ -5,12 +5,12 @@ module ActiveAdmin
|
|
|
5
5
|
DISPLAY_NAME_FALLBACK = -> {
|
|
6
6
|
name = ""
|
|
7
7
|
klass = self.class
|
|
8
|
-
name << klass.model_name.human
|
|
8
|
+
name << klass.model_name.human if klass.respond_to? :model_name
|
|
9
9
|
name << " ##{send(klass.primary_key)}" if klass.respond_to? :primary_key
|
|
10
10
|
name.present? ? name : to_s
|
|
11
11
|
}
|
|
12
12
|
def DISPLAY_NAME_FALLBACK.inspect
|
|
13
|
-
|
|
13
|
+
"DISPLAY_NAME_FALLBACK"
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
# Attempts to call any known display name methods on the resource.
|
|
@@ -26,7 +26,7 @@ module ActiveAdmin
|
|
|
26
26
|
@@display_name_methods_cache ||= {}
|
|
27
27
|
@@display_name_methods_cache[resource.class] ||= begin
|
|
28
28
|
methods = active_admin_application.display_name_methods - association_methods_for(resource)
|
|
29
|
-
method
|
|
29
|
+
method = methods.detect { |method| resource.respond_to? method }
|
|
30
30
|
|
|
31
31
|
if method != :to_s || resource.method(method).source_location
|
|
32
32
|
method
|
|
@@ -74,7 +74,7 @@ module ActiveAdmin
|
|
|
74
74
|
format_collection(object)
|
|
75
75
|
else
|
|
76
76
|
if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
|
|
77
|
-
defined?(::Mongoid)
|
|
77
|
+
defined?(::Mongoid) && object.class.include?(Mongoid::Document)
|
|
78
78
|
auto_link object
|
|
79
79
|
elsif defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Relation)
|
|
80
80
|
format_collection(object)
|
|
@@ -85,7 +85,7 @@ module ActiveAdmin
|
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
def format_collection(collection)
|
|
88
|
-
safe_join(collection.map { |item| pretty_format(item) },
|
|
88
|
+
safe_join(collection.map { |item| pretty_format(item) }, ", ")
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
def boolean_attr?(resource, attr, value)
|
|
@@ -18,7 +18,7 @@ module ActiveAdmin
|
|
|
18
18
|
def build_download_format_links(formats = self.class.formats)
|
|
19
19
|
params = request.query_parameters.except :format, :commit
|
|
20
20
|
div class: "download_links" do
|
|
21
|
-
span I18n.t(
|
|
21
|
+
span I18n.t("active_admin.download")
|
|
22
22
|
formats.each do |format|
|
|
23
23
|
a format.upcase, href: url_for(params: params, format: format)
|
|
24
24
|
end
|
|
@@ -15,7 +15,7 @@ module ActiveAdmin
|
|
|
15
15
|
#
|
|
16
16
|
def fields_for_params(params, options = {})
|
|
17
17
|
namespace = options[:namespace]
|
|
18
|
-
except
|
|
18
|
+
except = Array.wrap(options[:except]).map &:to_s
|
|
19
19
|
|
|
20
20
|
params.flat_map do |k, v|
|
|
21
21
|
next if namespace.nil? && %w(controller action commit utf8).include?(k.to_s)
|
|
@@ -37,7 +37,7 @@ module ActiveAdmin
|
|
|
37
37
|
{ "#{k}[]" => v }
|
|
38
38
|
end
|
|
39
39
|
when nil
|
|
40
|
-
{ k =>
|
|
40
|
+
{ k => "" }
|
|
41
41
|
when TrueClass, FalseClass
|
|
42
42
|
{ k => v }
|
|
43
43
|
else
|
|
@@ -2,7 +2,7 @@ module ActiveAdmin
|
|
|
2
2
|
module ViewHelpers
|
|
3
3
|
|
|
4
4
|
# Require all ruby files in the view helpers dir
|
|
5
|
-
Dir[File.expand_path(
|
|
5
|
+
Dir[File.expand_path("view_helpers", __dir__) + "/*.rb"].each { |f| require f }
|
|
6
6
|
|
|
7
7
|
include ActiveAdminApplicationHelper
|
|
8
8
|
include AutoLinkHelper
|
|
@@ -111,14 +111,14 @@ module ActiveAdmin
|
|
|
111
111
|
create_another = params[:create_another]
|
|
112
112
|
label = @resource.class.model_name.human
|
|
113
113
|
Arbre::Context.new do
|
|
114
|
-
li class:
|
|
114
|
+
li class: "create_another" do
|
|
115
115
|
input(
|
|
116
116
|
checked: create_another,
|
|
117
|
-
id:
|
|
118
|
-
name:
|
|
119
|
-
type:
|
|
117
|
+
id: "create_another",
|
|
118
|
+
name: "create_another",
|
|
119
|
+
type: "checkbox"
|
|
120
120
|
)
|
|
121
|
-
label(I18n.t(
|
|
121
|
+
label(I18n.t("active_admin.create_another", model: label), for: "create_another")
|
|
122
122
|
end
|
|
123
123
|
end
|
|
124
124
|
end
|
|
@@ -5,7 +5,7 @@ module ActiveAdmin
|
|
|
5
5
|
builder_method :attributes_table_for
|
|
6
6
|
|
|
7
7
|
def build(obj, *attrs)
|
|
8
|
-
@collection
|
|
8
|
+
@collection = Array.wrap(obj)
|
|
9
9
|
@resource_class = @collection.first.class
|
|
10
10
|
options = {}
|
|
11
11
|
options[:for] = @collection.first if single_record?
|
|
@@ -20,7 +20,7 @@ module ActiveAdmin
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def row(*args, &block)
|
|
23
|
-
title
|
|
23
|
+
title = args[0]
|
|
24
24
|
options = args.extract_options!
|
|
25
25
|
classes = [:row]
|
|
26
26
|
if options[:class]
|
|
@@ -28,7 +28,7 @@ module ActiveAdmin
|
|
|
28
28
|
elsif title.present?
|
|
29
29
|
classes << "row-#{title.to_s.parameterize(separator: "_")}"
|
|
30
30
|
end
|
|
31
|
-
options[:class] = classes.join(
|
|
31
|
+
options[:class] = classes.join(" ")
|
|
32
32
|
|
|
33
33
|
@table << tr(options) do
|
|
34
34
|
th do
|
|
@@ -45,7 +45,7 @@ module ActiveAdmin
|
|
|
45
45
|
protected
|
|
46
46
|
|
|
47
47
|
def default_id_for_prefix
|
|
48
|
-
|
|
48
|
+
"attributes_table"
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
# Build Colgroups
|
|
@@ -75,7 +75,7 @@ module ActiveAdmin
|
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
def empty_value
|
|
78
|
-
span I18n.t(
|
|
78
|
+
span I18n.t("active_admin.empty"), class: "empty"
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
def content_for(record, attr)
|