class RailsAdmin::Extensions::PaperTrail::AuditingAdapter

Constants

COLUMN_MAPPING
E_USER_CLASS_NOT_SET
E_VERSION_MODEL_NOT_SET

Public Class Methods

new(controller, user_class_name = nil, version_class_name = nil, &block) click to toggle source
# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 81
def initialize(controller, user_class_name = nil, version_class_name = nil, &block)
  @controller = controller
  @controller&.send(:set_paper_trail_whodunnit)

  user_class { user_class_name.to_s.constantize } if user_class_name
  version_class { version_class_name.to_s.constantize } if version_class_name

  instance_eval(&block) if block
end
setup() click to toggle source
# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 75
def self.setup
  raise 'PaperTrail not found' unless defined?(::PaperTrail)

  RailsAdmin::Extensions::ControllerExtension.include ControllerExtension
end

Public Instance Methods

create_object(_object, _abstract_model, _user) click to toggle source
# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 121
def create_object(_object, _abstract_model, _user)
  # do nothing
end
delete_object(_object, _model, _user) click to toggle source
# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 113
def delete_object(_object, _model, _user)
  # do nothing
end
latest(count = 100) click to toggle source
# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 107
def latest(count = 100)
  version_class.
    order(sort_by).includes(:item).limit(count).
    collect { |version| VersionProxy.new(version, user_class) }
end
listing_for_model(model, query, sort, sort_reverse, all, page, per_page = (RailsAdmin::Config.default_items_per_page || 20)) click to toggle source
# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 125
def listing_for_model(model, query, sort, sort_reverse, all, page, per_page = (RailsAdmin::Config.default_items_per_page || 20))
  listing_for_model_or_object(model, nil, query, sort, sort_reverse, all, page, per_page)
end
listing_for_object(model, object, query, sort, sort_reverse, all, page, per_page = (RailsAdmin::Config.default_items_per_page || 20)) click to toggle source
# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 129
def listing_for_object(model, object, query, sort, sort_reverse, all, page, per_page = (RailsAdmin::Config.default_items_per_page || 20))
  listing_for_model_or_object(model, object, query, sort, sort_reverse, all, page, per_page)
end
update_object(_object, _model, _user, _changes) click to toggle source
# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 117
def update_object(_object, _model, _user, _changes)
  # do nothing
end

Protected Instance Methods

listing_for_model_or_object(model, object, query, sort, sort_reverse, all, page, per_page) click to toggle source
# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 136
def listing_for_model_or_object(model, object, query, sort, sort_reverse, all, page, per_page)
  sort =
    if sort.present?
      {COLUMN_MAPPING[sort.to_sym] => sort_reverse ? :desc : :asc}
    else
      sort_by
    end

  current_page = page.presence || '1'

  versions = object.nil? ? versions_for_model(model) : object.public_send(model.model.versions_association_name)
  versions = versions.where('event LIKE ?', "%#{query}%") if query.present?
  versions = versions.order(sort)
  versions = versions.send(Kaminari.config.page_method_name, current_page).per(per_page) unless all
  paginated_proxies = Kaminari.paginate_array([], total_count: versions.try(:total_count) || versions.count)
  paginated_proxies = paginated_proxies.send(
    paginated_proxies.respond_to?(Kaminari.config.page_method_name) ? Kaminari.config.page_method_name : :page,
    current_page,
  ).per(per_page)
  versions.each do |version|
    paginated_proxies << VersionProxy.new(version, user_class)
  end
  paginated_proxies
end
version_class_for(model) click to toggle source

PT can be configured to use [custom version classes](github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)

“‘ruby has_paper_trail versions: { class_name: ’MyVersion’ } “‘

# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 181
def version_class_for(model)
  model.paper_trail.version_class
end
versions_for_model(model) click to toggle source
# File lib/rails_admin/extensions/paper_trail/auditing_adapter.rb, line 161
def versions_for_model(model)
  model_name = model.model.name
  base_class_name = model.model.base_class.name

  options =
    if base_class_name == model_name
      {item_type: model_name}
    else
      {item_type: base_class_name, item_id: model.model.all}
    end

  version_class_for(model.model).where(options)
end