module DirtyHistory::Mixin::ClassMethods
Public Instance Methods
creates_dirty_history()
click to toggle source
# File lib/dirty_history/dirty_history_mixin.rb, line 63 def creates_dirty_history # Mix in the module, but ensure to do so just once. metaclass = (class << self; self; end) return if metaclass.included_modules.include?(DirtyHistory::Mixin::CreatorInstanceMethods) has_many :dirty_history_records, :as => :creator include DirtyHistory::Mixin::CreatorInstanceMethods end
has_dirty_history(*args)
click to toggle source
pass an optional proc to assign a creator to the dirty_history object example usage: class User < ActiveRecord::Base
has_dirty_history :email, :first_name, :last_name, :creator => proc { User.current_user }
end
# File lib/dirty_history/dirty_history_mixin.rb, line 27 def has_dirty_history *args # Mix in the module, but ensure to do so just once. metaclass = (class << self; self; end) return if metaclass.included_modules.include?(DirtyHistory::Mixin::ObjectInstanceMethods) has_many :dirty_history_records, :as => :object, :dependent => :destroy attr_accessor :dirty_history_changes, :initialize_dirty_history cattr_accessor :dirty_history_columns self.dirty_history_columns ||= [] if args.present? before_save :set_dirty_history_changes after_save :save_dirty_history args.each do |arg| if [String,Symbol].include?(arg.class) arg = arg.to_sym self.dirty_history_columns << arg unless self.dirty_history_columns.include?(arg) elsif arg.is_a?(Hash) creator_proc = arg.delete(:creator) send :define_method, "creator_for_dirty_history" do begin creator_proc.is_a?(Proc) ? creator_proc.call : nil rescue raise DirtyHistory::Mixin::CreatorProcError end end end end include DirtyHistory::Mixin::ObjectInstanceMethods end end