rails_admin 1.0.0.rc → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rails_admin might be problematic. Click here for more details.

Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -2
  3. data/README.md +1 -14
  4. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +15 -10
  5. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +205 -110
  6. data/app/assets/javascripts/rails_admin/ra.remote-form.js +1 -4
  7. data/app/controllers/rails_admin/application_controller.rb +5 -5
  8. data/app/controllers/rails_admin/main_controller.rb +2 -2
  9. data/app/helpers/rails_admin/application_helper.rb +2 -2
  10. data/app/helpers/rails_admin/form_builder.rb +9 -2
  11. data/app/helpers/rails_admin/main_helper.rb +1 -1
  12. data/app/views/layouts/rails_admin/application.html.haml +1 -0
  13. data/app/views/rails_admin/main/_delete_notice.html.haml +14 -9
  14. data/app/views/rails_admin/main/index.html.haml +2 -2
  15. data/config/initializers/active_record_extensions.rb +2 -2
  16. data/config/locales/rails_admin.en.yml +1 -0
  17. data/lib/rails_admin/abstract_model.rb +6 -7
  18. data/lib/rails_admin/adapters/active_record.rb +30 -11
  19. data/lib/rails_admin/adapters/mongoid.rb +2 -2
  20. data/lib/rails_admin/adapters/mongoid/association.rb +2 -2
  21. data/lib/rails_admin/adapters/mongoid/extension.rb +1 -1
  22. data/lib/rails_admin/adapters/mongoid/property.rb +1 -1
  23. data/lib/rails_admin/bootstrap-sass.rb +1 -3
  24. data/lib/rails_admin/bootstrap-sass/compass_functions.rb +1 -1
  25. data/lib/rails_admin/config.rb +12 -8
  26. data/lib/rails_admin/config/actions.rb +1 -1
  27. data/lib/rails_admin/config/actions/base.rb +3 -4
  28. data/lib/rails_admin/config/actions/bulk_delete.rb +1 -3
  29. data/lib/rails_admin/config/actions/index.rb +3 -5
  30. data/lib/rails_admin/config/configurable.rb +4 -6
  31. data/lib/rails_admin/config/fields/association.rb +1 -1
  32. data/lib/rails_admin/config/fields/base.rb +15 -26
  33. data/lib/rails_admin/config/fields/factories/carrierwave.rb +1 -1
  34. data/lib/rails_admin/config/fields/types.rb +1 -1
  35. data/lib/rails_admin/config/fields/types/active_record_enum.rb +17 -2
  36. data/lib/rails_admin/config/fields/types/file_upload.rb +1 -1
  37. data/lib/rails_admin/config/fields/types/has_many_association.rb +1 -1
  38. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +1 -1
  39. data/lib/rails_admin/config/fields/types/string.rb +6 -5
  40. data/lib/rails_admin/config/fields/types/text.rb +3 -3
  41. data/lib/rails_admin/config/hideable.rb +1 -1
  42. data/lib/rails_admin/config/inspectable.rb +39 -0
  43. data/lib/rails_admin/config/model.rb +4 -17
  44. data/lib/rails_admin/config/sections/base.rb +4 -17
  45. data/lib/rails_admin/engine.rb +3 -2
  46. data/lib/rails_admin/extension.rb +4 -4
  47. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +10 -2
  48. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +11 -1
  49. data/lib/rails_admin/support/datetime.rb +1 -1
  50. data/lib/rails_admin/version.rb +1 -1
  51. 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
- if Rails.version.to_s >= '5'
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 # rubocop:disable NonNilCheck
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
- if block_given?
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
@@ -10,7 +10,7 @@ module RailsAdmin
10
10
  end
11
11
 
12
12
  # Reader for the association information hash
13
- def association # rubocop:disable TrivialAccessors
13
+ def association
14
14
  @properties
15
15
  end
16
16
 
@@ -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 # rubocop:disable DoubleNegation
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 = (self.association? ? associated_model_config.abstract_model : abstract_model)
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| # rubocop:disable DoubleNegation
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
- [:presence, :numericality, :attachment_presence].include?(v.kind) &&
179
- (v.options[:on] == context || v.options[:on].blank?) &&
180
- (v.options[:if].blank? && v.options[:unless].blank?)
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 # rubocop:disable NonNilCheck
251
- required state.nil? ? proc { false == (instance_eval(&block)) } : false == state
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) && (model).is_a?(CarrierWave::Mount) && model.uploaders.include?(attachment_name = properties.name.to_s.chomp('_file_name').to_sym)
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
@@ -9,7 +9,7 @@ module RailsAdmin
9
9
  @@registry = {}
10
10
 
11
11
  def self.load(type)
12
- @@registry[type.to_sym] || fail("Unsupported field datatype: #{type}")
12
+ @@registry[type.to_sym] || raise("Unsupported field datatype: #{type}")
13
13
  end
14
14
 
15
15
  def self.register(type, klass = nil)
@@ -28,7 +28,12 @@ module RailsAdmin
28
28
  end
29
29
 
30
30
  def parse_value(value)
31
- value.present? ? enum.invert[value.to_i] : nil
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
- ::Rails.version >= '5' ? enum[super] : super
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
@@ -57,7 +57,7 @@ module RailsAdmin
57
57
 
58
58
  # virtual class
59
59
  def resource_url
60
- fail('not implemented')
60
+ raise('not implemented')
61
61
  end
62
62
 
63
63
  def virtual?
@@ -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 # name_ids
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.length > 0
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
- if min_length == 0
31
- text += "#{I18n.translate('admin.form.char_length_up_to').capitalize} #{max_length}."
32
- else
33
- text += "#{I18n.translate('admin.form.char_length_of').capitalize} #{min_length}-#{max_length}."
34
- end
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
- fail("The 'field(:foo){ ckeditor true }' style DSL is deprecated. Please use 'field :foo, :ck_editor' instead.")
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
- fail("The 'field(:foo){ codemirror true }' style DSL is deprecated. Please use 'field :foo, :code_mirror' instead.")
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
- fail("The 'field(:foo){ bootstrap_wysihtml5 true }' style DSL is deprecated. Please use 'field :foo, :wysihtml5' instead.")
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
 
@@ -16,7 +16,7 @@ module RailsAdmin
16
16
 
17
17
  # Writer to hide object.
18
18
  def hide(&block)
19
- visible block ? proc { false == (instance_eval(&block)) } : false
19
+ visible block ? proc { false == instance_eval(&block) } : false
20
20
  end
21
21
 
22
22
  # Writer to show field.
@@ -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
@@ -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.merge!('RailsAdmin::ActionNotAllowed' => :forbidden)
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 pjax hook' do |app|
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