module PaperTrail::Background

Constants

VERSION

Public Instance Methods

record_create() click to toggle source

@api private @return - The created version object, so that plugins can use it, e.g. paper_trail-association_tracking

# File lib/paper_trail/background.rb, line 9
def record_create
  return unless enabled?

  event = PaperTrail::Events::Create.new(@record, true)

  # Merge data from `Event` with data from PT-AT. We no longer use
  # `data_for_create` but PT-AT still does.
  data = event.data.merge(data_for_create)

  trigger_write(@record, data, :create)
end
record_destroy(recording_order) click to toggle source

`recording_order` is “after” or “before”. See ModelConfig#on_destroy.

@api private @return - The created version object, so that plugins can use it, e.g. paper_trail-association_tracking

# File lib/paper_trail/background.rb, line 26
def record_destroy(recording_order)
  return unless enabled?
  return if @record.new_record?

  in_after_callback = recording_order == "after"

  event = PaperTrail::Events::Destroy.new(@record, in_after_callback)

  # Merge data from `Event` with data from PT-AT. We no longer use
  # `data_for_destroy` but PT-AT still does.
  data = event.data.merge(data_for_destroy)

  trigger_write(@record, data, :destroy)
end
record_update(force:, in_after_callback:, is_touch:) click to toggle source

@api private @return - The created version object, so that plugins can use it, e.g. paper_trail-association_tracking

# File lib/paper_trail/background.rb, line 44
def record_update(force:, in_after_callback:, is_touch:)
  return unless enabled?

  event = PaperTrail::Events::Update.new(@record, in_after_callback, is_touch, nil)

  return unless force || event.changed_notably?

  # Merge data from `Event` with data from PT-AT. We no longer use
  # `data_for_update_columns` but PT-AT still does.
  data = event.data.merge(data_for_update_columns)

  trigger_write(@record, data, :update)
end
record_update_columns(changes) click to toggle source

@api private @return - The created version object, so that plugins can use it, e.g. paper_trail-association_tracking

# File lib/paper_trail/background.rb, line 61
def record_update_columns(changes)
  return unless enabled?

  event = Events::Update.new(@record, false, false, changes)

  return unless force || event.changed_notably?

  # Merge data from `Event` with data from PT-AT. We no longer use
  # `data_for_update_columns` but PT-AT still does.
  data = event.data.merge(data_for_update_columns)

  trigger_write(@record, data, :update)
end

Private Instance Methods

trigger_write(record, data, event) click to toggle source
# File lib/paper_trail/background.rb, line 75
        def trigger_write(record, data, event)
  version_class = record.class.paper_trail.version_class

  version_class.after_transaction do
    VersionJob.perform_async(
      version_class,
      data.merge(
        :item_id => record.id,
        :item_type => record.class.name
      ),
      event
    )
  end
end