rails_admin 1.4.3 → 2.0.0.beta

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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -1
  3. data/README.md +2 -4
  4. data/app/assets/javascripts/rails_admin/jquery.pjax.js +1 -3
  5. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +9 -7
  6. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +1 -4
  7. data/app/assets/javascripts/rails_admin/ra.sidescroll.coffee +19 -0
  8. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +35 -35
  9. data/app/assets/javascripts/rails_admin/rails_admin.js +1 -0
  10. data/app/assets/javascripts/rails_admin/ui.coffee +23 -18
  11. data/app/assets/stylesheets/rails_admin/ra.sidescroll.scss +29 -0
  12. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +2 -1
  13. data/app/helpers/rails_admin/application_helper.rb +1 -1
  14. data/app/helpers/rails_admin/main_helper.rb +4 -4
  15. data/app/views/layouts/rails_admin/application.html.haml +0 -3
  16. data/app/views/layouts/rails_admin/pjax.html.haml +1 -5
  17. data/app/views/rails_admin/main/_form_action_text.html.haml +7 -0
  18. data/app/views/rails_admin/main/_form_file_upload.html.haml +1 -1
  19. data/app/views/rails_admin/main/_form_filtering_select.html.haml +1 -1
  20. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +1 -1
  21. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +18 -3
  22. data/app/views/rails_admin/main/dashboard.html.haml +1 -2
  23. data/app/views/rails_admin/main/export.html.haml +2 -2
  24. data/app/views/rails_admin/main/index.html.haml +18 -14
  25. data/app/views/rails_admin/main/show.html.haml +6 -7
  26. data/config/locales/rails_admin.en.yml +1 -1
  27. data/lib/rails_admin/adapters/active_record.rb +10 -6
  28. data/lib/rails_admin/adapters/active_record/property.rb +1 -5
  29. data/lib/rails_admin/adapters/mongoid.rb +16 -13
  30. data/lib/rails_admin/bootstrap-sass.rb +4 -2
  31. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +1 -3
  32. data/lib/rails_admin/config.rb +4 -0
  33. data/lib/rails_admin/config/actions/index.rb +3 -3
  34. data/lib/rails_admin/config/configurable.rb +5 -3
  35. data/lib/rails_admin/config/fields.rb +2 -0
  36. data/lib/rails_admin/config/fields/base.rb +1 -1
  37. data/lib/rails_admin/config/fields/factories/action_text.rb +12 -0
  38. data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
  39. data/lib/rails_admin/config/fields/factories/shrine.rb +27 -0
  40. data/lib/rails_admin/config/fields/types/action_text.rb +31 -0
  41. data/lib/rails_admin/config/fields/types/active_record_enum.rb +3 -19
  42. data/lib/rails_admin/config/fields/types/active_storage.rb +1 -0
  43. data/lib/rails_admin/config/fields/types/all.rb +2 -0
  44. data/lib/rails_admin/config/fields/types/ck_editor.rb +5 -5
  45. data/lib/rails_admin/config/fields/types/code_mirror.rb +8 -10
  46. data/lib/rails_admin/config/fields/types/froala.rb +7 -9
  47. data/lib/rails_admin/config/fields/types/shrine.rb +48 -0
  48. data/lib/rails_admin/config/fields/types/simple_mde.rb +6 -3
  49. data/lib/rails_admin/config/fields/types/text.rb +0 -18
  50. data/lib/rails_admin/config/fields/types/wysihtml5.rb +12 -8
  51. data/lib/rails_admin/config/model.rb +3 -2
  52. data/lib/rails_admin/config/proxyable.rb +13 -1
  53. data/lib/rails_admin/config/proxyable/proxy.rb +3 -5
  54. data/lib/rails_admin/config/sections/list.rb +23 -0
  55. data/lib/rails_admin/engine.rb +1 -2
  56. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +16 -4
  57. data/lib/rails_admin/version.rb +4 -4
  58. data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
  59. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
  60. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +2671 -0
  61. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
  62. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
  63. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
  64. data/vendor/assets/stylesheets/rails_admin/font-awesome.css.erb +2342 -0
  65. metadata +47 -32
