rails_admin 1.4.3 → 2.0.2

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 (222) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +12 -4
  3. data/README.md +4 -7
  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.filtering-select.js +9 -7
  7. data/app/assets/javascripts/rails_admin/ra.i18n.js +28 -0
  8. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +59 -0
  9. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +31 -0
  10. data/app/assets/javascripts/rails_admin/ra.widgets.js +379 -0
  11. data/app/assets/javascripts/rails_admin/rails_admin.js +1 -0
  12. data/app/assets/javascripts/rails_admin/ui.js +135 -0
  13. data/app/assets/stylesheets/rails_admin/ra.sidescroll.scss +29 -0
  14. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +4 -0
  15. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +2 -1
  16. data/app/controllers/rails_admin/application_controller.rb +2 -0
  17. data/app/helpers/rails_admin/application_helper.rb +19 -4
  18. data/app/helpers/rails_admin/main_helper.rb +4 -4
  19. data/app/views/layouts/rails_admin/_head.html.haml +7 -0
  20. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +1 -1
  21. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +2 -1
  22. data/app/views/layouts/rails_admin/application.html.haml +3 -11
  23. data/app/views/layouts/rails_admin/pjax.html.haml +1 -5
  24. data/app/views/rails_admin/main/_form_action_text.html.haml +7 -0
  25. data/app/views/rails_admin/main/_form_file_upload.html.haml +4 -4
  26. data/app/views/rails_admin/main/_form_filtering_select.html.haml +1 -1
  27. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +7 -5
  28. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +18 -3
  29. data/app/views/rails_admin/main/dashboard.html.haml +1 -2
  30. data/app/views/rails_admin/main/export.html.haml +2 -2
  31. data/app/views/rails_admin/main/index.html.haml +19 -15
  32. data/app/views/rails_admin/main/show.html.haml +6 -7
  33. data/config/locales/rails_admin.en.yml +3 -0
  34. data/lib/generators/rails_admin/templates/initializer.erb +2 -2
  35. data/lib/rails_admin/abstract_model.rb +3 -3
  36. data/lib/rails_admin/adapters/active_record/abstract_object.rb +2 -2
  37. data/lib/rails_admin/adapters/active_record/property.rb +1 -5
  38. data/lib/rails_admin/adapters/active_record.rb +23 -10
  39. data/lib/rails_admin/adapters/mongoid/association.rb +1 -1
  40. data/lib/rails_admin/adapters/mongoid.rb +30 -13
  41. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +1 -3
  42. data/lib/rails_admin/bootstrap-sass.rb +7 -3
  43. data/lib/rails_admin/config/actions/base.rb +17 -1
  44. data/lib/rails_admin/config/actions/edit.rb +1 -3
  45. data/lib/rails_admin/config/actions/index.rb +3 -3
  46. data/lib/rails_admin/config/actions/new.rb +1 -3
  47. data/lib/rails_admin/config/configurable.rb +6 -4
  48. data/lib/rails_admin/config/fields/association.rb +1 -1
  49. data/lib/rails_admin/config/fields/base.rb +2 -2
  50. data/lib/rails_admin/config/fields/factories/action_text.rb +12 -0
  51. data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
  52. data/lib/rails_admin/config/fields/factories/shrine.rb +27 -0
  53. data/lib/rails_admin/config/fields/types/action_text.rb +30 -0
  54. data/lib/rails_admin/config/fields/types/active_record_enum.rb +3 -19
  55. data/lib/rails_admin/config/fields/types/active_storage.rb +1 -0
  56. data/lib/rails_admin/config/fields/types/all.rb +2 -1
  57. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +4 -0
  58. data/lib/rails_admin/config/fields/types/ck_editor.rb +7 -7
  59. data/lib/rails_admin/config/fields/types/code_mirror.rb +10 -12
  60. data/lib/rails_admin/config/fields/types/color.rb +2 -2
  61. data/lib/rails_admin/config/fields/types/file_upload.rb +6 -2
  62. data/lib/rails_admin/config/fields/types/froala.rb +9 -11
  63. data/lib/rails_admin/config/fields/types/hidden.rb +2 -2
  64. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +1 -1
  65. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +15 -3
  66. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +17 -3
  67. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +7 -0
  68. data/lib/rails_admin/config/fields/types/shrine.rb +52 -0
  69. data/lib/rails_admin/config/fields/types/simple_mde.rb +8 -5
  70. data/lib/rails_admin/config/fields/types/string.rb +2 -2
  71. data/lib/rails_admin/config/fields/types/string_like.rb +19 -0
  72. data/lib/rails_admin/config/fields/types/text.rb +2 -20
  73. data/lib/rails_admin/config/fields/types/wysihtml5.rb +14 -10
  74. data/lib/rails_admin/config/fields.rb +2 -1
  75. data/lib/rails_admin/config/has_groups.rb +1 -1
  76. data/lib/rails_admin/config/lazy_model.rb +4 -4
  77. data/lib/rails_admin/config/model.rb +5 -4
  78. data/lib/rails_admin/config/proxyable/proxy.rb +7 -9
  79. data/lib/rails_admin/config/proxyable.rb +13 -1
  80. data/lib/rails_admin/config/sections/list.rb +23 -0
  81. data/lib/rails_admin/config.rb +9 -7
  82. data/lib/rails_admin/engine.rb +1 -2
  83. data/lib/rails_admin/extension.rb +16 -4
  84. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +45 -21
  85. data/lib/rails_admin/extensions/controller_extension.rb +6 -0
  86. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +27 -10
  87. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +1 -3
  88. data/lib/rails_admin/support/csv_converter.rb +1 -1
  89. data/lib/rails_admin/version.rb +3 -3
  90. data/lib/rails_admin.rb +0 -1
  91. data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
  92. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
  93. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +2671 -0
  94. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
  95. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
  96. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
  97. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  98. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  99. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  100. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  101. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  102. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  103. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  104. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  105. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  106. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  107. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  108. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  109. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  110. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  111. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  112. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  113. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  114. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  115. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  116. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  117. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  118. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  119. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  120. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  121. data/{app → vendor}/assets/images/rails_admin/colorpicker/select.png +0 -0
  122. data/{app → vendor}/assets/images/rails_admin/colorpicker/select2.png +0 -0
  123. data/{app → vendor}/assets/images/rails_admin/colorpicker/slider.png +0 -0
  124. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -0
  125. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -0
  126. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -0
  127. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -0
  128. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -0
  129. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -0
  130. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -0
  131. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -0
  132. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -0
  133. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -0
  134. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -0
  135. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -0
  136. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -0
  137. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -0
  138. data/{app → vendor}/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -0
  139. data/{app → vendor}/assets/javascripts/rails_admin/jquery.pjax.js +1 -3
  140. data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +9451 -3263
  141. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -0
  142. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -0
  143. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -0
  144. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -0
  145. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -0
  146. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -0
  147. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -0
  148. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -0
  149. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -0
  150. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -0
  151. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -0
  152. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -0
  153. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -0
  154. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -0
  155. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -0
  156. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -0
  157. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -0
  158. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -0
  159. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -0
  160. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -0
  161. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -0
  162. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -0
  163. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -0
  164. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -0
  165. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -0
  166. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -0
  167. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -0
  168. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -0
  169. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -0
  170. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -0
  171. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -0
  172. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -0
  173. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -0
  174. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -0
  175. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -0
  176. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -0
  177. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -0
  178. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -0
  179. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -0
  180. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -0
  181. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -0
  182. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -0
  183. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -0
  184. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -0
  185. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -0
  186. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -0
  187. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -0
  188. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -0
  189. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -0
  190. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -0
  191. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -0
  192. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -0
  193. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -0
  194. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -0
  195. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -0
  196. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -0
  197. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  198. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -0
  199. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -0
  200. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -0
  201. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -0
  202. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -0
  203. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -0
  204. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -0
  205. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -0
  206. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -0
  207. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -0
  208. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -0
  209. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss +0 -0
  210. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  211. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +2342 -0
  212. data/{app → vendor}/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -0
  213. metadata +163 -170
  214. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  215. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -10
  216. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -58
  217. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -359
  218. data/app/assets/javascripts/rails_admin/ui.coffee +0 -102
  219. data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
  220. data/lib/rails_admin/config/fields/types/refile.rb +0 -27
  221. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
  222. data/lib/rails_admin/extensions/cancan.rb +0 -3
