rails_admin 1.0.0.rc → 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.
Potentially problematic release.
This version of rails_admin might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +1 -2
- data/README.md +1 -14
- data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +15 -10
- data/app/assets/javascripts/rails_admin/ra.filtering-select.js +205 -110
- data/app/assets/javascripts/rails_admin/ra.remote-form.js +1 -4
- data/app/controllers/rails_admin/application_controller.rb +5 -5
- data/app/controllers/rails_admin/main_controller.rb +2 -2
- data/app/helpers/rails_admin/application_helper.rb +2 -2
- data/app/helpers/rails_admin/form_builder.rb +9 -2
- data/app/helpers/rails_admin/main_helper.rb +1 -1
- data/app/views/layouts/rails_admin/application.html.haml +1 -0
- data/app/views/rails_admin/main/_delete_notice.html.haml +14 -9
- data/app/views/rails_admin/main/index.html.haml +2 -2
- data/config/initializers/active_record_extensions.rb +2 -2
- data/config/locales/rails_admin.en.yml +1 -0
- data/lib/rails_admin/abstract_model.rb +6 -7
- data/lib/rails_admin/adapters/active_record.rb +30 -11
- data/lib/rails_admin/adapters/mongoid.rb +2 -2
- data/lib/rails_admin/adapters/mongoid/association.rb +2 -2
- data/lib/rails_admin/adapters/mongoid/extension.rb +1 -1
- data/lib/rails_admin/adapters/mongoid/property.rb +1 -1
- data/lib/rails_admin/bootstrap-sass.rb +1 -3
- data/lib/rails_admin/bootstrap-sass/compass_functions.rb +1 -1
- data/lib/rails_admin/config.rb +12 -8
- data/lib/rails_admin/config/actions.rb +1 -1
- data/lib/rails_admin/config/actions/base.rb +3 -4
- data/lib/rails_admin/config/actions/bulk_delete.rb +1 -3
- data/lib/rails_admin/config/actions/index.rb +3 -5
- data/lib/rails_admin/config/configurable.rb +4 -6
- data/lib/rails_admin/config/fields/association.rb +1 -1
- data/lib/rails_admin/config/fields/base.rb +15 -26
- data/lib/rails_admin/config/fields/factories/carrierwave.rb +1 -1
- data/lib/rails_admin/config/fields/types.rb +1 -1
- data/lib/rails_admin/config/fields/types/active_record_enum.rb +17 -2
- data/lib/rails_admin/config/fields/types/file_upload.rb +1 -1
- data/lib/rails_admin/config/fields/types/has_many_association.rb +1 -1
- data/lib/rails_admin/config/fields/types/polymorphic_association.rb +1 -1
- data/lib/rails_admin/config/fields/types/string.rb +6 -5
- data/lib/rails_admin/config/fields/types/text.rb +3 -3
- data/lib/rails_admin/config/hideable.rb +1 -1
- data/lib/rails_admin/config/inspectable.rb +39 -0
- data/lib/rails_admin/config/model.rb +4 -17
- data/lib/rails_admin/config/sections/base.rb +4 -17
- data/lib/rails_admin/engine.rb +3 -2
- data/lib/rails_admin/extension.rb +4 -4
- data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +10 -2
- data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +11 -1
- data/lib/rails_admin/support/datetime.rb +1 -1
- data/lib/rails_admin/version.rb +1 -1
- metadata +7 -6
@@ -43,13 +43,11 @@ module RailsAdmin
|
|
43
43
|
|
44
44
|
if destroyed.nil?
|
45
45
|
flash[:error] = t('admin.flash.error', name: pluralize(0, @model_config.label), action: t('admin.actions.delete.done'))
|
46
|
-
redirect_to back_or_index
|
47
46
|
else
|
48
47
|
flash[:success] = t('admin.flash.successful', name: pluralize(destroyed.count, @model_config.label), action: t('admin.actions.delete.done')) unless destroyed.empty?
|
49
48
|
flash[:error] = t('admin.flash.error', name: pluralize(not_destroyed.count, @model_config.label), action: t('admin.actions.delete.done')) unless not_destroyed.empty?
|
50
|
-
redirect_to back_or_index
|
51
49
|
end
|
52
|
-
|
50
|
+
redirect_to back_or_index
|
53
51
|
end
|
54
52
|
end
|
55
53
|
end
|
@@ -76,12 +76,10 @@ module RailsAdmin
|
|
76
76
|
send_data output,
|
77
77
|
type: "text/csv; charset=#{encoding}; #{'header=present' if header}",
|
78
78
|
disposition: "attachment; filename=#{params[:model_name]}_#{DateTime.now.strftime('%Y-%m-%d_%Hh%Mm%S')}.csv"
|
79
|
+
elsif Rails.version.to_s >= '5'
|
80
|
+
render plain: output
|
79
81
|
else
|
80
|
-
|
81
|
-
render plain: output
|
82
|
-
else
|
83
|
-
render text: output
|
84
|
-
end
|
82
|
+
render text: output
|
85
83
|
end
|
86
84
|
end
|
87
85
|
end
|
@@ -43,7 +43,7 @@ module RailsAdmin
|
|
43
43
|
|
44
44
|
# Define getter/setter by the option name
|
45
45
|
scope.send(:define_method, option_name) do |*args, &block|
|
46
|
-
if !args[0].nil? || block
|
46
|
+
if !args[0].nil? || block
|
47
47
|
# Invocation with args --> This is the declaration of the option, i.e. setter
|
48
48
|
instance_variable_set("@#{option_name}_registered", args[0].nil? ? block : args[0])
|
49
49
|
else
|
@@ -75,12 +75,10 @@ module RailsAdmin
|
|
75
75
|
if replacement_option_name
|
76
76
|
ActiveSupport::Deprecation.warn("The #{option_name} configuration option is deprecated, please use #{replacement_option_name}.")
|
77
77
|
send(replacement_option_name, *args, &block)
|
78
|
+
elsif block_given?
|
79
|
+
yield
|
78
80
|
else
|
79
|
-
|
80
|
-
yield
|
81
|
-
else
|
82
|
-
fail("The #{option_name} configuration option is removed without replacement.")
|
83
|
-
end
|
81
|
+
raise("The #{option_name} configuration option is removed without replacement.")
|
84
82
|
end
|
85
83
|
end
|
86
84
|
end
|
@@ -2,6 +2,7 @@ require 'rails_admin/config/proxyable'
|
|
2
2
|
require 'rails_admin/config/configurable'
|
3
3
|
require 'rails_admin/config/hideable'
|
4
4
|
require 'rails_admin/config/groupable'
|
5
|
+
require 'rails_admin/config/inspectable'
|
5
6
|
|
6
7
|
module RailsAdmin
|
7
8
|
module Config
|
@@ -11,11 +12,17 @@ module RailsAdmin
|
|
11
12
|
include RailsAdmin::Config::Configurable
|
12
13
|
include RailsAdmin::Config::Hideable
|
13
14
|
include RailsAdmin::Config::Groupable
|
15
|
+
include RailsAdmin::Config::Inspectable
|
14
16
|
|
15
17
|
attr_reader :name, :properties, :abstract_model
|
16
18
|
attr_accessor :defined, :order, :section
|
17
19
|
attr_reader :parent, :root
|
18
20
|
|
21
|
+
NAMED_INSTANCE_VARIABLES = [
|
22
|
+
:@parent, :@root, :@section, :@children_fields_registered,
|
23
|
+
:@associated_model_config, :@group, :@bindings
|
24
|
+
].freeze
|
25
|
+
|
19
26
|
def initialize(parent, name, properties)
|
20
27
|
@parent = parent
|
21
28
|
@root = parent.root
|
@@ -57,7 +64,7 @@ module RailsAdmin
|
|
57
64
|
end
|
58
65
|
|
59
66
|
register_instance_option :filterable? do
|
60
|
-
!!searchable
|
67
|
+
!!searchable
|
61
68
|
end
|
62
69
|
|
63
70
|
register_instance_option :search_operator do
|
@@ -92,7 +99,7 @@ module RailsAdmin
|
|
92
99
|
property = am && am.properties.detect { |p| p.name == f.values.first.to_sym }
|
93
100
|
type = property && property.type
|
94
101
|
else # <attribute|column>
|
95
|
-
am = (
|
102
|
+
am = (association? ? associated_model_config.abstract_model : abstract_model)
|
96
103
|
table_name = am.table_name
|
97
104
|
column = f
|
98
105
|
property = am.properties.detect { |p| p.name == f.to_sym }
|
@@ -172,12 +179,12 @@ module RailsAdmin
|
|
172
179
|
:nil
|
173
180
|
end
|
174
181
|
end
|
175
|
-
(@required ||= {})[context] ||= !!([name] + children_fields).uniq.detect do |column_name|
|
182
|
+
(@required ||= {})[context] ||= !!([name] + children_fields).uniq.detect do |column_name|
|
176
183
|
abstract_model.model.validators_on(column_name).detect do |v|
|
177
184
|
!(v.options[:allow_nil] || v.options[:allow_blank]) &&
|
178
|
-
|
179
|
-
|
180
|
-
|
185
|
+
[:presence, :numericality, :attachment_presence].include?(v.kind) &&
|
186
|
+
(v.options[:on] == context || v.options[:on].blank?) &&
|
187
|
+
(v.options[:if].blank? && v.options[:unless].blank?)
|
181
188
|
end
|
182
189
|
end
|
183
190
|
end
|
@@ -247,8 +254,8 @@ module RailsAdmin
|
|
247
254
|
#
|
248
255
|
# @see RailsAdmin::Config::Fields::Base.register_instance_option :required?
|
249
256
|
def optional(state = nil, &block)
|
250
|
-
if !state.nil? || block
|
251
|
-
required state.nil? ? proc { false ==
|
257
|
+
if !state.nil? || block
|
258
|
+
required state.nil? ? proc { false == instance_eval(&block) } : false == state
|
252
259
|
else
|
253
260
|
optional?
|
254
261
|
end
|
@@ -324,24 +331,6 @@ module RailsAdmin
|
|
324
331
|
def form_value
|
325
332
|
form_default_value.nil? ? formatted_value : form_default_value
|
326
333
|
end
|
327
|
-
|
328
|
-
def inspect
|
329
|
-
"#<#{self.class.name}[#{name}] #{
|
330
|
-
instance_variables.collect do |v|
|
331
|
-
value = instance_variable_get(v)
|
332
|
-
if [:@parent, :@root, :@section, :@children_fields_registered,
|
333
|
-
:@associated_model_config, :@group, :@bindings].include? v
|
334
|
-
if value.respond_to? :name
|
335
|
-
"#{v}=#{value.name.inspect}"
|
336
|
-
else
|
337
|
-
"#{v}=#{value.class.name}"
|
338
|
-
end
|
339
|
-
else
|
340
|
-
"#{v}=#{value.inspect}"
|
341
|
-
end
|
342
|
-
end.join(', ')
|
343
|
-
}>"
|
344
|
-
end
|
345
334
|
end
|
346
335
|
end
|
347
336
|
end
|
@@ -4,7 +4,7 @@ require 'rails_admin/config/fields/types/file_upload'
|
|
4
4
|
|
5
5
|
RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
|
6
6
|
model = parent.abstract_model.model
|
7
|
-
if defined?(::CarrierWave) &&
|
7
|
+
if defined?(::CarrierWave) && model.is_a?(CarrierWave::Mount) && model.uploaders.include?(attachment_name = properties.name.to_s.chomp('_file_name').to_sym)
|
8
8
|
columns = [model.uploader_options[attachment_name][:mount_on] || attachment_name, "#{attachment_name}_content_type".to_sym, "#{attachment_name}_file_size".to_sym]
|
9
9
|
field = RailsAdmin::Config::Fields::Types.load(:carrierwave).new(parent, attachment_name, properties)
|
10
10
|
fields << field
|
@@ -28,7 +28,12 @@ module RailsAdmin
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def parse_value(value)
|
31
|
-
value.present?
|
31
|
+
return unless value.present?
|
32
|
+
if ::Rails.version >= '5'
|
33
|
+
abstract_model.model.attribute_types[name.to_s].deserialize(value)
|
34
|
+
else
|
35
|
+
enum.invert[type_cast_value(value)]
|
36
|
+
end
|
32
37
|
end
|
33
38
|
|
34
39
|
def parse_input(params)
|
@@ -36,7 +41,17 @@ module RailsAdmin
|
|
36
41
|
end
|
37
42
|
|
38
43
|
def form_value
|
39
|
-
|
44
|
+
enum[super] || super
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def type_cast_value(value)
|
50
|
+
if ::Rails.version >= '4.2'
|
51
|
+
abstract_model.model.column_types[name.to_s].type_cast_from_user(value)
|
52
|
+
else
|
53
|
+
abstract_model.model.column_types[name.to_s].type_cast(value)
|
54
|
+
end
|
40
55
|
end
|
41
56
|
end
|
42
57
|
end
|
@@ -22,7 +22,7 @@ module RailsAdmin
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def method_name
|
25
|
-
nested_form ? "#{super}_attributes".to_sym : "#{super.to_s.singularize}_ids".to_sym
|
25
|
+
nested_form ? "#{super}_attributes".to_sym : "#{super.to_s.singularize}_ids".to_sym # name_ids
|
26
26
|
end
|
27
27
|
|
28
28
|
# Reader for validation errors of the bound object
|
@@ -16,7 +16,7 @@ module RailsAdmin
|
|
16
16
|
# association checks that any of the child models are included in
|
17
17
|
# configuration.
|
18
18
|
register_instance_option :visible? do
|
19
|
-
associated_model_config.
|
19
|
+
associated_model_config.any?
|
20
20
|
end
|
21
21
|
|
22
22
|
register_instance_option :formatted_value do
|
@@ -27,11 +27,12 @@ module RailsAdmin
|
|
27
27
|
max_length = [length, valid_length[:maximum] || nil].compact.min
|
28
28
|
min_length = [0, valid_length[:minimum] || nil].compact.max
|
29
29
|
if max_length
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
text +=
|
31
|
+
if min_length == 0
|
32
|
+
"#{I18n.translate('admin.form.char_length_up_to').capitalize} #{max_length}."
|
33
|
+
else
|
34
|
+
"#{I18n.translate('admin.form.char_length_of').capitalize} #{min_length}-#{max_length}."
|
35
|
+
end
|
35
36
|
end
|
36
37
|
end
|
37
38
|
text
|
@@ -10,19 +10,19 @@ module RailsAdmin
|
|
10
10
|
|
11
11
|
[:ckeditor, :ckeditor_base_location, :ckeditor_config_js, :ckeditor_location].each do |key|
|
12
12
|
register_deprecated_instance_option key do
|
13
|
-
|
13
|
+
raise("The 'field(:foo){ ckeditor true }' style DSL is deprecated. Please use 'field :foo, :ck_editor' instead.")
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
[:codemirror, :codemirror_assets, :codemirror_config, :codemirror_css_location, :codemirror_js_location].each do |key|
|
18
18
|
register_deprecated_instance_option key do
|
19
|
-
|
19
|
+
raise("The 'field(:foo){ codemirror true }' style DSL is deprecated. Please use 'field :foo, :code_mirror' instead.")
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
[:bootstrap_wysihtml5, :bootstrap_wysihtml5_config_options, :bootstrap_wysihtml5_css_location, :bootstrap_wysihtml5_js_location].each do |key|
|
24
24
|
register_deprecated_instance_option key do
|
25
|
-
|
25
|
+
raise("The 'field(:foo){ bootstrap_wysihtml5 true }' style DSL is deprecated. Please use 'field :foo, :wysihtml5' instead.")
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module RailsAdmin
|
2
|
+
module Config
|
3
|
+
module Inspectable
|
4
|
+
def inspect
|
5
|
+
set_named_instance_variables
|
6
|
+
|
7
|
+
instance_name = try(:name) || try(:abstract_model).try(:model).try(:name)
|
8
|
+
instance_name = instance_name ? "[#{instance_name}]" : ''
|
9
|
+
|
10
|
+
instance_vars = instance_variables.collect do |v|
|
11
|
+
instance_variable_name(v)
|
12
|
+
end.join(', ')
|
13
|
+
|
14
|
+
"#<#{self.class.name}#{instance_name} #{instance_vars}>"
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def instance_variable_name(variable)
|
20
|
+
value = instance_variable_get(variable)
|
21
|
+
if self.class::NAMED_INSTANCE_VARIABLES.include?(variable)
|
22
|
+
if value.respond_to?(:name)
|
23
|
+
"#{variable}=#{value.name.inspect}"
|
24
|
+
else
|
25
|
+
"#{variable}=#{value.class.name}"
|
26
|
+
end
|
27
|
+
else
|
28
|
+
"#{variable}=#{value.inspect}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def set_named_instance_variables
|
33
|
+
unless defined?(self.class::NAMED_INSTANCE_VARIABLES)
|
34
|
+
self.class.const_set('NAMED_INSTANCE_VARIABLES', [])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -9,6 +9,7 @@ require 'rails_admin/config/has_fields'
|
|
9
9
|
require 'rails_admin/config/has_description'
|
10
10
|
require 'rails_admin/config/sections'
|
11
11
|
require 'rails_admin/config/actions'
|
12
|
+
require 'rails_admin/config/inspectable'
|
12
13
|
|
13
14
|
module RailsAdmin
|
14
15
|
module Config
|
@@ -18,11 +19,14 @@ module RailsAdmin
|
|
18
19
|
include RailsAdmin::Config::Configurable
|
19
20
|
include RailsAdmin::Config::Hideable
|
20
21
|
include RailsAdmin::Config::Sections
|
22
|
+
include RailsAdmin::Config::Inspectable
|
21
23
|
|
22
24
|
attr_reader :abstract_model
|
23
25
|
attr_accessor :groups
|
24
26
|
attr_reader :parent, :root
|
25
27
|
|
28
|
+
NAMED_INSTANCE_VARIABLES = [:@parent, :@root].freeze
|
29
|
+
|
26
30
|
def initialize(entity)
|
27
31
|
@parent = nil
|
28
32
|
@root = self
|
@@ -98,23 +102,6 @@ module RailsAdmin
|
|
98
102
|
def method_missing(m, *args, &block)
|
99
103
|
send(:base).send(m, *args, &block)
|
100
104
|
end
|
101
|
-
|
102
|
-
def inspect
|
103
|
-
"#<#{self.class.name}[#{abstract_model.model.name}] #{
|
104
|
-
instance_variables.collect do |v|
|
105
|
-
value = instance_variable_get(v)
|
106
|
-
if [:@parent, :@root].include? v
|
107
|
-
if value.respond_to? :name
|
108
|
-
"#{v}=#{value.name.inspect}"
|
109
|
-
else
|
110
|
-
"#{v}=#{value.class.name}"
|
111
|
-
end
|
112
|
-
else
|
113
|
-
"#{v}=#{value.inspect}"
|
114
|
-
end
|
115
|
-
end.join(', ')
|
116
|
-
}>"
|
117
|
-
end
|
118
105
|
end
|
119
106
|
end
|
120
107
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rails_admin/config/proxyable'
|
2
2
|
require 'rails_admin/config/configurable'
|
3
|
+
require 'rails_admin/config/inspectable'
|
3
4
|
require 'rails_admin/config/has_fields'
|
4
5
|
require 'rails_admin/config/has_groups'
|
5
6
|
require 'rails_admin/config/has_description'
|
@@ -11,6 +12,7 @@ module RailsAdmin
|
|
11
12
|
class Base
|
12
13
|
include RailsAdmin::Config::Proxyable
|
13
14
|
include RailsAdmin::Config::Configurable
|
15
|
+
include RailsAdmin::Config::Inspectable
|
14
16
|
|
15
17
|
include RailsAdmin::Config::HasFields
|
16
18
|
include RailsAdmin::Config::HasGroups
|
@@ -19,29 +21,14 @@ module RailsAdmin
|
|
19
21
|
attr_reader :abstract_model
|
20
22
|
attr_reader :parent, :root
|
21
23
|
|
24
|
+
NAMED_INSTANCE_VARIABLES = [:@parent, :@root, :@abstract_model].freeze
|
25
|
+
|
22
26
|
def initialize(parent)
|
23
27
|
@parent = parent
|
24
28
|
@root = parent.root
|
25
29
|
|
26
30
|
@abstract_model = root.abstract_model
|
27
31
|
end
|
28
|
-
|
29
|
-
def inspect
|
30
|
-
"#<#{self.class.name} #{
|
31
|
-
instance_variables.collect do |v|
|
32
|
-
value = instance_variable_get(v)
|
33
|
-
if [:@parent, :@root, :@abstract_model].include? v
|
34
|
-
if value.respond_to? :name
|
35
|
-
"#{v}=#{value.name.inspect}"
|
36
|
-
else
|
37
|
-
"#{v}=#{value.class.name}"
|
38
|
-
end
|
39
|
-
else
|
40
|
-
"#{v}=#{value.inspect}"
|
41
|
-
end
|
42
|
-
end.join(', ')
|
43
|
-
}>"
|
44
|
-
end
|
45
32
|
end
|
46
33
|
end
|
47
34
|
end
|
data/lib/rails_admin/engine.rb
CHANGED
@@ -12,7 +12,7 @@ module RailsAdmin
|
|
12
12
|
class Engine < Rails::Engine
|
13
13
|
isolate_namespace RailsAdmin
|
14
14
|
|
15
|
-
config.action_dispatch.rescue_responses
|
15
|
+
config.action_dispatch.rescue_responses['RailsAdmin::ActionNotAllowed'] = :forbidden
|
16
16
|
|
17
17
|
initializer 'RailsAdmin precompile hook', group: :all do |app|
|
18
18
|
app.config.assets.precompile += %w(
|
@@ -23,7 +23,8 @@ module RailsAdmin
|
|
23
23
|
)
|
24
24
|
end
|
25
25
|
|
26
|
-
initializer 'RailsAdmin
|
26
|
+
initializer 'RailsAdmin setup middlewares' do |app|
|
27
|
+
app.config.middleware.use ActionDispatch::Flash
|
27
28
|
app.config.middleware.use Rack::Pjax
|
28
29
|
end
|
29
30
|
|