rails_admin 2.0.0.beta → 2.0.0.rc

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.
Files changed (178) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.md +1 -1
  4. data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
  5. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +1 -1
  6. data/app/assets/javascripts/rails_admin/ra.i18n.js +28 -0
  7. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +57 -0
  8. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +31 -0
  9. data/app/assets/javascripts/rails_admin/ra.widgets.js +371 -0
  10. data/app/assets/javascripts/rails_admin/ui.js +135 -0
  11. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +4 -0
  12. data/app/helpers/rails_admin/application_helper.rb +17 -2
  13. data/app/views/layouts/rails_admin/_head.html.haml +7 -0
  14. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +1 -1
  15. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +2 -1
  16. data/app/views/layouts/rails_admin/application.html.haml +3 -8
  17. data/app/views/rails_admin/main/_form_file_upload.html.haml +3 -3
  18. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +6 -4
  19. data/config/locales/rails_admin.en.yml +1 -0
  20. data/lib/generators/rails_admin/templates/initializer.erb +2 -2
  21. data/lib/rails_admin.rb +0 -1
  22. data/lib/rails_admin/abstract_model.rb +1 -1
  23. data/lib/rails_admin/adapters/active_record.rb +12 -3
  24. data/lib/rails_admin/adapters/mongoid.rb +14 -0
  25. data/lib/rails_admin/bootstrap-sass.rb +1 -1
  26. data/lib/rails_admin/config.rb +4 -6
  27. data/lib/rails_admin/config/actions/base.rb +17 -1
  28. data/lib/rails_admin/config/actions/edit.rb +1 -3
  29. data/lib/rails_admin/config/actions/index.rb +1 -1
  30. data/lib/rails_admin/config/actions/new.rb +1 -3
  31. data/lib/rails_admin/config/fields.rb +0 -1
  32. data/lib/rails_admin/config/fields/association.rb +1 -1
  33. data/lib/rails_admin/config/fields/types/action_text.rb +1 -2
  34. data/lib/rails_admin/config/fields/types/all.rb +0 -1
  35. data/lib/rails_admin/config/fields/types/ck_editor.rb +2 -2
  36. data/lib/rails_admin/config/fields/types/code_mirror.rb +2 -2
  37. data/lib/rails_admin/config/fields/types/color.rb +2 -2
  38. data/lib/rails_admin/config/fields/types/file_upload.rb +6 -2
  39. data/lib/rails_admin/config/fields/types/froala.rb +2 -2
  40. data/lib/rails_admin/config/fields/types/hidden.rb +2 -2
  41. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +1 -1
  42. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +15 -3
  43. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +17 -3
  44. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +7 -0
  45. data/lib/rails_admin/config/fields/types/shrine.rb +5 -1
  46. data/lib/rails_admin/config/fields/types/simple_mde.rb +2 -2
  47. data/lib/rails_admin/config/fields/types/string.rb +2 -2
  48. data/lib/rails_admin/config/fields/types/string_like.rb +19 -0
  49. data/lib/rails_admin/config/fields/types/text.rb +2 -2
  50. data/lib/rails_admin/config/fields/types/wysihtml5.rb +2 -2
  51. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +45 -21
  52. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +4 -1
  53. data/lib/rails_admin/version.rb +1 -1
  54. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  55. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  56. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  57. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  58. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  59. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  60. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  61. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  62. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  63. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  64. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  65. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  66. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  67. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  68. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  69. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  70. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  71. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  72. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  73. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  74. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  75. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  76. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  77. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  78. data/{app → vendor}/assets/images/rails_admin/colorpicker/select.png +0 -0
  79. data/{app → vendor}/assets/images/rails_admin/colorpicker/select2.png +0 -0
  80. data/{app → vendor}/assets/images/rails_admin/colorpicker/slider.png +0 -0
  81. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -0
  82. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -0
  83. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -0
  84. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -0
  85. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -0
  86. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -0
  87. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -0
  88. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -0
  89. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -0
  90. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -0
  91. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -0
  92. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -0
  93. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -0
  94. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -0
  95. data/{app → vendor}/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -0
  96. data/{app → vendor}/assets/javascripts/rails_admin/jquery.pjax.js +0 -0
  97. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -0
  98. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -0
  99. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -0
  100. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -0
  101. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -0
  102. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -0
  103. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -0
  104. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -0
  105. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -0
  106. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -0
  107. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -0
  108. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -0
  109. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -0
  110. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -0
  111. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -0
  112. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -0
  113. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -0
  114. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -0
  115. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -0
  116. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -0
  117. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -0
  118. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -0
  119. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -0
  120. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -0
  121. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -0
  122. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -0
  123. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -0
  124. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -0
  125. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -0
  126. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -0
  127. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -0
  128. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -0
  129. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -0
  130. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -0
  131. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -0
  132. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -0
  133. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -0
  134. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -0
  135. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -0
  136. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -0
  137. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -0
  138. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -0
  139. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -0
  140. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -0
  141. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -0
  142. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -0
  143. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -0
  144. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -0
  145. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -0
  146. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -0
  147. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -0
  148. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -0
  149. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -0
  150. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -0
  151. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -0
  152. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -0
  153. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  154. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -0
  155. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -0
  156. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -0
  157. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -0
  158. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -0
  159. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -0
  160. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -0
  161. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -0
  162. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -0
  163. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -0
  164. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -0
  165. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss +0 -0
  166. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  167. data/{app → vendor}/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -0
  168. metadata +130 -153
  169. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  170. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -10
  171. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -55
  172. data/app/assets/javascripts/rails_admin/ra.sidescroll.coffee +0 -19
  173. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -359
  174. data/app/assets/javascripts/rails_admin/ui.coffee +0 -107
  175. data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
  176. data/lib/rails_admin/config/fields/types/refile.rb +0 -27
  177. data/lib/rails_admin/extensions/cancan.rb +0 -3
  178. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
