@@ -51,43 +51,59 @@ class AuditingAdapter
5151 created_at : :created_at ,
5252 message : :event ,
5353 } . freeze
54+ E_USER_CLASS_NOT_SET = <<~ERROR
55+ Please set up PaperTrail's user class explicitly.
56+
57+ config.audit_with :paper_trail do
58+ user_class { User }
59+ end
60+ ERROR
5461 E_VERSION_MODEL_NOT_SET = <<~ERROR
5562 Please set up PaperTrail's version model explicitly.
5663
57- config.audit_with :paper_trail, 'User', 'PaperTrail::Version'
64+ config.audit_with :paper_trail do
65+ version_class { PaperTrail::Version }
66+ end
5867
5968 If you have configured a model to use a custom version class
6069 (https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
61- that configuration will take precedence over what you specify in
62- `audit_with`.
70+ that configuration will take precedence over what you specify in `audit_with`.
6371 ERROR
6472
73+ include RailsAdmin ::Config ::Configurable
74+
6575 def self . setup
6676 raise 'PaperTrail not found' unless defined? ( ::PaperTrail )
6777
6878 RailsAdmin ::Extensions ::ControllerExtension . include ControllerExtension
6979 end
7080
71- def initialize ( controller , user_class = 'User' , version_class = '::Version' )
81+ def initialize ( controller , user_class_name = nil , version_class_name = nil , & block )
7282 @controller = controller
7383 @controller &.send ( :set_paper_trail_whodunnit )
74- begin
75- @user_class = user_class . to_s . constantize
76- rescue NameError
77- raise "Please set up Papertrail's user model explicitly. Ex: config.audit_with :paper_trail, 'User'"
78- end
7984
80- begin
81- @version_class = version_class . to_s . constantize
82- rescue NameError
83- raise E_VERSION_MODEL_NOT_SET
84- end
85+ user_class { user_class_name . to_s . constantize } if user_class_name
86+ version_class { version_class_name . to_s . constantize } if version_class_name
87+
88+ instance_eval ( &block ) if block
89+ end
90+
91+ register_instance_option :user_class do
92+ User
93+ rescue NameError
94+ raise E_USER_CLASS_NOT_SET
95+ end
96+
97+ register_instance_option :version_class do
98+ PaperTrail ::Version
99+ rescue NameError
100+ raise E_VERSION_MODEL_NOT_SET
85101 end
86102
87103 def latest ( count = 100 )
88- @ version_class.
104+ version_class .
89105 order ( id : :desc ) . includes ( :item ) . limit ( count ) .
90- collect { |version | VersionProxy . new ( version , @ user_class) }
106+ collect { |version | VersionProxy . new ( version , user_class ) }
91107 end
92108
93109 def delete_object ( _object , _model , _user )
@@ -133,7 +149,7 @@ def listing_for_model_or_object(model, object, query, sort, sort_reverse, all, p
133149 current_page ,
134150 ) . per ( per_page )
135151 versions . each do |version |
136- paginated_proxies << VersionProxy . new ( version , @ user_class)
152+ paginated_proxies << VersionProxy . new ( version , user_class )
137153 end
138154 paginated_proxies
139155 end
@@ -159,7 +175,7 @@ def versions_for_model(model)
159175 # has_paper_trail versions: { class_name: 'MyVersion' }
160176 # ```
161177 def version_class_for ( model )
162- model . paper_trail_options . dig ( :versions , :class_name ) . try ( :constantize ) || @ version_class
178+ model . paper_trail . version_class
163179 end
164180 end
165181 end
0 commit comments