module PaperTrailAssociationTracking::Reifiers::BelongsTo

def load_record(assoc_klass, id, options, version)

Other tags:
    Api: - private
def load_record(assoc_klass, id, options, version)
  if version.nil?
    assoc_klass.where(assoc_klass.primary_key => id).first
  else
    version.reify(
      options.merge(
        has_many: false,
        has_one: false,
        belongs_to: false,
        has_and_belongs_to_many: false
      )
    )
  end
end

def load_version(assoc_klass, id, transaction_id, version_at)

Other tags:
    Api: - private
def load_version(assoc_klass, id, transaction_id, version_at)
  assoc_klass.paper_trail.version_class.
    where("item_type = ?", assoc_klass.base_class.name).
    where("item_id = ?", id).
    where("created_at >= ? OR transaction_id = ?", version_at, transaction_id).
    order("id").limit(1).first
end

def reify(assoc, model, options, transaction_id)

Other tags:
    Api: - private
def reify(assoc, model, options, transaction_id)
  id = model.send(assoc.foreign_key)
  klass = assoc.polymorphic? ?
            model.send(assoc.foreign_type).constantize : assoc.klass
  version = load_version(klass, id, transaction_id, options[:version_at])
  record = load_record(klass, id, options, version)
  model.send("#{assoc.name}=".to_sym, record)
end