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.

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