@@ -0,0 +1,27 @@
1
+ require 'rails_admin/config/fields'
2
+ require 'rails_admin/config/fields/types'
3
+ require 'rails_admin/config/fields/types/file_upload'
4
+
5
+ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
6
+ next false unless defined?(::Shrine)
7
+
8
+ attachment_names = parent.abstract_model.model.ancestors.select { |m| m.is_a?(Shrine::Attachment) }.map { |a| a.instance_variable_get("@name") }
9
+ next false if attachment_names.blank?
10
+
11
+ attachment_name = attachment_names.detect { |a| a == properties.name.to_s.chomp('_data').to_sym }
12
+ next false unless attachment_name
13
+
14
+ field = RailsAdmin::Config::Fields::Types.load(:shrine).new(parent, attachment_name, properties)
15
+ fields << field
16
+
17
+ data_field_name = "#{attachment_name}_data".to_sym
18
+ child_properties = parent.abstract_model.properties.detect { |p| p.name == data_field_name }
19
+ next true unless child_properties
20
+
21
+ children_field = fields.detect { |f| f.name == data_field_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_properties, fields)
22
+ children_field.hide unless field == children_field
23
+ children_field.filterable(false) unless field == children_field
24
+
25
+ field.children_fields([data_field_name])
26
+ true
27
+ end
@@ -0,0 +1,31 @@
1
+ require 'rails_admin/config/fields/base'
2
+ require 'rails_admin/config/fields/types/text'
3
+
4
+ module RailsAdmin
5
+ module Config
6
+ module Fields
7
+ module Types
8
+ class ActionText < RailsAdmin::Config::Fields::Types::Text
9
+ # Register field type for the type loader
10
+ RailsAdmin::Config::Fields::Types.register(self)
11
+
12
+ register_instance_option :version do
13
+ '1.1.1'
14
+ end
15
+
16
+ register_instance_option :css_location do
17
+ "https://cdnjs.cloudflare.com/ajax/libs/trix/#{version}/trix.css"
18
+ end
19
+
20
+ register_instance_option :js_location do
21
+ "https://cdnjs.cloudflare.com/ajax/libs/trix/#{version}/trix.js"
22
+ end
23
+
24
+ register_instance_option :partial do
25
+ :form_action_text
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -29,15 +29,7 @@ module RailsAdmin
29
29
 
30
30
  def parse_value(value)
31
31
  return unless value.present?
32
- if ::Rails.version >= '5'
33
- abstract_model.model.attribute_types[name.to_s].serialize(value)
34
- else
35
- # Depending on the colum type and AR version, we might get a
36
- # string or an integer, so we need to handle both cases.
37
- enum.fetch(value) do
38
- type_cast_value(value)
39
- end
40
- end
32
+ abstract_model.model.attribute_types[name.to_s].serialize(value)
41
33
  end
42
34
 
43
35
  def parse_input(params)
@@ -53,19 +45,11 @@ module RailsAdmin
53
45
  private
54
46
 
55
47
  def parse_input_value(value)
56
- if ::Rails.version >= '5'
57
- abstract_model.model.attribute_types[name.to_s].deserialize(value)
58
- else
59
- enum.invert[type_cast_value(value)]
60
- end
48
+ abstract_model.model.attribute_types[name.to_s].deserialize(value)
61
49
  end
62
50
 
63
51
  def type_cast_value(value)
64
- if ::Rails.version >= '4.2'
65
- abstract_model.model.column_types[name.to_s].type_cast_from_user(value)
66
- else
67
- abstract_model.model.column_types[name.to_s].type_cast(value)
68
- end
52
+ abstract_model.model.column_types[name.to_s].type_cast_from_user(value)
69
53
  end
70
54
  end
71
55
  end
@@ -24,6 +24,7 @@ module RailsAdmin
24
24
  def resource_url(thumb = false)
25
25
  return nil unless value
26
26
  if thumb && value.variable?
27
+ thumb = thumb_method if thumb == true
27
28
  variant = value.variant(thumb)
