Sha256: c396c90c9005ee397bb134fc885db43f076002f79829ee5bdfd06d0c6664830f

Contents?: true

Size: 1.67 KB

Versions: 3

Compression:

Stored size: 1.67 KB

Contents

class DirtyHistoryRecord < ActiveRecord::Base   
  belongs_to :creator,  :polymorphic => true
  belongs_to :object,   :polymorphic => true

  validates_presence_of :old_value,   :unless => proc { |record| record.performing_manual_update || record.object.initialize_dirty_history }
  validates_presence_of :object_type, :object_id, :column_name, :column_type, :new_value

  scope :created_by,      lambda { |creator| where(:creator_id => creator.id, :creator_type => creator.class.name) }
  scope :for_object_type, lambda { |object_type| where(:object_type => object_type.to_s.classify) }
  scope :for_attribute,   lambda { |attribute| where(:column_name => attribute.to_s) }
  
  attr_accessor :performing_manual_update

  acts_as_paranoid
      
  [:new_value, :old_value].each do |attribute|
    define_method "#{attribute}" do 
      val_to_col_type(attribute)
    end
    define_method "#{attribute}=" do |val|
      self[attribute] = val.nil? ? nil : val.to_s
      instance_variable_set "@#{attribute}", val
    end
  end       
       
  def action_timestamp                           
    # use revised_created_at field to update the timestamp for
    # the dirty history action while retaining data integrity
    self[:revised_created_at] || self[:created_at]
  end            
  
  private
  
  def val_to_col_type attribute
    val_as_string = self[attribute]
    return nil if val_as_string.nil?
    case self[:column_type].to_sym
    when :integer, :boolean
      val_as_string.to_i
    when :decimal, :float
      val_as_string.to_f
    when :datetime
      Time.parse val_as_string
    when :date
      Date.parse val_as_string
    else # :string, :text
      val_as_string
    end
  end
  
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dirty_history-0.4.8 lib/dirty_history/dirty_history_record.rb
dirty_history-0.4.7 lib/dirty_history/dirty_history_record.rb
dirty_history-0.4.6 lib/dirty_history/dirty_history_record.rb