Skip to content

Commit 6d08234

Browse files
authored
Merge pull request #3059 from jaredbeck/paper_trail_options
Avoid using private API of PaperTrail
2 parents 171fb91 + a216c74 commit 6d08234

2 files changed

Lines changed: 29 additions & 11 deletions

File tree

lib/rails_admin/extensions/paper_trail/auditing_adapter.rb

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ class AuditingAdapter
3737
created_at: :created_at,
3838
message: :event,
3939
}.freeze
40+
E_VERSION_MODEL_NOT_SET = <<-EOS.strip_heredoc.freeze
41+
Please set up PaperTrail's version model explicitly.
42+
43+
config.audit_with :paper_trail, 'User', 'PaperTrail::Version'
44+
45+
If you have configured a model to use a custom version class
46+
(https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
47+
that configuration will take precedence over what you specify in
48+
`audit_with`.
49+
EOS
4050

4151
def self.setup
4252
raise('PaperTrail not found') unless defined?(::PaperTrail)
@@ -59,7 +69,7 @@ def initialize(controller, user_class = 'User', version_class = '::Version')
5969
begin
6070
@version_class = version_class.to_s.constantize
6171
rescue NameError
62-
raise "Please set up Papertrail's version model explicitly. Ex: config.audit_with :paper_trail, 'User', 'PaperTrail::Version'"
72+
raise E_VERSION_MODEL_NOT_SET
6373
end
6474
end
6575

@@ -91,6 +101,7 @@ def listing_for_object(model, object, query, sort, sort_reverse, all, page, per_
91101

92102
protected
93103

104+
# - model - a RailsAdmin::AbstractModel
94105
def listing_for_model_or_object(model, object, query, sort, sort_reverse, all, page, per_page)
95106
if sort.present?
96107
sort = COLUMN_MAPPING[sort.to_sym]
@@ -99,11 +110,10 @@ def listing_for_model_or_object(model, object, query, sort, sort_reverse, all, p
99110
sort_reverse = 'true'
100111
end
101112

102-
model_name = model.model.name
103-
113+
ar_model = model.model
104114
current_page = page.presence || '1'
105115

106-
versions = version_class_for(model_name).where item_type: model_name
116+
versions = version_class_for(ar_model).where item_type: ar_model.name
107117
versions = versions.where item_id: object.id if object
108118
versions = versions.where('event LIKE ?', "%#{query}%") if query.present?
109119
versions = versions.order(sort_reverse == 'true' ? "#{sort} DESC" : sort)
@@ -116,12 +126,14 @@ def listing_for_model_or_object(model, object, query, sort, sort_reverse, all, p
116126
paginated_proxies
117127
end
118128

119-
def version_class_for(model_name)
120-
klass = model_name.constantize.
121-
try(:version_class_name).
122-
try(:constantize)
123-
124-
klass || @version_class
129+
# PT can be configured to use [custom version
130+
# classes](https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
131+
#
132+
# ```ruby
133+
# has_paper_trail class_name: 'MyVersion'
134+
# ```
135+
def version_class_for(model)
136+
model.paper_trail_options[:class_name].try(:constantize) || @version_class
125137
end
126138
end
127139
end

spec/integration/history/rails_admin_paper_trail_spec.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,13 @@
4444
@user = FactoryBot.create :user
4545
@paper_trail_test = FactoryBot.create :paper_trail_test
4646
with_versioning do
47-
PaperTrail.whodunnit = @user.id
47+
# `PaperTrail.whodunnit` deprecated in PT 9, will be removed in 10.
48+
# Use `PaperTrail.request.whodunnit` instead.
49+
if PaperTrail.respond_to?(:request)
50+
PaperTrail.request.whodunnit = @user.id
51+
else
52+
PaperTrail.whodunnit = @user.id
53+
end
4854
30.times do |i|
4955
@paper_trail_test.update!(name: "updated name #{i}")
5056
end

0 commit comments

Comments
 (0)