module ModelHistory::Mixin::ClassMethods
Public Instance Methods
creates_model_history()
click to toggle source
# File lib/model_history/model_history_mixin.rb, line 62 def creates_model_history # Mix in the module, but ensure to do so just once. metaclass = (class << self; self; end) return if metaclass.included_modules.include?(ModelHistory::Mixin::CreatorInstanceMethods) has_many :model_history_records, :as => :creator include ModelHistory::Mixin::CreatorInstanceMethods end
has_model_history(*args)
click to toggle source
pass an optional proc to assign a creator to the model_history object example usage: class User < ActiveRecord::Base
has_model_history :email, :first_name, :last_name, :creator => proc { User.current_user }
end
# File lib/model_history/model_history_mixin.rb, line 25 def has_model_history *args # Mix in the module, but ensure to do so just once. metaclass = (class << self; self; end) return if metaclass.included_modules.include?(ModelHistory::Mixin::ObjectInstanceMethods) has_many :model_history_records, :as => :model, :dependent => :destroy attr_accessor :model_history_changes, :initialize_model_history cattr_accessor :model_history_columns self.model_history_columns ||= [] if args.present? before_save :set_model_history_changes after_save :save_model_history args.each do |arg| if [String,Symbol].include?(arg.class) arg = arg.to_sym self.model_history_columns << arg unless self.model_history_columns.include?(arg) define_method "creator_for_model_history" do end elsif arg.is_a?(Hash) creator_proc = arg.delete(:creator) send :define_method, "creator_for_model_history" do begin creator_proc.is_a?(Proc) ? creator_proc.call : nil rescue raise ModelHistory::Mixin::CreatorProcError end end end end include ModelHistory::Mixin::ObjectInstanceMethods end end