28
29
  Rails.application.routes.url_helpers.rails_blob_representation_path(
29
30
  variant.blob.signed_id, variant.variation.key, variant.blob.filename, only_path: true
@@ -1,3 +1,4 @@
1
+ require 'rails_admin/config/fields/types/action_text'
1
2
  require 'rails_admin/config/fields/types/active_record_enum'
2
3
  require 'rails_admin/config/fields/types/active_storage'
3
4
  require 'rails_admin/config/fields/types/belongs_to_association'
@@ -26,6 +27,7 @@ require 'rails_admin/config/fields/types/string'
26
27
  require 'rails_admin/config/fields/types/hidden'
27
28
  require 'rails_admin/config/fields/types/text'
28
29
  require 'rails_admin/config/fields/types/serialized'
30
+ require 'rails_admin/config/fields/types/shrine'
29
31
  require 'rails_admin/config/fields/types/time'
30
32
  require 'rails_admin/config/fields/types/timestamp'
31
33
  require 'rails_admin/config/fields/types/color'
@@ -8,6 +8,10 @@ module RailsAdmin
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
11
+ register_instance_option :version do
12
+ '4.11.4'
13
+ end
14
+
11
15
  # If you want to have a different toolbar configuration for CKEditor
12
16
  # create your own custom config.js and override this configuration
13
17
  register_instance_option :config_js do
@@ -21,16 +25,12 @@ module RailsAdmin
21
25
 
22
26
  # Use this if you want to point to a cloud instances of the base CKeditor
23
27
  register_instance_option :base_location do
24
- "#{Rails.application.config.assets.prefix}/ckeditor/"
28
+ "https://cdnjs.cloudflare.com/ajax/libs/ckeditor/#{version}/"
25
29
  end
26
30
 
27
31
  register_instance_option :partial do
28
32
  :form_ck_editor
29
33
  end
30
-
31
- [:base_location, :config_js, :location].each do |key|
32
- register_deprecated_instance_option :"ckeditor_#{key}", key
33
- end
34
34
  end
35
35
  end
36
36
  end
@@ -16,31 +16,29 @@ module RailsAdmin
16
16
  }
17
17
  end
18
18
 
19
+ register_instance_option :version do
20
+ '5.46.0'
21
+ end
22
+
19
23
  # Pass the location of the theme and mode for Codemirror
20
24
  register_instance_option :assets do
21
25
  {
22
- mode: ::ActionController::Base.helpers.asset_path('codemirror/modes/css.js'),
23
- theme: ::ActionController::Base.helpers.asset_path('codemirror/themes/night.css'),
26
+ mode: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/#{version}/mode/css/css.min.js",
27
+ theme: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/#{version}/theme/night.min.css",
24
28
  }
25
29
  end
26
30
 
27
- # Use this if you want to point to a cloud instances of CodeMirror
28
31
  register_instance_option :js_location do
29
- ::ActionController::Base.helpers.asset_path('codemirror.js')
32
+ "https://cdnjs.cloudflare.com/ajax/libs/codemirror/#{version}/codemirror.min.js"
30
33
  end
31
34
 
32
- # Use this if you want to point to a cloud instances of CodeMirror
33
35
  register_instance_option :css_location do
34
- ::ActionController::Base.helpers.asset_path('codemirror.css')
36
+ "https://cdnjs.cloudflare.com/ajax/libs/codemirror/#{version}/codemirror.min.css"
35
37
  end
36
38
 
37
39
  register_instance_option :partial do
38
40
  :form_code_mirror
39
41
  end
40
-
41
- [:assets, :config, :css_location, :js_location].each do |key|
42
- register_deprecated_instance_option :"codemirror_#{key}", key
43
- end
44
42
  end
45
43
  end
46
44
  end
@@ -8,28 +8,26 @@ module RailsAdmin
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
11
- # If you want to have a different toolbar configuration for wysihtml5
12
- # you can use a Ruby hash to configure these options:
13
- # https://github.com/jhollingworth/bootstrap-wysihtml5/#advanced
11
+ # See https://www.froala.com/wysiwyg-editor/docs/options
14
12
  register_instance_option :config_options do
15
13
  nil
16
14
  end
17
15
 
16
+ register_instance_option :version do
17
+ '2.9.5'
18
+ end
19
+
18
20
  register_instance_option :css_location do
19
- ActionController::Base.helpers.asset_path('froala_editor.min.css')
21
+ "https://cdnjs.cloudflare.com/ajax/libs/froala-editor/#{version}/css/froala_editor.min.css"
20
22
  end
21
23
 
22
24
  register_instance_option :js_location do
23
- ActionController::Base.helpers.asset_path('froala_editor.min.js')
25
+ "https://cdnjs.cloudflare.com/ajax/libs/froala-editor/#{version}/js/froala_editor.min.js"
24
26
  end
25
27
 
26
28
  register_instance_option :partial do
27
29
  :form_froala
28
30
  end
29
-
30
- [:config_options, :css_location, :js_location].each do |key|
31
- register_deprecated_instance_option :"froala_#{key}", key
32
- end
33
31
  end
34
32
  end
35
33
  end
