class Snaps::Snapshot

Public Class Methods

create(record, options, &block) click to toggle source
# File lib/snaps/snapshot.rb, line 3
def self.create(record, options, &block)
  new(record, options).create(&block)
end

Public Instance Methods

create() { |copy| ... } click to toggle source
# File lib/snaps/snapshot.rb, line 7
def create
  copy = record.dup

  if record.respond_to?(:created_at)
    copy.created_at = record.created_at
  end

  yield(copy) if block_given?

  Tag.suppress do
    copy.save
  end

  copy.snaps_tag!(options[:tag]) if options[:tag]

  snapshot_components(copy)

  copy
end

Private Instance Methods

each_component_with_foreign_key() { |component, fk| ... } click to toggle source
# File lib/snaps/snapshot.rb, line 37
def each_component_with_foreign_key
  options.fetch(:components, []).each do |association|
    fk = record.class.reflect_on_association(association).foreign_key

    record.send(association).each do |component|
      yield(component, fk)
    end
  end
end
snapshot_components(copy) click to toggle source
# File lib/snaps/snapshot.rb, line 29
def snapshot_components(copy)
  each_component_with_foreign_key do |component, fk|
    component.snapshot! do |snapshot|
      snapshot[fk] = copy.id
    end
  end
end