rails_admin 3.0.0 → 3.1.2
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/Gemfile +3 -0
- data/README.md +4 -2
- data/Rakefile +2 -0
- data/app/assets/javascripts/rails_admin/{application.js → application.js.erb} +8 -0
- data/app/assets/stylesheets/rails_admin/{application.scss → application.scss.erb} +4 -0
- data/app/controllers/rails_admin/application_controller.rb +2 -0
- data/app/controllers/rails_admin/main_controller.rb +9 -14
- data/app/helpers/rails_admin/application_helper.rb +37 -9
- data/app/helpers/rails_admin/form_builder.rb +10 -0
- data/app/helpers/rails_admin/main_helper.rb +7 -15
- data/app/views/layouts/rails_admin/_head.html.erb +12 -3
- data/app/views/layouts/rails_admin/_secondary_navigation.html.erb +3 -1
- data/app/views/layouts/rails_admin/_sidebar_navigation.html.erb +1 -1
- data/app/views/layouts/rails_admin/application.html.erb +4 -1
- data/app/views/rails_admin/main/_dashboard_history.html.erb +1 -1
- data/app/views/rails_admin/main/_form_action_text.html.erb +2 -1
- data/app/views/rails_admin/main/_form_file_upload.html.erb +1 -1
- data/app/views/rails_admin/main/_form_filtering_multiselect.html.erb +2 -2
- data/app/views/rails_admin/main/_form_filtering_select.html.erb +1 -1
- data/app/views/rails_admin/main/_form_multiple_file_upload.html.erb +1 -1
- data/app/views/rails_admin/main/dashboard.html.erb +2 -2
- data/app/views/rails_admin/main/history.html.erb +1 -1
- data/app/views/rails_admin/main/index.html.erb +7 -19
- data/config/initializers/active_record_extensions.rb +26 -3
- data/config/initializers/mongoid_extensions.rb +2 -0
- data/config/locales/rails_admin.en.yml +3 -2
- data/config/routes.rb +2 -0
- data/lib/generators/rails_admin/importmap_formatter.rb +28 -0
- data/lib/generators/rails_admin/install_generator.rb +71 -9
- data/lib/generators/rails_admin/templates/rails_admin.js +1 -0
- data/lib/generators/rails_admin/templates/rails_admin.scss.erb +1 -0
- data/lib/generators/rails_admin/templates/rails_admin.webpacker.js +2 -0
- data/lib/generators/rails_admin/utils.rb +2 -0
- data/lib/rails_admin/abstract_model.rb +9 -2
- data/lib/rails_admin/adapters/active_record/association.rb +11 -1
- data/lib/rails_admin/adapters/active_record/object_extension.rb +2 -0
- data/lib/rails_admin/adapters/active_record/property.rb +2 -0
- data/lib/rails_admin/adapters/active_record.rb +25 -2
- data/lib/rails_admin/adapters/composite_primary_keys/association.rb +45 -0
- data/lib/rails_admin/adapters/composite_primary_keys.rb +40 -0
- data/lib/rails_admin/adapters/mongoid/association.rb +14 -4
- data/lib/rails_admin/adapters/mongoid/bson.rb +2 -0
- data/lib/rails_admin/adapters/mongoid/extension.rb +3 -3
- data/lib/rails_admin/adapters/mongoid/object_extension.rb +2 -0
- data/lib/rails_admin/adapters/mongoid/property.rb +2 -0
- data/lib/rails_admin/adapters/mongoid.rb +4 -2
- data/lib/rails_admin/config/actions/base.rb +2 -0
- data/lib/rails_admin/config/actions/bulk_delete.rb +2 -0
- data/lib/rails_admin/config/actions/dashboard.rb +2 -0
- data/lib/rails_admin/config/actions/delete.rb +2 -0
- data/lib/rails_admin/config/actions/edit.rb +2 -0
- data/lib/rails_admin/config/actions/export.rb +2 -0
- data/lib/rails_admin/config/actions/history_index.rb +2 -0
- data/lib/rails_admin/config/actions/history_show.rb +2 -0
- data/lib/rails_admin/config/actions/index.rb +2 -0
- data/lib/rails_admin/config/actions/new.rb +2 -0
- data/lib/rails_admin/config/actions/show.rb +2 -0
- data/lib/rails_admin/config/actions/show_in_app.rb +2 -0
- data/lib/rails_admin/config/actions.rb +2 -0
- data/lib/rails_admin/config/configurable.rb +2 -0
- data/lib/rails_admin/config/const_load_suppressor.rb +78 -0
- data/lib/rails_admin/config/fields/association.rb +2 -0
- data/lib/rails_admin/config/fields/base.rb +44 -14
- data/lib/rails_admin/config/fields/factories/action_text.rb +2 -0
- data/lib/rails_admin/config/fields/factories/active_storage.rb +2 -0
- data/lib/rails_admin/config/fields/factories/association.rb +6 -5
- data/lib/rails_admin/config/fields/factories/carrierwave.rb +2 -0
- data/lib/rails_admin/config/fields/factories/devise.rb +2 -0
- data/lib/rails_admin/config/fields/factories/dragonfly.rb +2 -0
- data/lib/rails_admin/config/fields/factories/enum.rb +2 -0
- data/lib/rails_admin/config/fields/factories/paperclip.rb +2 -0
- data/lib/rails_admin/config/fields/factories/password.rb +2 -0
- data/lib/rails_admin/config/fields/factories/shrine.rb +2 -0
- data/lib/rails_admin/config/fields/group.rb +2 -0
- data/lib/rails_admin/config/fields/types/action_text.rb +6 -0
- data/lib/rails_admin/config/fields/types/active_record_enum.rb +2 -0
- data/lib/rails_admin/config/fields/types/active_storage.rb +14 -0
- data/lib/rails_admin/config/fields/types/all.rb +3 -0
- data/lib/rails_admin/config/fields/types/belongs_to_association.rb +7 -5
- data/lib/rails_admin/config/fields/types/boolean.rb +7 -1
- data/lib/rails_admin/config/fields/types/bson_object_id.rb +2 -0
- data/lib/rails_admin/config/fields/types/carrierwave.rb +2 -0
- data/lib/rails_admin/config/fields/types/citext.rb +2 -0
- data/lib/rails_admin/config/fields/types/ck_editor.rb +2 -0
- data/lib/rails_admin/config/fields/types/code_mirror.rb +2 -0
- data/lib/rails_admin/config/fields/types/color.rb +2 -0
- data/lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb +31 -0
- data/lib/rails_admin/config/fields/types/date.rb +2 -0
- data/lib/rails_admin/config/fields/types/datetime.rb +12 -0
- data/lib/rails_admin/config/fields/types/decimal.rb +2 -0
- data/lib/rails_admin/config/fields/types/dragonfly.rb +2 -0
- data/lib/rails_admin/config/fields/types/enum.rb +15 -2
- data/lib/rails_admin/config/fields/types/file_upload.rb +2 -0
- data/lib/rails_admin/config/fields/types/float.rb +2 -0
- data/lib/rails_admin/config/fields/types/froala.rb +2 -0
- data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +2 -0
- data/lib/rails_admin/config/fields/types/has_many_association.rb +2 -0
- data/lib/rails_admin/config/fields/types/has_one_association.rb +7 -1
- data/lib/rails_admin/config/fields/types/hidden.rb +2 -0
- data/lib/rails_admin/config/fields/types/inet.rb +2 -0
- data/lib/rails_admin/config/fields/types/integer.rb +2 -0
- data/lib/rails_admin/config/fields/types/json.rb +2 -0
- data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +22 -0
- data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +2 -0
- data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +2 -0
- data/lib/rails_admin/config/fields/types/numeric.rb +6 -0
- data/lib/rails_admin/config/fields/types/paperclip.rb +2 -0
- data/lib/rails_admin/config/fields/types/password.rb +2 -0
- data/lib/rails_admin/config/fields/types/polymorphic_association.rb +2 -0
- data/lib/rails_admin/config/fields/types/serialized.rb +2 -0
- data/lib/rails_admin/config/fields/types/shrine.rb +2 -0
- data/lib/rails_admin/config/fields/types/simple_mde.rb +2 -0
- data/lib/rails_admin/config/fields/types/string.rb +2 -0
- data/lib/rails_admin/config/fields/types/string_like.rb +6 -0
- data/lib/rails_admin/config/fields/types/text.rb +2 -0
- data/lib/rails_admin/config/fields/types/time.rb +6 -0
- data/lib/rails_admin/config/fields/types/timestamp.rb +2 -0
- data/lib/rails_admin/config/fields/types/uuid.rb +2 -0
- data/lib/rails_admin/config/fields/types/wysihtml5.rb +2 -0
- data/lib/rails_admin/config/fields/types.rb +2 -0
- data/lib/rails_admin/config/fields.rb +3 -1
- data/lib/rails_admin/config/groupable.rb +2 -0
- data/lib/rails_admin/config/has_description.rb +2 -0
- data/lib/rails_admin/config/has_fields.rb +3 -1
- data/lib/rails_admin/config/has_groups.rb +2 -0
- data/lib/rails_admin/config/hideable.rb +2 -0
- data/lib/rails_admin/config/inspectable.rb +2 -0
- data/lib/rails_admin/config/lazy_model.rb +74 -0
- data/lib/rails_admin/config/model.rb +5 -1
- data/lib/rails_admin/config/proxyable/proxy.rb +2 -0
- data/lib/rails_admin/config/proxyable.rb +2 -0
- data/lib/rails_admin/config/sections/base.rb +2 -0
- data/lib/rails_admin/config/sections/create.rb +2 -0
- data/lib/rails_admin/config/sections/edit.rb +2 -0
- data/lib/rails_admin/config/sections/export.rb +2 -0
- data/lib/rails_admin/config/sections/list.rb +6 -0
- data/lib/rails_admin/config/sections/modal.rb +2 -0
- data/lib/rails_admin/config/sections/nested.rb +2 -0
- data/lib/rails_admin/config/sections/show.rb +2 -0
- data/lib/rails_admin/config/sections/update.rb +2 -0
- data/lib/rails_admin/config/sections.rb +2 -0
- data/lib/rails_admin/config.rb +30 -42
- data/lib/rails_admin/engine.rb +19 -17
- data/lib/rails_admin/extension.rb +2 -0
- data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +21 -4
- data/lib/rails_admin/extensions/cancancan.rb +2 -0
- data/lib/rails_admin/extensions/controller_extension.rb +2 -0
- data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +49 -27
- data/lib/rails_admin/extensions/paper_trail.rb +2 -0
- data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +2 -0
- data/lib/rails_admin/extensions/pundit.rb +2 -0
- data/lib/rails_admin/support/csv_converter.rb +2 -2
- data/lib/rails_admin/support/datetime.rb +3 -1
- data/lib/rails_admin/support/es_module_processor.rb +23 -0
- data/lib/rails_admin/support/hash_helper.rb +2 -0
- data/lib/rails_admin/version.rb +4 -2
- data/lib/rails_admin.rb +7 -2
- data/lib/tasks/rails_admin.rake +2 -0
- data/package.json +2 -2
- data/src/rails_admin/base.js +14 -3
- data/src/rails_admin/filter-box.js +166 -210
- data/src/rails_admin/filtering-multiselect.js +5 -10
- data/src/rails_admin/filtering-select.js +16 -7
- data/src/rails_admin/i18n.js +3 -1
- data/src/rails_admin/jquery.js +3 -0
- data/src/rails_admin/nested-form-hooks.js +6 -4
- data/src/rails_admin/remote-form.js +5 -5
- data/src/rails_admin/styles/base/theming.scss +25 -8
- data/src/rails_admin/styles/base.scss +5 -5
- data/src/rails_admin/styles/widgets.scss +1 -1
- data/src/rails_admin/ui.js +52 -19
- data/src/rails_admin/widgets.js +7 -2
- data/vendor/assets/fonts/rails_admin/fa-solid-900.ttf +0 -0
- data/vendor/assets/fonts/rails_admin/fa-solid-900.woff2 +0 -0
- data/vendor/assets/javascripts/rails_admin/jquery3.js +118 -109
- data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +4531 -2782
- metadata +16 -14
- data/lib/generators/rails_admin/templates/rails_admin.js.erb +0 -2
- data/lib/generators/rails_admin/templates/rails_admin.scss +0 -1
- data/lib/generators/rails_admin/templates/webpack.config.js +0 -29
- data/lib/rails_admin/support/esmodule_preprocessor.rb +0 -33
- data/vendor/assets/fonts/rails_admin/fa-solid-900.eot +0 -0
- data/vendor/assets/fonts/rails_admin/fa-solid-900.svg +0 -5034
- data/vendor/assets/fonts/rails_admin/fa-solid-900.woff +0 -0
- data/vendor/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
- data/vendor/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'rails_admin/config/fields/base'
|
|
2
4
|
|
|
3
5
|
module RailsAdmin
|
|
@@ -5,6 +7,10 @@ module RailsAdmin
|
|
|
5
7
|
module Fields
|
|
6
8
|
module Types
|
|
7
9
|
class StringLike < RailsAdmin::Config::Fields::Base
|
|
10
|
+
register_instance_option :filter_operators do
|
|
11
|
+
%w[_discard like not_like is starts_with ends_with] + (required? ? [] : %w[_separator _present _blank])
|
|
12
|
+
end
|
|
13
|
+
|
|
8
14
|
register_instance_option :treat_empty_as_nil? do
|
|
9
15
|
properties.try(:nullable?)
|
|
10
16
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'rails_admin/config/fields/types/datetime'
|
|
2
4
|
|
|
3
5
|
module RailsAdmin
|
|
@@ -11,6 +13,10 @@ module RailsAdmin
|
|
|
11
13
|
abstract_model.model.type_for_attribute(name.to_s).serialize(super)&.change(year: 2000, month: 1, day: 1)
|
|
12
14
|
end
|
|
13
15
|
|
|
16
|
+
register_instance_option :filter_operators do
|
|
17
|
+
%w[default between] + (required? ? [] : %w[_separator _not_null _null])
|
|
18
|
+
end
|
|
19
|
+
|
|
14
20
|
register_instance_option :datepicker_options do
|
|
15
21
|
{
|
|
16
22
|
allowInput: true,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module RailsAdmin
|
|
2
4
|
module Config
|
|
3
5
|
module Fields
|
|
@@ -20,7 +22,7 @@ module RailsAdmin
|
|
|
20
22
|
|
|
21
23
|
# Registry of field factories.
|
|
22
24
|
#
|
|
23
|
-
# Field factory is an anonymous function that
|
|
25
|
+
# Field factory is an anonymous function that receives the parent object,
|
|
24
26
|
# an array of field properties and an array of fields already instantiated.
|
|
25
27
|
#
|
|
26
28
|
# If the factory returns true then that property will not be run through
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module RailsAdmin
|
|
2
4
|
module Config
|
|
3
5
|
# Provides accessors and autoregistering of model's fields.
|
|
@@ -42,7 +44,7 @@ module RailsAdmin
|
|
|
42
44
|
[*name].each { |field_name| field(field_name, type, false, &block) }
|
|
43
45
|
end
|
|
44
46
|
|
|
45
|
-
# include fields by name and apply an
|
|
47
|
+
# include fields by name and apply an optional block to each (through a call to fields),
|
|
46
48
|
# or include fields by conditions if no field names
|
|
47
49
|
def include_fields(*field_names, &block)
|
|
48
50
|
if field_names.empty?
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails_admin/config/model'
|
|
4
|
+
|
|
5
|
+
module RailsAdmin
|
|
6
|
+
module Config
|
|
7
|
+
class LazyModel < BasicObject
|
|
8
|
+
def initialize(entity, &block)
|
|
9
|
+
@entity = entity
|
|
10
|
+
@deferred_blocks = [*block]
|
|
11
|
+
@initialized = false
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def add_deferred_block(&block)
|
|
15
|
+
if @initialized
|
|
16
|
+
@model.instance_eval(&block)
|
|
17
|
+
else
|
|
18
|
+
@deferred_blocks << block
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def target
|
|
23
|
+
@model ||= ::RailsAdmin::Config::Model.new(@entity)
|
|
24
|
+
# When evaluating multiple configuration blocks, the order of
|
|
25
|
+
# execution is important. As one would expect (in my opinion),
|
|
26
|
+
# options defined within a resource should take precedence over
|
|
27
|
+
# more general options defined in an initializer. This way,
|
|
28
|
+
# general settings for a number of resources could be specified
|
|
29
|
+
# in the initializer, while models could override these settings
|
|
30
|
+
# later, if required.
|
|
31
|
+
#
|
|
32
|
+
# CAVEAT: It cannot be guaranteed that blocks defined in an initializer
|
|
33
|
+
# will be loaded (and adde to @deferred_blocks) first. For instance, if
|
|
34
|
+
# the initializer references a model class before defining
|
|
35
|
+
# a RailsAdmin configuration block, the configuration from the
|
|
36
|
+
# resource will get added to @deferred_blocks first:
|
|
37
|
+
#
|
|
38
|
+
# # app/models/some_model.rb
|
|
39
|
+
# class SomeModel
|
|
40
|
+
# rails_admin do
|
|
41
|
+
# :
|
|
42
|
+
# end
|
|
43
|
+
# end
|
|
44
|
+
#
|
|
45
|
+
# # config/initializers/rails_admin.rb
|
|
46
|
+
# model = 'SomeModel'.constantize # blocks from SomeModel get loaded
|
|
47
|
+
# model.config model do # blocks from initializer gets loaded
|
|
48
|
+
# :
|
|
49
|
+
# end
|
|
50
|
+
#
|
|
51
|
+
# Thus, sort all blocks to execute for a resource by Proc.source_path,
|
|
52
|
+
# to guarantee that blocks from 'config/initializers' evaluate before
|
|
53
|
+
# blocks defined within a model class.
|
|
54
|
+
unless @deferred_blocks.empty?
|
|
55
|
+
@deferred_blocks.
|
|
56
|
+
partition { |block| block.source_location.first =~ %r{config/initializers} }.
|
|
57
|
+
flatten.
|
|
58
|
+
each { |block| @model.instance_eval(&block) }
|
|
59
|
+
@deferred_blocks = []
|
|
60
|
+
end
|
|
61
|
+
@initialized = true
|
|
62
|
+
@model
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def method_missing(method_name, *args, &block)
|
|
66
|
+
target.send(method_name, *args, &block)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def respond_to_missing?(method_name, include_private = false)
|
|
70
|
+
super || target.respond_to?(method_name, include_private)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'rails_admin/config'
|
|
2
4
|
require 'rails_admin/config/proxyable'
|
|
3
5
|
require 'rails_admin/config/configurable'
|
|
@@ -34,8 +36,10 @@ module RailsAdmin
|
|
|
34
36
|
case entity
|
|
35
37
|
when RailsAdmin::AbstractModel
|
|
36
38
|
entity
|
|
37
|
-
when Class, String
|
|
39
|
+
when Class, String
|
|
38
40
|
RailsAdmin::AbstractModel.new(entity)
|
|
41
|
+
when Symbol
|
|
42
|
+
RailsAdmin::AbstractModel.new(entity.to_s)
|
|
39
43
|
else
|
|
40
44
|
RailsAdmin::AbstractModel.new(entity.class)
|
|
41
45
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'rails_admin/config/sections/base'
|
|
2
4
|
|
|
3
5
|
module RailsAdmin
|
|
@@ -28,6 +30,10 @@ module RailsAdmin
|
|
|
28
30
|
nil
|
|
29
31
|
end
|
|
30
32
|
|
|
33
|
+
register_instance_option :search_help do
|
|
34
|
+
nil
|
|
35
|
+
end
|
|
36
|
+
|
|
31
37
|
register_instance_option :sort_by do
|
|
32
38
|
parent.abstract_model.primary_key
|
|
33
39
|
end
|
data/lib/rails_admin/config.rb
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails_admin/config/lazy_model'
|
|
2
4
|
require 'rails_admin/config/sections/list'
|
|
3
5
|
require 'active_support/core_ext/module/attribute_accessors'
|
|
4
6
|
|
|
@@ -20,10 +22,6 @@ module RailsAdmin
|
|
|
20
22
|
|
|
21
23
|
DEFAULT_CURRENT_USER = proc {}
|
|
22
24
|
|
|
23
|
-
# Variables to track initialization process
|
|
24
|
-
@initialized = false
|
|
25
|
-
@deferred_blocks = []
|
|
26
|
-
|
|
27
25
|
class << self
|
|
28
26
|
# Application title, can be an array of two elements
|
|
29
27
|
attr_accessor :main_app_name
|
|
@@ -73,6 +71,9 @@ module RailsAdmin
|
|
|
73
71
|
# @see RailsAdmin.config
|
|
74
72
|
attr_reader :registry
|
|
75
73
|
|
|
74
|
+
# Bootstrap CSS classes used for Navigation bar
|
|
75
|
+
attr_accessor :navbar_css_classes
|
|
76
|
+
|
|
76
77
|
# show Gravatar in Navigation bar
|
|
77
78
|
attr_accessor :show_gravatar
|
|
78
79
|
|
|
@@ -83,22 +84,6 @@ module RailsAdmin
|
|
|
83
84
|
# Set where RailsAdmin fetches JS/CSS from, defaults to :sprockets
|
|
84
85
|
attr_writer :asset_source
|
|
85
86
|
|
|
86
|
-
# Finish initialization by executing deferred configuration blocks
|
|
87
|
-
def initialize!
|
|
88
|
-
@deferred_blocks.each { |block| block.call(self) }
|
|
89
|
-
@deferred_blocks.clear
|
|
90
|
-
@initialized = true
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Evaluate the given block either immediately or lazily, based on initialization status.
|
|
94
|
-
def apply(&block)
|
|
95
|
-
if @initialized
|
|
96
|
-
yield(self)
|
|
97
|
-
else
|
|
98
|
-
@deferred_blocks << block
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
87
|
# Setup authentication to be run as a before filter
|
|
103
88
|
# This is run inside the controller instance so you can setup any authentication you need to
|
|
104
89
|
#
|
|
@@ -134,7 +119,7 @@ module RailsAdmin
|
|
|
134
119
|
klass = RailsAdmin::AUDITING_ADAPTERS[extension]
|
|
135
120
|
klass.setup if klass.respond_to? :setup
|
|
136
121
|
@audit = proc do
|
|
137
|
-
@auditing_adapter = klass.new(*([self] + args).compact)
|
|
122
|
+
@auditing_adapter = klass.new(*([self] + args).compact, &block)
|
|
138
123
|
end
|
|
139
124
|
elsif block
|
|
140
125
|
@audit = block
|
|
@@ -171,7 +156,7 @@ module RailsAdmin
|
|
|
171
156
|
klass = RailsAdmin::AUTHORIZATION_ADAPTERS[extension]
|
|
172
157
|
klass.setup if klass.respond_to? :setup
|
|
173
158
|
@authorize = proc do
|
|
174
|
-
@authorization_adapter = klass.new(*([self] + args).compact)
|
|
159
|
+
@authorization_adapter = klass.new(*([self] + args).compact, &block)
|
|
175
160
|
end
|
|
176
161
|
elsif block
|
|
177
162
|
@authorize = block
|
|
@@ -244,7 +229,7 @@ module RailsAdmin
|
|
|
244
229
|
case entity
|
|
245
230
|
when RailsAdmin::AbstractModel
|
|
246
231
|
entity.model.try(:name).try :to_sym
|
|
247
|
-
when Class
|
|
232
|
+
when Class, ConstLoadSuppressor::ConstProxy
|
|
248
233
|
entity.name.to_sym
|
|
249
234
|
when String, Symbol
|
|
250
235
|
entity.to_sym
|
|
@@ -252,19 +237,22 @@ module RailsAdmin
|
|
|
252
237
|
entity.class.name.to_sym
|
|
253
238
|
end
|
|
254
239
|
|
|
255
|
-
@registry[key] ||= RailsAdmin::Config::
|
|
256
|
-
@registry[key].
|
|
240
|
+
@registry[key] ||= RailsAdmin::Config::LazyModel.new(key.to_s)
|
|
241
|
+
@registry[key].add_deferred_block(&block) if block
|
|
257
242
|
@registry[key]
|
|
258
243
|
end
|
|
259
244
|
|
|
260
245
|
def asset_source
|
|
261
246
|
@asset_source ||=
|
|
262
247
|
begin
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
248
|
+
detected = defined?(Sprockets) ? :sprockets : :invalid
|
|
249
|
+
unless ARGV.join(' ').include? 'rails_admin:install'
|
|
250
|
+
warn <<~MSG
|
|
251
|
+
[Warning] After upgrading RailsAdmin to 3.x you haven't set asset_source yet, using :#{detected} as the default.
|
|
252
|
+
To suppress this message, run 'rails rails_admin:install' to setup the asset delivery method suitable to you.
|
|
253
|
+
MSG
|
|
254
|
+
end
|
|
255
|
+
detected
|
|
268
256
|
end
|
|
269
257
|
end
|
|
270
258
|
|
|
@@ -282,10 +270,12 @@ module RailsAdmin
|
|
|
282
270
|
@parent_controller = name
|
|
283
271
|
|
|
284
272
|
if defined?(RailsAdmin::ApplicationController) || defined?(RailsAdmin::MainController)
|
|
285
|
-
RailsAdmin.
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
273
|
+
RailsAdmin::Config::ConstLoadSuppressor.allowing do
|
|
274
|
+
RailsAdmin.send(:remove_const, :ApplicationController)
|
|
275
|
+
RailsAdmin.send(:remove_const, :MainController)
|
|
276
|
+
load RailsAdmin::Engine.root.join('app/controllers/rails_admin/application_controller.rb')
|
|
277
|
+
load RailsAdmin::Engine.root.join('app/controllers/rails_admin/main_controller.rb')
|
|
278
|
+
end
|
|
289
279
|
end
|
|
290
280
|
end
|
|
291
281
|
|
|
@@ -334,6 +324,7 @@ module RailsAdmin
|
|
|
334
324
|
@label_methods = %i[name title]
|
|
335
325
|
@main_app_name = proc { [Rails.application.engine_name.titleize.chomp(' Application'), 'Admin'] }
|
|
336
326
|
@registry = {}
|
|
327
|
+
@navbar_css_classes = %w[navbar-dark bg-primary border-bottom]
|
|
337
328
|
@show_gravatar = true
|
|
338
329
|
@navigation_static_links = {}
|
|
339
330
|
@navigation_static_label = nil
|
|
@@ -354,10 +345,8 @@ module RailsAdmin
|
|
|
354
345
|
|
|
355
346
|
# Perform reset, then load RailsAdmin initializer again
|
|
356
347
|
def reload!
|
|
357
|
-
@initialized = false
|
|
358
348
|
reset
|
|
359
349
|
load RailsAdmin::Engine.config.initializer_path
|
|
360
|
-
initialize!
|
|
361
350
|
end
|
|
362
351
|
|
|
363
352
|
# Get all models that are configured as visible sorted by their weight and label.
|
|
@@ -375,23 +364,22 @@ module RailsAdmin
|
|
|
375
364
|
|
|
376
365
|
private
|
|
377
366
|
|
|
378
|
-
def lchomp(base, arg)
|
|
379
|
-
base.to_s.reverse.chomp(arg.to_s.reverse).reverse
|
|
380
|
-
end
|
|
381
|
-
|
|
382
367
|
def viable_models
|
|
383
368
|
included_models.collect(&:to_s).presence || begin
|
|
384
369
|
@@system_models ||= # memoization for tests
|
|
385
370
|
([Rails.application] + Rails::Engine.subclasses.collect(&:instance)).flat_map do |app|
|
|
386
371
|
(app.paths['app/models'].to_a + app.config.eager_load_paths).collect do |load_path|
|
|
387
372
|
Dir.glob(app.root.join(load_path)).collect do |load_dir|
|
|
373
|
+
path_prefix = "#{app.root.join(load_dir)}/"
|
|
388
374
|
Dir.glob("#{load_dir}/**/*.rb").collect do |filename|
|
|
389
375
|
# app/models/module/class.rb => module/class.rb => module/class => Module::Class
|
|
390
|
-
|
|
376
|
+
filename.delete_prefix(path_prefix).chomp('.rb').camelize
|
|
391
377
|
end
|
|
392
378
|
end
|
|
393
379
|
end
|
|
394
380
|
end.flatten.reject { |m| m.starts_with?('Concerns::') } # rubocop:disable Style/MultilineBlockChain
|
|
381
|
+
|
|
382
|
+
@@system_models + @registry.keys.collect(&:to_s)
|
|
395
383
|
end
|
|
396
384
|
end
|
|
397
385
|
|
data/lib/rails_admin/engine.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'kaminari'
|
|
2
4
|
require 'nested_form'
|
|
3
5
|
require 'rails'
|
|
@@ -9,19 +11,9 @@ module RailsAdmin
|
|
|
9
11
|
class Engine < Rails::Engine
|
|
10
12
|
isolate_namespace RailsAdmin
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
attr_accessor :importmap
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
if defined?(Sprockets)
|
|
16
|
-
app.config.assets.precompile += %w[
|
|
17
|
-
rails_admin/application.js
|
|
18
|
-
rails_admin/application.css
|
|
19
|
-
]
|
|
20
|
-
app.config.assets.paths << RailsAdmin::Engine.root.join('src')
|
|
21
|
-
require 'rails_admin/support/esmodule_preprocessor'
|
|
22
|
-
Sprockets.register_preprocessor 'application/javascript', RailsAdmin::ESModulePreprocessor
|
|
23
|
-
end
|
|
24
|
-
end
|
|
16
|
+
config.action_dispatch.rescue_responses['RailsAdmin::ActionNotAllowed'] = :forbidden
|
|
25
17
|
|
|
26
18
|
initializer 'RailsAdmin reload config in development' do |app|
|
|
27
19
|
config.initializer_path = app.root.join('config/initializers/rails_admin.rb')
|
|
@@ -43,6 +35,21 @@ module RailsAdmin
|
|
|
43
35
|
end
|
|
44
36
|
end
|
|
45
37
|
|
|
38
|
+
initializer 'RailsAdmin precompile hook', group: :all do |app|
|
|
39
|
+
case RailsAdmin.config.asset_source
|
|
40
|
+
when :sprockets
|
|
41
|
+
app.config.assets.precompile += %w[
|
|
42
|
+
rails_admin/application.js
|
|
43
|
+
rails_admin/application.css
|
|
44
|
+
]
|
|
45
|
+
app.config.assets.paths << RailsAdmin::Engine.root.join('src')
|
|
46
|
+
require 'rails_admin/support/es_module_processor'
|
|
47
|
+
Sprockets.register_bundle_processor 'application/javascript', RailsAdmin::Support::ESModuleProcessor
|
|
48
|
+
when :importmap
|
|
49
|
+
self.importmap = Importmap::Map.new.draw(app.root.join('config/importmap.rails_admin.rb'))
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
46
53
|
# Check for required middlewares, users may forget to use them in Rails API mode
|
|
47
54
|
config.after_initialize do |app|
|
|
48
55
|
has_session_store = app.config.middleware.to_a.any? do |m|
|
|
@@ -66,11 +73,6 @@ module RailsAdmin
|
|
|
66
73
|
ERROR
|
|
67
74
|
end
|
|
68
75
|
|
|
69
|
-
RailsAdmin::Config.initialize!
|
|
70
|
-
|
|
71
|
-
# Force route reload, since it doesn't reflect RailsAdmin action configuration yet
|
|
72
|
-
app.reload_routes!
|
|
73
|
-
|
|
74
76
|
RailsAdmin::Version.warn_with_js_version
|
|
75
77
|
end
|
|
76
78
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module RailsAdmin
|
|
2
4
|
module Extensions
|
|
3
5
|
module CanCanCan
|
|
@@ -7,18 +9,33 @@ module RailsAdmin
|
|
|
7
9
|
def current_ability
|
|
8
10
|
# use _current_user instead of default current_user so it works with
|
|
9
11
|
# whatever current user method is defined with RailsAdmin
|
|
10
|
-
@current_ability ||=
|
|
12
|
+
@current_ability ||= ability_class.new(_current_user)
|
|
11
13
|
end
|
|
12
14
|
end
|
|
13
15
|
|
|
16
|
+
include RailsAdmin::Config::Configurable
|
|
17
|
+
|
|
18
|
+
def self.setup
|
|
19
|
+
RailsAdmin::Extensions::ControllerExtension.include ControllerExtension
|
|
20
|
+
end
|
|
21
|
+
|
|
14
22
|
# See the +authorize_with+ config method for where the initialization happens.
|
|
15
|
-
def initialize(controller, ability =
|
|
23
|
+
def initialize(controller, ability = nil, &block)
|
|
16
24
|
@controller = controller
|
|
17
|
-
|
|
18
|
-
|
|
25
|
+
ability_class { ability } if ability
|
|
26
|
+
instance_eval(&block) if block
|
|
27
|
+
|
|
28
|
+
adapter = self
|
|
29
|
+
ControllerExtension.define_method(:ability_class) do
|
|
30
|
+
adapter.ability_class
|
|
31
|
+
end
|
|
19
32
|
@controller.current_ability.authorize! :access, :rails_admin
|
|
20
33
|
end
|
|
21
34
|
|
|
35
|
+
register_instance_option :ability_class do
|
|
36
|
+
Ability
|
|
37
|
+
end
|
|
38
|
+
|
|
22
39
|
# This method is called in every controller action and should raise an exception
|
|
23
40
|
# when the authorization fails. The first argument is the name of the controller
|
|
24
41
|
# action as a symbol (:create, :bulk_delete, etc.). The second argument is the
|