@@ -0,0 +1,48 @@
1
+ require 'rails_admin/config/fields/types/file_upload'
2
+
3
+ module RailsAdmin
4
+ module Config
5
+ module Fields
6
+ module Types
7
+ class Shrine < RailsAdmin::Config::Fields::Types::FileUpload
8
+ RailsAdmin::Config::Fields::Types.register(self)
9
+
10
+ register_instance_option :thumb_method do
11
+ unless defined? @thumb_method
12
+ @thumb_method = begin
13
+ next nil unless value.is_a?(Hash)
14
+
15
+ if value.key?(:thumb)
16
+ :thumb
17
+ elsif value.key?(:thumbnail)
18
+ :thumbnail
19
+ else
20
+ value.keys.first
21
+ end
22
+ end
23
+ end
24
+ @thumb_method
25
+ end
26
+
27
+ register_instance_option :delete_method do
28
+ "remove_#{name}" if bindings[:object].respond_to?("remove_#{name}")
29
+ end
30
+
31
+ register_instance_option :cache_method do
32
+ "cached_#{name}_data" if bindings[:object].respond_to?("cached_#{name}_data")
33
+ end
34
+
35
+ def resource_url(thumb = nil)
36
+ return nil unless value
37
+
38
+ if value.is_a?(Hash)
39
+ value[thumb || value.keys.first].url
40
+ else
41
+ value.url
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -14,13 +14,16 @@ module RailsAdmin
14
14
  nil
15
15
  end
16
16
 
17
- # Use this if you want to point to a cloud instance of the base SimpleMDE
17
+ register_instance_option :version do
18
+ '1.11.2'
19
+ end
20
+
18
21
  register_instance_option :js_location do
19
- "#{Rails.application.config.assets.prefix}/simplemde.min.js"
22
+ "https://cdnjs.cloudflare.com/ajax/libs/simplemde/#{version}/simplemde.min.js"
20
23
  end
21
24
 
22
25
  register_instance_option :css_location do
23
- "#{Rails.application.config.assets.prefix}/simplemde.min.css"
26
+ "https://cdnjs.cloudflare.com/ajax/libs/simplemde/#{version}/simplemde.min.css"
24
27
  end
25
28
 
26
29
  register_instance_option :partial do
@@ -8,24 +8,6 @@ module RailsAdmin
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
11
- [:ckeditor, :ckeditor_base_location, :ckeditor_config_js, :ckeditor_location].each do |key|
12
- register_deprecated_instance_option key do
13
- raise("The 'field(:foo){ ckeditor true }' style DSL is deprecated. Please use 'field :foo, :ck_editor' instead.")
14
- end
15
- end
16
-
17
- [:codemirror, :codemirror_assets, :codemirror_config, :codemirror_css_location, :codemirror_js_location].each do |key|
18
- register_deprecated_instance_option key do
19
- raise("The 'field(:foo){ codemirror true }' style DSL is deprecated. Please use 'field :foo, :code_mirror' instead.")
20
- end
21
- end
22
-
23
- [:bootstrap_wysihtml5, :bootstrap_wysihtml5_config_options, :bootstrap_wysihtml5_css_location, :bootstrap_wysihtml5_js_location].each do |key|
24
- register_deprecated_instance_option key do
25
- raise("The 'field(:foo){ bootstrap_wysihtml5 true }' style DSL is deprecated. Please use 'field :foo, :wysihtml5' instead.")
26
- end
27
- end
28
-
29
11
  register_instance_option :html_attributes do
