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 |