@@ -49,7 +49,7 @@ module RailsAdmin
49
49
  format.json do
50
50
  output = begin
51
51
  if params[:compact]
52
- primary_key_method = @association ? @association.associated_primary_key : @model_config.abstract_model.primary_key
52
+ primary_key_method = @model_config.abstract_model.primary_key
53
53
  label_method = @model_config.object_label_method
54
54
  @objects.collect { |o| {id: o.send(primary_key_method).to_s, label: o.send(label_method).to_s} }
55
55
  else
@@ -36,9 +36,7 @@ module RailsAdmin
36
36
  sanitize_params_for!(request.xhr? ? :modal : :create)
37
37
 
38
38
  @object.set_attributes(params[@abstract_model.param_key])
39
- @authorization_adapter && @authorization_adapter.attributes_for(:create, @abstract_model).each do |name, value|
40
- @object.send("#{name}=", value)
41
- end
39
+ @authorization_adapter && @authorization_adapter.authorize(:create, @abstract_model, @object)
42
40
 
43
41
  if @object.save
44
42
  @auditing_adapter && @auditing_adapter.create_object(@object, @abstract_model, _current_user)
@@ -82,7 +82,6 @@ require 'rails_admin/config/fields/factories/devise'
82
82
  require 'rails_admin/config/fields/factories/paperclip'
83
83
  require 'rails_admin/config/fields/factories/dragonfly'
84
84
  require 'rails_admin/config/fields/factories/carrierwave'
85
- require 'rails_admin/config/fields/factories/refile'
86
85
  require 'rails_admin/config/fields/factories/active_storage'
87
86
  require 'rails_admin/config/fields/factories/shrine'
88
87
  require 'rails_admin/config/fields/factories/action_text'
@@ -78,7 +78,7 @@ module RailsAdmin
78
78
 
79
79
  # Reader for associated primary key
80
80
  def associated_primary_key
81
- @associated_primary_key ||= association.primary_key
81
+ @associated_primary_key ||= associated_model_config.abstract_model.primary_key
82
82
  end
83
83
 
84
84
  # Reader for the association's key
@@ -1,11 +1,10 @@
1
- require 'rails_admin/config/fields/base'
2
1
  require 'rails_admin/config/fields/types/text'
3
2
 
4
3
  module RailsAdmin
5
4
  module Config
6
5
  module Fields
7
6
  module Types
8
- class ActionText < RailsAdmin::Config::Fields::Types::Text
7
+ class ActionText < Text
9
8
  # Register field type for the type loader
10
9
  RailsAdmin::Config::Fields::Types.register(self)
11
10
 
@@ -12,7 +12,6 @@ require 'rails_admin/config/fields/types/enum'
12
12
  require 'rails_admin/config/fields/types/file_upload'