30
12
  {
31
13
  required: required?,
@@ -10,26 +10,30 @@ module RailsAdmin
10
10
 
11
11
  # If you want to have a different toolbar configuration for wysihtml5
12
12
  # you can use a Ruby hash to configure these options:
13
- # https://github.com/jhollingworth/bootstrap-wysihtml5/#advanced
13
+ # https://github.com/bootstrap-wysiwyg/bootstrap3-wysiwyg
14
14
  register_instance_option :config_options do
15
- nil
15
+ {
16
+ toolbar: {
17
+ fa: true,
18
+ },
19
+ }
20
+ end
21
+
22
+ register_instance_option :version do
23
+ '0.3.3'
16
24
  end
17
25
 
18
26
  register_instance_option :css_location do
19
- ActionController::Base.helpers.asset_path('bootstrap-wysihtml5/index.css')
27
+ "https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-wysiwyg/#{version}/bootstrap3-wysihtml5.min.css"
20
28
  end
21
29
 
22
30
  register_instance_option :js_location do
23
- ActionController::Base.helpers.asset_path('bootstrap-wysihtml5/index.js')
31
+ "https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-wysiwyg/#{version}/bootstrap3-wysihtml5.all.min.js"
24
32
  end
25
33
 
26
34
  register_instance_option :partial do
27
35
  :form_wysihtml5
28
36
  end
29
-
30
- [:config_options, :css_location, :js_location].each do |key|
31
- register_deprecated_instance_option :"bootstrap_wysihtml5_#{key}", key
32
- end
33
37
  end
34
38
  end
35
39
  end
@@ -44,7 +44,8 @@ module RailsAdmin
44
44
  end
45
45
 
46
46
  def excluded?
47
- @excluded ||= !RailsAdmin::AbstractModel.all.collect(&:model_name).include?(abstract_model.try(:model_name))
47
+ return @excluded if defined?(@excluded)
48
+ @excluded = !RailsAdmin::AbstractModel.all.collect(&:model_name).include?(abstract_model.try(:model_name))
48
49
  end
49
50
 
50
51
  def object_label
@@ -87,7 +88,7 @@ module RailsAdmin
87
88
 
88
89
  register_instance_option :navigation_label do
89
90
  @navigation_label ||= begin
90
- if (parent_module = abstract_model.model.parent) != Object
91
+ if (parent_module = abstract_model.model.try(:module_parent) || abstract_model.model.try!(:parent)) != Object
91
92
  parent_module.to_s
92
93
  end
93
94
  end
@@ -2,7 +2,19 @@ require 'rails_admin/config/proxyable/proxy'
2
2
  module RailsAdmin
3
3
  module Config
4
4
  module Proxyable
5
- attr_accessor :bindings
5
+ def bindings
6
+ Thread.current[:rails_admin_bindings] ||= {}
7
+ Thread.current[:rails_admin_bindings][self]
8
+ end
9
+
10
+ def bindings=(new_bindings)
11
+ Thread.current[:rails_admin_bindings] ||= {}
12
+ if new_bindings.nil?
13
+ Thread.current[:rails_admin_bindings].delete(self)
14
+ else
15
+ Thread.current[:rails_admin_bindings][self] = new_bindings
16
+ end
17
+ end
6
18
 
7
19
  def with(bindings = {})
8
20
  RailsAdmin::Config::Proxyable::Proxy.new(self, bindings)
@@ -2,8 +2,6 @@ module RailsAdmin
2
2
  module Config
3
3
  module Proxyable
4
4
  class Proxy < BasicObject
5
- attr_reader :bindings
6
-
7
5
  def initialize(object, bindings = {})
8
6
  @object = object
9
7
  @bindings = bindings
@@ -21,12 +19,12 @@ module RailsAdmin
21
19
 
22
20
  def method_missing(name, *args, &block)
23
21
  if @object.respond_to?(name)
24
- reset = @object.instance_variable_get('@bindings')
22
+ reset = @object.bindings
25
23
  begin
26
- @object.instance_variable_set('@bindings', @bindings)
24
+ @object.bindings = @bindings
27
25
  response = @object.__send__(name, *args, &block)
28
26
  ensure
29
- @object.instance_variable_set('@bindings', reset)
27
+ @object.bindings = reset
30
28
  end
31
29
  response
32
30
  else
@@ -24,6 +24,10 @@ module RailsAdmin
24
24
  false
25
25
  end
26
26
 
27
+ register_instance_option :search_by do
28
+ nil
29
+ end
30
+
27
31
  register_instance_option :sort_by do
28
32
  parent.abstract_model.primary_key
29
33
  end
@@ -39,6 +43,25 @@ module RailsAdmin
39
43
  register_instance_option :row_css_class do
40
44
  ''
41
45
  end
46
+
47
+ register_instance_option :sidescroll do
48
+ nil
49
+ end
50
+
51
+ def sidescroll_frozen_columns
52
+ global_config = RailsAdmin::Config.sidescroll
53
+ model_config = sidescroll
54
+ enabled = model_config.nil? ? global_config : model_config
55
+ if enabled
56
+ num_frozen = model_config[:num_frozen_columns] if model_config.is_a?(Hash)
57
+ unless num_frozen
58
+ num_frozen = global_config[:num_frozen_columns] if global_config.is_a?(Hash)
59
+ num_frozen ||= 3 # by default, freeze checkboxes, links & first property (usually primary key / id?)
60
+ num_frozen -= 1 unless checkboxes? # model config should be explicit about this, only adjust if using global config
61
+ end
62
+ num_frozen
63
+ end
64
+ end
42
65
  end
43
66
  end
44
67
  end