Class: PaperTrailViewer::DataSource::ActiveRecord

Inherits:
Base
  • Object
show all
Defined in:
lib/paper_trail_viewer/data_source/active_record.rb

Overview

The default data source. Queries version records via ActiveRecord. See DataSource::Bigquery::Adapter for how to implement another source.

Instance Method Summary collapse

Methods inherited from Base

#call

Constructor Details

#initialize(version_class: 'PaperTrail::Version') ⇒ ActiveRecord

Returns a new instance of ActiveRecord.



7
8
9
# File 'lib/paper_trail_viewer/data_source/active_record.rb', line 7

def initialize(version_class: 'PaperTrail::Version')
  @version_class = version_class
end

Instance Method Details

#perform_query(q) ⇒ Object

Parameters:



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/paper_trail_viewer/data_source/active_record.rb', line 12

def perform_query(q)
  version_class = q.version_class || @version_class
  versions = version_class.is_a?(String) ? version_class.constantize : version_class

  if 'object_changes'.in?(versions.column_names)
    # Ignore blank versions that only touch updated_at or untracked fields.
    versions = versions.where.not(object_changes: '')
    versions = versions.where('object_changes LIKE ?', "%#{q.filter}%") if q.filter.present?
  elsif 'object'.in?(versions.column_names)
    versions = versions.where('object LIKE ?', "%#{q.filter}%") if q.filter.present?
  end

  versions = versions.where(item_type: q.item_type) if q.item_type.present?
  versions = versions.where(item_id: q.item_id) if q.item_id.present?
  versions = versions.where(event: q.event) if q.event.present?

  versions.order('created_at DESC, id DESC').page(q.page).per(q.per_page)
end