13
13
  require 'rails_admin/config/fields/types/paperclip'
14
14
  require 'rails_admin/config/fields/types/carrierwave'
15
- require 'rails_admin/config/fields/types/refile'
16
15
  require 'rails_admin/config/fields/types/multiple_file_upload'
17
16
  require 'rails_admin/config/fields/types/multiple_active_storage'
18
17
  require 'rails_admin/config/fields/types/multiple_carrierwave'
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/text'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class CKEditor < RailsAdmin::Config::Fields::Types::Text
7
+ class CKEditor < Text
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/text'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class CodeMirror < RailsAdmin::Config::Fields::Types::Text
7
+ class CodeMirror < Text
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/string_like'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class Color < RailsAdmin::Config::Fields::Base
7
+ class Color < StringLike
8
8
  RailsAdmin::Config::Fields::Types.register(self)
9
9
 
10
10
  register_instance_option :pretty_value do
@@ -23,6 +23,10 @@ module RailsAdmin
23
23
  nil
24
24
  end
25
25
 
26
+ register_instance_option :cache_value do
27
+ bindings[:object].public_send(cache_method) if cache_method
28
+ end
29
+
26
30
  register_instance_option :export_value do
27
31
  resource_url.to_s
28
32
  end
@@ -34,9 +38,9 @@ module RailsAdmin
34
38
  if image
35
39
  thumb_url = resource_url(thumb_method)
36
40
  image_html = v.image_tag(thumb_url, class: 'img-thumbnail')
37
- url != thumb_url ? v.link_to(image_html, url, target: '_blank') : image_html
41
+ url != thumb_url ? v.link_to(image_html, url, target: '_blank', rel: 'noopener noreferrer') : image_html
38
42
  else
39
- v.link_to(value, url, target: '_blank')
43
+ v.link_to(value, url, target: '_blank', rel: 'noopener noreferrer')
40
44
  end
41
45
  end
42
46
  end
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/text'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class Froala < RailsAdmin::Config::Fields::Types::Text
7
+ class Froala < Text
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/string_like'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class Hidden < RailsAdmin::Config::Fields::Base
7
+ class Hidden < StringLike
8
8
  RailsAdmin::Config::Fields::Types.register(self)
9
9
 
10
10
  register_instance_option :view_helper do
@@ -12,7 +12,7 @@ module RailsAdmin
12
12
  {resize: '100x100>'}
13
13
  end
14
14
 
15
- register_instance_option :delete_key do
15
+ register_instance_option :delete_value do
16
16
  value.id
17
17
  end
18
18
 
@@ -12,8 +12,12 @@ module RailsAdmin
12
12
  @thumb_method ||= ((versions = value.versions.keys).detect { |k| k.in?([:thumb, :thumbnail, 'thumb', 'thumbnail']) } || versions.first.to_s)
13
13
  end
14
14
 
15
- register_instance_option :delete_key do
16
- value.file.identifier
15
+ register_instance_option :keep_value do
16
+ value.cache_name || value.identifier
17
+ end
18
+
19
+ register_instance_option :delete_value do
20
+ value.file.filename
17
21
  end
18
22
 
19
23
  def resource_url(thumb = false)
@@ -27,7 +31,15 @@ module RailsAdmin
27
31
  end
28
32
 
29
33
  register_instance_option :cache_method do
30
- "#{name}_cache"
34
+ "#{name}_cache" unless ::CarrierWave::VERSION >= '2'
35
+ end
36
+
37
+ register_instance_option :keep_method do
38
+ name if ::CarrierWave::VERSION >= '2'
39
+ end
40
+
41
+ register_instance_option :reorderable? do
42
+ ::CarrierWave::VERSION >= '2'
31
43
  end
32
44
 
33
45
  register_instance_option :delete_method do
@@ -19,10 +19,16 @@ module RailsAdmin
19
19
  nil
20
20
  end
21
21
 
22
- register_instance_option :delete_key do
22
+ register_instance_option :keep_value do
23
23
  nil
24
24
  end
25
25
 
26
+ register_instance_option :delete_value do
27
+ nil
28
+ end
29
+
30
+ register_deprecated_instance_option :delete_key, :delete_value
31
+
26
32
  register_instance_option :pretty_value do
27
33
  if value.presence
28
34
  v = bindings[:view]
