rails_admin 3.0.0 → 3.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|