rails_admin_next 1.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 +7 -0
- data/Gemfile +46 -0
- data/LICENSE.md +21 -0
- data/README.md +317 -0
- data/Rakefile +25 -0
- data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
- data/app/assets/stylesheets/rails_admin/framework.css +2375 -0
- data/app/assets/stylesheets/rails_admin/skin.css +472 -0
- data/app/assets/stylesheets/rails_admin/tokens.css +281 -0
- data/app/assets/stylesheets/rails_admin.css +47 -0
- data/app/controllers/rails_admin_next/application_controller.rb +98 -0
- data/app/controllers/rails_admin_next/main_controller.rb +185 -0
- data/app/helpers/rails_admin_next/application_helper.rb +254 -0
- data/app/helpers/rails_admin_next/form_builder.rb +173 -0
- data/app/helpers/rails_admin_next/main_helper.rb +63 -0
- data/app/views/layouts/rails_admin_next/_head.html.erb +29 -0
- data/app/views/layouts/rails_admin_next/_navigation.html.erb +18 -0
- data/app/views/layouts/rails_admin_next/_secondary_navigation.html.erb +27 -0
- data/app/views/layouts/rails_admin_next/_sidebar_navigation.html.erb +6 -0
- data/app/views/layouts/rails_admin_next/application.html.erb +42 -0
- data/app/views/layouts/rails_admin_next/content.html.erb +22 -0
- data/app/views/layouts/rails_admin_next/modal.js.erb +7 -0
- data/app/views/rails_admin_next/main/_dashboard_history.html.erb +46 -0
- data/app/views/rails_admin_next/main/_delete_notice.html.erb +36 -0
- data/app/views/rails_admin_next/main/_form_action_text.html.erb +2 -0
- data/app/views/rails_admin_next/main/_form_boolean.html.erb +15 -0
- data/app/views/rails_admin_next/main/_form_colorpicker.html.erb +6 -0
- data/app/views/rails_admin_next/main/_form_datetime.html.erb +14 -0
- data/app/views/rails_admin_next/main/_form_enumeration.html.erb +26 -0
- data/app/views/rails_admin_next/main/_form_field.html.erb +2 -0
- data/app/views/rails_admin_next/main/_form_file_upload.html.erb +18 -0
- data/app/views/rails_admin_next/main/_form_filtering_multiselect.html.erb +20 -0
- data/app/views/rails_admin_next/main/_form_filtering_select.html.erb +22 -0
- data/app/views/rails_admin_next/main/_form_multiple_file_upload.html.erb +21 -0
- data/app/views/rails_admin_next/main/_form_nested_many.html.erb +20 -0
- data/app/views/rails_admin_next/main/_form_nested_one.html.erb +19 -0
- data/app/views/rails_admin_next/main/_form_polymorphic_association.html.erb +24 -0
- data/app/views/rails_admin_next/main/_form_text.html.erb +2 -0
- data/app/views/rails_admin_next/main/_pagination.html.erb +54 -0
- data/app/views/rails_admin_next/main/_submit_buttons.html.erb +26 -0
- data/app/views/rails_admin_next/main/bulk_delete.html.erb +19 -0
- data/app/views/rails_admin_next/main/dashboard.html.erb +64 -0
- data/app/views/rails_admin_next/main/delete.html.erb +21 -0
- data/app/views/rails_admin_next/main/edit.html.erb +3 -0
- data/app/views/rails_admin_next/main/export.html.erb +149 -0
- data/app/views/rails_admin_next/main/history.html.erb +80 -0
- data/app/views/rails_admin_next/main/index.html.erb +186 -0
- data/app/views/rails_admin_next/main/new.html.erb +3 -0
- data/app/views/rails_admin_next/main/show.html.erb +30 -0
- data/config/brakeman.ignore +145 -0
- data/config/importmap.rails_admin.rb +29 -0
- data/config/initializers/active_record_extensions.rb +21 -0
- data/config/locales/rails_admin_next.en.yml +158 -0
- data/config/routes.rb +14 -0
- data/lib/generators/rails_admin_next/install_generator.rb +39 -0
- data/lib/generators/rails_admin_next/templates/initializer.erb +40 -0
- data/lib/generators/rails_admin_next/utils.rb +21 -0
- data/lib/rails_admin_next/abstract_model.rb +266 -0
- data/lib/rails_admin_next/adapters/active_record/association.rb +130 -0
- data/lib/rails_admin_next/adapters/active_record/object_extension.rb +13 -0
- data/lib/rails_admin_next/adapters/active_record/property.rb +58 -0
- data/lib/rails_admin_next/adapters/active_record.rb +371 -0
- data/lib/rails_admin_next/config/actions/base.rb +160 -0
- data/lib/rails_admin_next/config/actions/bulk_delete.rb +67 -0
- data/lib/rails_admin_next/config/actions/dashboard.rb +62 -0
- data/lib/rails_admin_next/config/actions/delete.rb +58 -0
- data/lib/rails_admin_next/config/actions/edit.rb +56 -0
- data/lib/rails_admin_next/config/actions/export.rb +47 -0
- data/lib/rails_admin_next/config/actions/history_index.rb +40 -0
- data/lib/rails_admin_next/config/actions/history_show.rb +40 -0
- data/lib/rails_admin_next/config/actions/index.rb +108 -0
- data/lib/rails_admin_next/config/actions/new.rb +69 -0
- data/lib/rails_admin_next/config/actions/show.rb +36 -0
- data/lib/rails_admin_next/config/actions/show_in_app.rb +37 -0
- data/lib/rails_admin_next/config/actions.rb +122 -0
- data/lib/rails_admin_next/config/configurable.rb +107 -0
- data/lib/rails_admin_next/config/const_load_suppressor.rb +78 -0
- data/lib/rails_admin_next/config/fields/association.rb +169 -0
- data/lib/rails_admin_next/config/fields/base.rb +391 -0
- data/lib/rails_admin_next/config/fields/collection_association.rb +90 -0
- data/lib/rails_admin_next/config/fields/factories/action_text.rb +14 -0
- data/lib/rails_admin_next/config/fields/factories/active_storage.rb +34 -0
- data/lib/rails_admin_next/config/fields/factories/association.rb +32 -0
- data/lib/rails_admin_next/config/fields/factories/encrypted_password.rb +28 -0
- data/lib/rails_admin_next/config/fields/factories/enum.rb +23 -0
- data/lib/rails_admin_next/config/fields/factories/password.rb +19 -0
- data/lib/rails_admin_next/config/fields/group.rb +77 -0
- data/lib/rails_admin_next/config/fields/singular_association.rb +62 -0
- data/lib/rails_admin_next/config/fields/types/action_text.rb +20 -0
- data/lib/rails_admin_next/config/fields/types/active_record_enum.rb +62 -0
- data/lib/rails_admin_next/config/fields/types/active_storage.rb +70 -0
- data/lib/rails_admin_next/config/fields/types/all.rb +32 -0
- data/lib/rails_admin_next/config/fields/types/belongs_to_association.rb +48 -0
- data/lib/rails_admin_next/config/fields/types/boolean.rb +70 -0
- data/lib/rails_admin_next/config/fields/types/citext.rb +15 -0
- data/lib/rails_admin_next/config/fields/types/color.rb +43 -0
- data/lib/rails_admin_next/config/fields/types/date.rb +38 -0
- data/lib/rails_admin_next/config/fields/types/datetime.rb +79 -0
- data/lib/rails_admin_next/config/fields/types/decimal.rb +23 -0
- data/lib/rails_admin_next/config/fields/types/enum.rb +52 -0
- data/lib/rails_admin_next/config/fields/types/file_upload.rb +87 -0
- data/lib/rails_admin_next/config/fields/types/float.rb +23 -0
- data/lib/rails_admin_next/config/fields/types/has_and_belongs_to_many_association.rb +16 -0
- data/lib/rails_admin_next/config/fields/types/has_many_association.rb +16 -0
- data/lib/rails_admin_next/config/fields/types/has_one_association.rb +35 -0
- data/lib/rails_admin_next/config/fields/types/hidden.rb +31 -0
- data/lib/rails_admin_next/config/fields/types/inet.rb +15 -0
- data/lib/rails_admin_next/config/fields/types/integer.rb +20 -0
- data/lib/rails_admin_next/config/fields/types/json.rb +37 -0
- data/lib/rails_admin_next/config/fields/types/multiple_active_storage.rb +82 -0
- data/lib/rails_admin_next/config/fields/types/multiple_file_upload.rb +134 -0
- data/lib/rails_admin_next/config/fields/types/numeric.rb +24 -0
- data/lib/rails_admin_next/config/fields/types/password.rb +45 -0
- data/lib/rails_admin_next/config/fields/types/polymorphic_association.rb +118 -0
- data/lib/rails_admin_next/config/fields/types/serialized.rb +28 -0
- data/lib/rails_admin_next/config/fields/types/string.rb +50 -0
- data/lib/rails_admin_next/config/fields/types/string_like.rb +25 -0
- data/lib/rails_admin_next/config/fields/types/text.rb +28 -0
- data/lib/rails_admin_next/config/fields/types/time.rb +39 -0
- data/lib/rails_admin_next/config/fields/types/timestamp.rb +16 -0
- data/lib/rails_admin_next/config/fields/types/uuid.rb +15 -0
- data/lib/rails_admin_next/config/fields/types.rb +29 -0
- data/lib/rails_admin_next/config/fields.rb +88 -0
- data/lib/rails_admin_next/config/groupable.rb +20 -0
- data/lib/rails_admin_next/config/has_description.rb +14 -0
- data/lib/rails_admin_next/config/has_fields.rb +144 -0
- data/lib/rails_admin_next/config/has_groups.rb +27 -0
- data/lib/rails_admin_next/config/hideable.rb +30 -0
- data/lib/rails_admin_next/config/inspectable.rb +39 -0
- data/lib/rails_admin_next/config/lazy_model.rb +74 -0
- data/lib/rails_admin_next/config/model.rb +126 -0
- data/lib/rails_admin_next/config/proxyable/proxy.rb +42 -0
- data/lib/rails_admin_next/config/proxyable.rb +26 -0
- data/lib/rails_admin_next/config/sections/base.rb +36 -0
- data/lib/rails_admin_next/config/sections/create.rb +13 -0
- data/lib/rails_admin_next/config/sections/edit.rb +13 -0
- data/lib/rails_admin_next/config/sections/export.rb +13 -0
- data/lib/rails_admin_next/config/sections/list.rb +63 -0
- data/lib/rails_admin_next/config/sections/modal.rb +12 -0
- data/lib/rails_admin_next/config/sections/nested.rb +12 -0
- data/lib/rails_admin_next/config/sections/show.rb +12 -0
- data/lib/rails_admin_next/config/sections/update.rb +12 -0
- data/lib/rails_admin_next/config/sections.rb +39 -0
- data/lib/rails_admin_next/config.rb +436 -0
- data/lib/rails_admin_next/engine.rb +91 -0
- data/lib/rails_admin_next/extension.rb +35 -0
- data/lib/rails_admin_next/extensions/cancancan/authorization_adapter.rb +90 -0
- data/lib/rails_admin_next/extensions/cancancan.rb +5 -0
- data/lib/rails_admin_next/extensions/controller_extension.rb +8 -0
- data/lib/rails_admin_next/extensions/paper_trail/auditing_adapter.rb +192 -0
- data/lib/rails_admin_next/extensions/paper_trail.rb +5 -0
- data/lib/rails_admin_next/extensions/pundit/authorization_adapter.rb +72 -0
- data/lib/rails_admin_next/extensions/pundit.rb +5 -0
- data/lib/rails_admin_next/extensions/url_for_extension.rb +15 -0
- data/lib/rails_admin_next/icons.rb +143 -0
- data/lib/rails_admin_next/support/composite_keys_serializer.rb +15 -0
- data/lib/rails_admin_next/support/csv_converter.rb +100 -0
- data/lib/rails_admin_next/support/hash_helper.rb +31 -0
- data/lib/rails_admin_next/support/paginated_collection.rb +79 -0
- data/lib/rails_admin_next/version.rb +17 -0
- data/lib/rails_admin_next.rb +72 -0
- data/lib/tasks/rails_admin.rake +40 -0
- data/src/rails_admin/application.js +15 -0
- data/src/rails_admin/base.js +12 -0
- data/src/rails_admin/controllers/alert_controller.js +28 -0
- data/src/rails_admin/controllers/collapse_controller.js +16 -0
- data/src/rails_admin/controllers/dropdown_controller.js +110 -0
- data/src/rails_admin/controllers/feedback_controller.js +73 -0
- data/src/rails_admin/controllers/filter_box_controller.js +346 -0
- data/src/rails_admin/controllers/filtering_multiselect_controller.js +386 -0
- data/src/rails_admin/controllers/filtering_select_controller.js +509 -0
- data/src/rails_admin/controllers/index.js +31 -0
- data/src/rails_admin/controllers/modal_controller.js +142 -0
- data/src/rails_admin/controllers/nested_form_controller.js +117 -0
- data/src/rails_admin/controllers/polymorphic_controller.js +26 -0
- data/src/rails_admin/controllers/remote_form_controller.js +173 -0
- data/src/rails_admin/controllers/sidescroll_controller.js +23 -0
- data/src/rails_admin/dom-ready.js +20 -0
- data/src/rails_admin/dom.js +19 -0
- data/src/rails_admin/i18n.js +20 -0
- data/src/rails_admin/icons.js +64 -0
- data/src/rails_admin/interactions.js +221 -0
- data/src/rails_admin/select_query.js +65 -0
- metadata +346 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAdminNext
|
|
4
|
+
module Config
|
|
5
|
+
module Inspectable
|
|
6
|
+
def inspect
|
|
7
|
+
set_named_instance_variables
|
|
8
|
+
|
|
9
|
+
instance_name = try(:name) || try(:abstract_model).try(:model).try(:name)
|
|
10
|
+
instance_name = instance_name ? "[#{instance_name}]" : ""
|
|
11
|
+
|
|
12
|
+
instance_vars = instance_variables.collect do |v|
|
|
13
|
+
instance_variable_name(v)
|
|
14
|
+
end.join(", ")
|
|
15
|
+
|
|
16
|
+
"#<#{self.class.name}#{instance_name} #{instance_vars}>"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def instance_variable_name(variable)
|
|
22
|
+
value = instance_variable_get(variable)
|
|
23
|
+
if self.class::NAMED_INSTANCE_VARIABLES.include?(variable)
|
|
24
|
+
if value.respond_to?(:name)
|
|
25
|
+
"#{variable}=#{value.name.inspect}"
|
|
26
|
+
else
|
|
27
|
+
"#{variable}=#{value.class.name}"
|
|
28
|
+
end
|
|
29
|
+
else
|
|
30
|
+
"#{variable}=#{value.inspect}"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def set_named_instance_variables
|
|
35
|
+
self.class.const_set(:NAMED_INSTANCE_VARIABLES, []) unless defined?(self.class::NAMED_INSTANCE_VARIABLES)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/model"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
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 ||= ::RailsAdminNext::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 RailsAdminNext 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_next do
|
|
41
|
+
# :
|
|
42
|
+
# end
|
|
43
|
+
# end
|
|
44
|
+
#
|
|
45
|
+
# # config/initializers/rails_admin_next.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, *, &)
|
|
66
|
+
target.send(method_name, *, &)
|
|
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
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config"
|
|
4
|
+
require "rails_admin_next/config/proxyable"
|
|
5
|
+
require "rails_admin_next/config/configurable"
|
|
6
|
+
require "rails_admin_next/config/hideable"
|
|
7
|
+
require "rails_admin_next/config/has_groups"
|
|
8
|
+
require "rails_admin_next/config/fields/group"
|
|
9
|
+
require "rails_admin_next/config/fields"
|
|
10
|
+
require "rails_admin_next/config/has_fields"
|
|
11
|
+
require "rails_admin_next/config/has_description"
|
|
12
|
+
require "rails_admin_next/config/sections"
|
|
13
|
+
require "rails_admin_next/config/actions"
|
|
14
|
+
require "rails_admin_next/config/inspectable"
|
|
15
|
+
|
|
16
|
+
module RailsAdminNext
|
|
17
|
+
module Config
|
|
18
|
+
# Model specific configuration object.
|
|
19
|
+
class Model
|
|
20
|
+
include RailsAdminNext::Config::Proxyable
|
|
21
|
+
include RailsAdminNext::Config::Configurable
|
|
22
|
+
include RailsAdminNext::Config::Hideable
|
|
23
|
+
include RailsAdminNext::Config::Sections
|
|
24
|
+
include RailsAdminNext::Config::Inspectable
|
|
25
|
+
|
|
26
|
+
attr_reader :abstract_model, :parent, :root
|
|
27
|
+
attr_accessor :groups
|
|
28
|
+
|
|
29
|
+
NAMED_INSTANCE_VARIABLES = %i[@parent @root].freeze
|
|
30
|
+
|
|
31
|
+
def initialize(entity)
|
|
32
|
+
@parent = nil
|
|
33
|
+
@root = self
|
|
34
|
+
|
|
35
|
+
@abstract_model =
|
|
36
|
+
case entity
|
|
37
|
+
when RailsAdminNext::AbstractModel
|
|
38
|
+
entity
|
|
39
|
+
when Class, String
|
|
40
|
+
RailsAdminNext::AbstractModel.new(entity)
|
|
41
|
+
when Symbol
|
|
42
|
+
RailsAdminNext::AbstractModel.new(entity.to_s)
|
|
43
|
+
else
|
|
44
|
+
RailsAdminNext::AbstractModel.new(entity.class)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
@groups = [RailsAdminNext::Config::Fields::Group.new(self, :default).tap { |g| g.label { I18n.translate("admin.form.basic_info") } }]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def excluded?
|
|
51
|
+
return @excluded if defined?(@excluded)
|
|
52
|
+
|
|
53
|
+
@excluded = !RailsAdminNext::AbstractModel.all.collect(&:model_name).include?(abstract_model.try(:model_name))
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def object_label
|
|
57
|
+
bindings[:object].send(object_label_method).presence ||
|
|
58
|
+
bindings[:object].send(:rails_admin_default_object_label_method)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# The display for a model instance (i.e. a single database record).
|
|
62
|
+
# Unless configured in a model config block, it'll try to use :name followed by :title methods, then
|
|
63
|
+
# any methods that may have been added to the label_methods array via Configuration.
|
|
64
|
+
# Failing all of these, it'll return the class name followed by the model's id.
|
|
65
|
+
register_instance_option :object_label_method do
|
|
66
|
+
@object_label_method ||= Config.label_methods.detect { |method| (@dummy_object ||= abstract_model.model.new).respond_to? method } || :rails_admin_default_object_label_method
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
register_instance_option :label do
|
|
70
|
+
(@label ||= {})[::I18n.locale] ||= abstract_model.model.model_name.human
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
register_instance_option :label_plural do
|
|
74
|
+
(@label_plural ||= {})[::I18n.locale] ||= abstract_model.model.model_name.human(count: Float::INFINITY, default: label.pluralize(::I18n.locale))
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def pluralize(count)
|
|
78
|
+
(count == 1) ? label : label_plural
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
register_instance_option :weight do
|
|
82
|
+
0
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# parent node in navigation/breadcrumb
|
|
86
|
+
register_instance_option :parent do
|
|
87
|
+
@parent_model ||= begin
|
|
88
|
+
klass = abstract_model.model.superclass
|
|
89
|
+
klass = nil if klass.to_s.in?(%w[Object BasicObject ActiveRecord::Base])
|
|
90
|
+
klass
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
register_instance_option :navigation_label do
|
|
95
|
+
@navigation_label ||=
|
|
96
|
+
if (parent_module = abstract_model.model.try(:module_parent) || abstract_model.model.try!(:parent)) != Object
|
|
97
|
+
parent_module.to_s
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Logical icon name (see RailsAdminNext::Icons::GLYPHS) rendered as inline SVG
|
|
102
|
+
# next to the model in the sidebar; nil for no icon.
|
|
103
|
+
register_instance_option :navigation_icon do
|
|
104
|
+
nil
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
register_instance_option :scope do
|
|
108
|
+
abstract_model.scoped
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
register_instance_option :last_created_at do
|
|
112
|
+
abstract_model.model.last.try(:created_at) if abstract_model.properties.detect { |c| c.name == :created_at }
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Act as a proxy for the base section configuration that actually
|
|
116
|
+
# store the configurations.
|
|
117
|
+
def method_missing(method_name, *, &)
|
|
118
|
+
send(:base).send(method_name, *, &)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def respond_to_missing?(method_name, include_private = false)
|
|
122
|
+
send(:base).respond_to?(method_name, include_private) || super
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAdminNext
|
|
4
|
+
module Config
|
|
5
|
+
module Proxyable
|
|
6
|
+
class Proxy < BasicObject
|
|
7
|
+
def initialize(object, bindings = {})
|
|
8
|
+
@object = object
|
|
9
|
+
@bindings = bindings
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Bind variables to be used by the configuration options
|
|
13
|
+
def bind(key, value = nil)
|
|
14
|
+
if key.is_a?(::Hash)
|
|
15
|
+
@bindings = key
|
|
16
|
+
else
|
|
17
|
+
@bindings[key] = value
|
|
18
|
+
end
|
|
19
|
+
self
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Transparent proxy: `Proxy < BasicObject` has no `respond_to?`, so
|
|
23
|
+
# `respond_to_missing?` would be dead code (nothing ever calls it) — a
|
|
24
|
+
# bare `proxy.respond_to?(:x)` is itself delegated through method_missing.
|
|
25
|
+
def method_missing(method_name, *, &) # standard:disable Style/MissingRespondToMissing
|
|
26
|
+
if @object.respond_to?(method_name)
|
|
27
|
+
reset = @object.bindings
|
|
28
|
+
begin
|
|
29
|
+
@object.bindings = @bindings
|
|
30
|
+
response = @object.__send__(method_name, *, &)
|
|
31
|
+
ensure
|
|
32
|
+
@object.bindings = reset
|
|
33
|
+
end
|
|
34
|
+
response
|
|
35
|
+
else
|
|
36
|
+
super
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/proxyable/proxy"
|
|
4
|
+
module RailsAdminNext
|
|
5
|
+
module Config
|
|
6
|
+
module Proxyable
|
|
7
|
+
def bindings
|
|
8
|
+
Thread.current[:rails_admin_bindings] ||= {}
|
|
9
|
+
Thread.current[:rails_admin_bindings][self]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def bindings=(new_bindings)
|
|
13
|
+
Thread.current[:rails_admin_bindings] ||= {}
|
|
14
|
+
if new_bindings.nil?
|
|
15
|
+
Thread.current[:rails_admin_bindings].delete(self)
|
|
16
|
+
else
|
|
17
|
+
Thread.current[:rails_admin_bindings][self] = new_bindings
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def with(bindings = {})
|
|
22
|
+
RailsAdminNext::Config::Proxyable::Proxy.new(self, bindings)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/proxyable"
|
|
4
|
+
require "rails_admin_next/config/configurable"
|
|
5
|
+
require "rails_admin_next/config/inspectable"
|
|
6
|
+
require "rails_admin_next/config/has_fields"
|
|
7
|
+
require "rails_admin_next/config/has_groups"
|
|
8
|
+
require "rails_admin_next/config/has_description"
|
|
9
|
+
|
|
10
|
+
module RailsAdminNext
|
|
11
|
+
module Config
|
|
12
|
+
module Sections
|
|
13
|
+
# Configuration of the show view for a new object
|
|
14
|
+
class Base
|
|
15
|
+
include RailsAdminNext::Config::Proxyable
|
|
16
|
+
include RailsAdminNext::Config::Configurable
|
|
17
|
+
include RailsAdminNext::Config::Inspectable
|
|
18
|
+
|
|
19
|
+
include RailsAdminNext::Config::HasFields
|
|
20
|
+
include RailsAdminNext::Config::HasGroups
|
|
21
|
+
include RailsAdminNext::Config::HasDescription
|
|
22
|
+
|
|
23
|
+
attr_reader :abstract_model, :parent, :root
|
|
24
|
+
|
|
25
|
+
NAMED_INSTANCE_VARIABLES = %i[@parent @root @abstract_model].freeze
|
|
26
|
+
|
|
27
|
+
def initialize(parent)
|
|
28
|
+
@parent = parent
|
|
29
|
+
@root = parent.root
|
|
30
|
+
|
|
31
|
+
@abstract_model = root.abstract_model
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/sections/edit"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Sections
|
|
8
|
+
# Configuration of the edit view for a new object
|
|
9
|
+
class Create < RailsAdminNext::Config::Sections::Edit
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/sections/base"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Sections
|
|
8
|
+
# Configuration of the edit view for an existing object
|
|
9
|
+
class Edit < RailsAdminNext::Config::Sections::Base
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/sections/base"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Sections
|
|
8
|
+
# Configuration of the navigation view
|
|
9
|
+
class Export < RailsAdminNext::Config::Sections::Base
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/sections/base"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Sections
|
|
8
|
+
# Configuration of the list view
|
|
9
|
+
class List < RailsAdminNext::Config::Sections::Base
|
|
10
|
+
register_instance_option :checkboxes? do
|
|
11
|
+
true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
register_instance_option :filters do
|
|
15
|
+
[]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Number of items listed per page
|
|
19
|
+
register_instance_option :items_per_page do
|
|
20
|
+
RailsAdminNext::Config.default_items_per_page
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Positive value shows only prev, next links in pagination.
|
|
24
|
+
# This is for avoiding count(*) query.
|
|
25
|
+
register_instance_option :limited_pagination do
|
|
26
|
+
false
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
register_instance_option :search_by do
|
|
30
|
+
nil
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
register_instance_option :search_help do
|
|
34
|
+
nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
register_instance_option :sort_by do
|
|
38
|
+
parent.abstract_model.primary_key
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
register_instance_option :scopes do
|
|
42
|
+
[]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
register_instance_option :row_css_class do
|
|
46
|
+
""
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
register_deprecated_instance_option :sidescroll do
|
|
50
|
+
RailsAdminNext.deprecator.warn("The sidescroll configuration option was removed, it is always enabled now.")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def fields_for_table
|
|
54
|
+
visible_fields.partition(&:sticky?).flatten
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
register_deprecated_instance_option :sort_reverse do
|
|
58
|
+
RailsAdminNext.deprecator.warn("The sort_reverse configuration option is deprecated and has no effect.")
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_support/core_ext/string/inflections"
|
|
4
|
+
require "rails_admin_next/config/sections/base"
|
|
5
|
+
require "rails_admin_next/config/sections/edit"
|
|
6
|
+
require "rails_admin_next/config/sections/update"
|
|
7
|
+
require "rails_admin_next/config/sections/create"
|
|
8
|
+
require "rails_admin_next/config/sections/nested"
|
|
9
|
+
require "rails_admin_next/config/sections/modal"
|
|
10
|
+
require "rails_admin_next/config/sections/list"
|
|
11
|
+
require "rails_admin_next/config/sections/export"
|
|
12
|
+
require "rails_admin_next/config/sections/show"
|
|
13
|
+
|
|
14
|
+
module RailsAdminNext
|
|
15
|
+
module Config
|
|
16
|
+
# Sections describe different views in the RailsAdminNext engine. Configurable sections are
|
|
17
|
+
# list and navigation.
|
|
18
|
+
#
|
|
19
|
+
# Each section's class object can store generic configuration about that section (such as the
|
|
20
|
+
# number of visible tabs in the main navigation), while the instances (accessed via model
|
|
21
|
+
# configuration objects) store model specific configuration (such as the visibility of the
|
|
22
|
+
# model).
|
|
23
|
+
module Sections
|
|
24
|
+
def self.included(klass)
|
|
25
|
+
# Register accessors for all the sections in this namespace
|
|
26
|
+
constants.each do |name|
|
|
27
|
+
section = RailsAdminNext::Config::Sections.const_get(name)
|
|
28
|
+
name = name.to_s.underscore.to_sym
|
|
29
|
+
klass.send(:define_method, name) do |&block|
|
|
30
|
+
@sections ||= {}
|
|
31
|
+
@sections[name] = section.new(self) unless @sections[name]
|
|
32
|
+
@sections[name].instance_eval(&block) if block
|
|
33
|
+
@sections[name]
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|