@@ -30,9 +36,9 @@ module RailsAdmin
30
36
  if image
31
37
  thumb_url = resource_url(thumb_method)
32
38
  image_html = v.image_tag(thumb_url, class: 'img-thumbnail')
33
- url != thumb_url ? v.link_to(image_html, url, target: '_blank') : image_html
39
+ url != thumb_url ? v.link_to(image_html, url, target: '_blank', rel: 'noopener noreferrer') : image_html
34
40
  else
35
- v.link_to(value, url, target: '_blank')
41
+ v.link_to(value, url, target: '_blank', rel: 'noopener noreferrer')
36
42
  end
37
43
  end
38
44
  end
@@ -67,6 +73,14 @@ module RailsAdmin
67
73
  nil
68
74
  end
69
75
 
76
+ register_instance_option :keep_method do
77
+ nil
78
+ end
79
+
80
+ register_instance_option :reorderable? do
81
+ false
82
+ end
83
+
70
84
  register_instance_option :export_value do
71
85
  attachments.map(&:resource_url).map(&:to_s).join(',')
72
86
  end
@@ -78,6 +78,13 @@ module RailsAdmin
78
78
  def value
79
79
  bindings[:object].send(association.name)
80
80
  end
81
+
82
+ def parse_input(params)
83
+ if (type_value = params[association.foreign_type.to_sym]).present?
84
+ config = associated_model_config.find { |c| type_value == c.abstract_model.model.name }
85
+ params[association.foreign_type.to_sym] = config.abstract_model.base_class.name if config
86
+ end
87
+ end
81
88
  end
82
89
  end
83
90
  end
@@ -29,7 +29,11 @@ module RailsAdmin
29
29
  end
30
30
 
31
31
  register_instance_option :cache_method do
32
- "cached_#{name}_data" if bindings[:object].respond_to?("cached_#{name}_data")
32
+ name
33
+ end
34
+
35
+ register_instance_option :cache_value do
36
+ bindings[:object].public_send("cached_#{name}_data") if bindings[:object].respond_to?("cached_#{name}_data")
33
37
  end
34
38
 
35
39
  def resource_url(thumb = nil)
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/text'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class SimpleMDE < RailsAdmin::Config::Fields::Types::Text
7
+ class SimpleMDE < Text
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/string_like'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class String < RailsAdmin::Config::Fields::Base
7
+ class String < StringLike
8
8
  RailsAdmin::Config::Fields::Types.register(self)
9
9
 
10
10
  def input_size
@@ -0,0 +1,19 @@
1
+ require 'rails_admin/config/fields/base'
2
+
3
+ module RailsAdmin
4
+ module Config
5
+ module Fields
6
+ module Types
7
+ class StringLike < RailsAdmin::Config::Fields::Base
8
+ register_instance_option :treat_empty_as_nil? do
9
+ properties.try(:nullable?)
10
+ end
11
+
12
+ def parse_input(params)
13
+ params[name] = params[name].presence if params.key?(name) && treat_empty_as_nil?
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/string_like'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class Text < RailsAdmin::Config::Fields::Base
7
+ class Text < StringLike
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/text'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class Wysihtml5 < RailsAdmin::Config::Fields::Types::Text
7
+ class Wysihtml5 < Text
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
@@ -2,38 +2,62 @@ module RailsAdmin
2
2
  module Extensions
3
3
  module CanCanCan
4
4
  # This adapter is for the CanCanCan[https://github.com/CanCanCommunity/cancancan] authorization library.
5
- class AuthorizationAdapter < RailsAdmin::Extensions::CanCan::AuthorizationAdapter
5
+ class AuthorizationAdapter
6
+ module ControllerExtension
7
+ def current_ability
8
+ # use _current_user instead of default current_user so it works with
9
+ # whatever current user method is defined with RailsAdmin
10
+ @current_ability ||= @ability.new(_current_user)
11
+ end
12
+ end
13
+
14
+ # See the +authorize_with+ config method for where the initialization happens.
15
+ def initialize(controller, ability = ::Ability)
16
+ @controller = controller
17
+ @controller.instance_variable_set '@ability', ability
18
+ @controller.extend ControllerExtension
19
+ @controller.current_ability.authorize! :access, :rails_admin
20
+ end
21
+
22
+ # This method is called in every controller action and should raise an exception
23
+ # when the authorization fails. The first argument is the name of the controller
24
+ # action as a symbol (:create, :bulk_delete, etc.). The second argument is the
25
+ # AbstractModel instance that applies. The third argument is the actual model
26
+ # instance if it is available.
6
27
  def authorize(action, abstract_model = nil, model_object = nil)
