rails_admin 1.4.3 → 2.0.0.beta

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 (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