@@ -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
@@ -0,0 +1,6 @@
1
+ module RailsAdmin
2
+ module Extensions
3
+ module ControllerExtension
4
+ end
5
+ end
6
+ end
@@ -23,7 +23,7 @@ module RailsAdmin
23
23
  end
24
24
 
25
25
  def username
26
- @user_class.find(@version.whodunnit).try(:email) rescue nil || @version.whodunnit
26
+ (@user_class.find(@version.whodunnit).try(:email) rescue nil) || @version.whodunnit
27
27
  end
28
28
 
29
29
  def item
@@ -31,6 +31,12 @@ module RailsAdmin
31
31
  end
32
32
  end
33
33
 
34
+ module ControllerExtension
35
+ def user_for_paper_trail
36
+ _current_user.try(:id) || _current_user
37
+ end
38
+ end
39
+
34
40
  class AuditingAdapter
35
41
  COLUMN_MAPPING = {
36
42
  table: :item_type,
@@ -52,11 +58,7 @@ module RailsAdmin
52
58
 
53
59
  def self.setup
54
60
  raise('PaperTrail not found') unless defined?(::PaperTrail)
55
- RailsAdmin::ApplicationController.class_eval do
56
- def user_for_paper_trail
57
- _current_user.try(:id) || _current_user
58
- end
59
- end
61
+ RailsAdmin::Extensions::ControllerExtension.send(:include, ControllerExtension)
60
62
  end
61
63
 
62
64
  def initialize(controller, user_class = 'User', version_class = '::Version')
@@ -112,22 +114,37 @@ module RailsAdmin
112
114
  sort_reverse = 'true'
113
115
  end
114
116
 
115
- ar_model = model.model
116
117
  current_page = page.presence || '1'
117
118
 
118
- versions = version_class_for(ar_model).where item_type: ar_model.name
119
- versions = versions.where item_id: object.id if object
119
+ versions = object.nil? ? versions_for_model(model) : object.versions
120
120
  versions = versions.where('event LIKE ?', "%#{query}%") if query.present?
121
121
  versions = versions.order(sort_reverse == 'true' ? "#{sort} DESC" : sort)
122
122
  versions = all ? versions : versions.send(Kaminari.config.page_method_name, current_page).per(per_page)
123
123
  paginated_proxies = Kaminari.paginate_array([], total_count: versions.try(:total_count) || versions.count)
124
- paginated_proxies = paginated_proxies.page(current_page).per(per_page)
124
+ paginated_proxies = paginated_proxies.send(
125
+ paginated_proxies.respond_to?(Kaminari.config.page_method_name) ? Kaminari.config.page_method_name : :page,
126
+ current_page,
127
+ ).per(per_page)
125
128
  versions.each do |version|
126
129
  paginated_proxies << VersionProxy.new(version, @user_class)
127
130
  end
128
131
  paginated_proxies
129
132
  end
130
133
 
134
+ def versions_for_model(model)
135
+ model_name = model.model.name
136
+ base_class_name = model.model.base_class.name
137
+
138
+ options =
139
+ if base_class_name == model_name
140
+ {item_type: model_name}
141
+ else
142
+ {item_type: base_class_name, item_id: model.model.all}
143
+ end
144
+
145
+ version_class_for(model.model).where(options)
146
+ end
147
+
131
148
  # PT can be configured to use [custom version
132
149
  # classes](https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
133
150
  #
@@ -7,9 +7,7 @@ module RailsAdmin
7
7
  class AuthorizationAdapter
8
8
  # This method is called first time only and used for setup
9
9
  def self.setup
10
- RailsAdmin::ApplicationController.class_eval do
11
- include ::Pundit
12
- end unless RailsAdmin::ApplicationController.ancestors.include? 'Pundit'
10
+ RailsAdmin::Extensions::ControllerExtension.send(:include, ::Pundit)
13
11
  end
14
12
 
15
13
  # See the +authorize_with+ config method for where the initialization happens.
@@ -73,7 +73,7 @@ module RailsAdmin
73
73
  generator_options = (options[:generator] || {}).symbolize_keys.delete_if { |_, value| value.blank? }
74
74
  method = @objects.respond_to?(:find_each) ? :find_each : :each
75
75
 
76
- CSV.generate(generator_options) do |csv|
76
+ CSV.generate(**generator_options) do |csv|
77
77
  csv << generate_csv_header unless options[:skip_header]
78
78
 
79
79
  @objects.send(method) do |object|
@@ -1,8 +1,8 @@
1
1
  module RailsAdmin
2
2
  class Version
3
- MAJOR = 1
4
- MINOR = 4
5
- PATCH = 3
3
+ MAJOR = 2
4
+ MINOR = 0
5
+ PATCH = 2
6
6
  PRE = nil
7
7
 
8
8
  class << self
data/lib/rails_admin.rb CHANGED
@@ -2,7 +2,6 @@ require 'rails_admin/engine'
2
2
  require 'rails_admin/abstract_model'
3
3
  require 'rails_admin/config'
4
4
  require 'rails_admin/extension'
5
- require 'rails_admin/extensions/cancan'
6
5
  require 'rails_admin/extensions/cancancan'
7
6
  require 'rails_admin/extensions/pundit'
8
7
  require 'rails_admin/extensions/paper_trail'