Sha256: c7efa0f25c241611eebe475e3e17ce2fc2991fb34284b68d45271ac9781374d1
Contents?: true
Size: 1.59 KB
Versions: 2
Compression:
Stored size: 1.59 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.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) } 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
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dirty_history-0.4.3 | lib/dirty_history/dirty_history_record.rb |
dirty_history-0.4.2 | lib/dirty_history/dirty_history_record.rb |