7
28
  return unless action
8
- subject = model_object || abstract_model && abstract_model.model
9
- if authorized_for_dashboard_in_legacy_way?(action)
10
- subject
11
- else
12
- @controller.current_ability.authorize!(*resolve_with_compatibility(action, subject))
13
- end
29
+ action, subject = resolve_action_and_subject(action, abstract_model, model_object)
30
+ @controller.current_ability.authorize!(action, subject)
14
31
  end
15
32
 
33
+ # This method is called primarily from the view to determine whether the given user
34
+ # has access to perform the action on a given model. It should return true when authorized.
35
+ # This takes the same arguments as +authorize+. The difference is that this will
36
+ # return a boolean whereas +authorize+ will raise an exception when not authorized.
16
37
  def authorized?(action, abstract_model = nil, model_object = nil)
17
38
  return unless action
18
- subject = model_object || abstract_model && abstract_model.model
19
- authorized_for_dashboard_in_legacy_way?(action, true) ||
20
- @controller.current_ability.can?(*resolve_with_compatibility(action, subject))
39
+ action, subject = resolve_action_and_subject(action, abstract_model, model_object)
40
+ @controller.current_ability.can?(action, subject)
21
41
  end
22
42
 
23
- private
43
+ # This is called when needing to scope a database query. It is called within the list
44
+ # and bulk_delete/destroy actions and should return a scope which limits the records
45
+ # to those which the user can perform the given action on.
46
+ def query(action, abstract_model)
47
+ abstract_model.model.accessible_by(@controller.current_ability, action)
48
+ end
24
49
 
25
- def authorized_for_dashboard_in_legacy_way?(action, silent = false)
26
- return false unless action == :dashboard
27
- legacy_ability = @controller.current_ability.permissions[:can][:dashboard]
28
- if legacy_ability && (legacy_ability.empty? || legacy_ability.all?(&:empty?))
29
- ActiveSupport::Deprecation.warn('RailsAdmin CanCanCan Ability with `can :dashboard` is old and support will be removed in the next major release, use `can :read, :dashboard` instead. See https://github.com/sferik/rails_admin/issues/2901') unless silent
30
- true
31
- else
32
- false
33
- end
50
+ # This is called in the new/create actions to determine the initial attributes for new
51
+ # records. It should return a hash of attributes which match what the user
52
+ # is authorized to create.
53
+ def attributes_for(action, abstract_model)
54
+ @controller.current_ability.attributes_for(action, abstract_model && abstract_model.model)
34
55
  end
35
56
 
36
- def resolve_with_compatibility(action, subject)
57
+ private
58
+
59
+ def resolve_action_and_subject(action, abstract_model, model_object)
60
+ subject = model_object || abstract_model && abstract_model.model
37
61
  if subject
38
62
  [action, subject]
39
63
  else
@@ -119,7 +119,10 @@ module RailsAdmin
119
119
  versions = versions.order(sort_reverse == 'true' ? "#{sort} DESC" : sort)
120
120
  versions = all ? versions : versions.send(Kaminari.config.page_method_name, current_page).per(per_page)
121
121
  paginated_proxies = Kaminari.paginate_array([], total_count: versions.try(:total_count) || versions.count)
122
- paginated_proxies = paginated_proxies.send(Kaminari.config.page_method_name, current_page).per(per_page)
122
+ paginated_proxies = paginated_proxies.send(
123
+ paginated_proxies.respond_to?(Kaminari.config.page_method_name) ? Kaminari.config.page_method_name : :page,
124
+ current_page,
125
+ ).per(per_page)
123
126
  versions.each do |version|
124
127
  paginated_proxies << VersionProxy.new(version, @user_class)
125
128
  end
@@ -3,7 +3,7 @@ module RailsAdmin
3
3
  MAJOR = 2
4
4
  MINOR = 0
5
5
  PATCH = 0
6
- PRE = 'beta'.freeze
6
+ PRE = 'rc'.freeze
7
7
 
8
8
  class << self
9
9
  # @return [String]