module ControllableVersioning::InstanceMethods

Public Instance Methods

restore_version!(version) click to toggle source
# File lib/controllable_versioning/instance_methods.rb, line 13
def restore_version!(version)
  self.update!(restore_attrs(version))
end
version!(dynamic_attr={}) click to toggle source
# File lib/controllable_versioning/instance_methods.rb, line 4
def version!(dynamic_attr={})
  ActiveRecord::Base.transaction do
    self.save!
    attr = versioned_attrs
    attr.merge! dynamic_attr
    self.class.target_model.create!(attr)
  end
end
versions() click to toggle source
# File lib/controllable_versioning/instance_methods.rb, line 17
def versions
  self.class.target_model.where({originated_model_id: self.id, originated_model_name: self.class.name})
end

Private Instance Methods

restore_attrs(version) click to toggle source
# File lib/controllable_versioning/instance_methods.rb, line 31
def restore_attrs(version)
  accepted_column_names = self.class.column_names.map(&:to_sym)
  attrs = self.class.versioned_column_hash.map do |original_column, copied_column|
    next unless accepted_column_names.include?(original_column)
    [original_column, version.send(copied_column)]
  end.compact.to_h
end
versioned_attrs() click to toggle source
# File lib/controllable_versioning/instance_methods.rb, line 22
def versioned_attrs
  attrs = self.class.versioned_column_hash.map do |original_column, copied_column|
    [copied_column, self.send(original_column)]
  end.to_h
  attrs.merge!({:originated_model_id => self.id})
  attrs.merge!({:originated_model_name => self.class.name})
  attrs
end