module Ddb::Userstamp::Stampable::ClassMethods
Public Instance Methods
stampable(options = {})
click to toggle source
This method is automatically called on for all classes that inherit from ActiveRecord, but if you need to customize how the plug-in functions, this is the method to use. Here's an example:
class Post < ActiveRecord::Base stampable :stamper_class_name => :person, :creator_attribute => :create_user, :updater_attribute => :update_user, :deleter_attribute => :delete_user :deleter => true end
The method will automatically setup all the associations, and create before_save
and before_create
filters for doing the stamping. By default, the deleter association and before filter are not defined unless you are using acts_as_paranoid or you set the :deleter_attribute or set the :deleter option to true.
# File lib/stampable.rb, line 69 def stampable(options = {}) compatability = Ddb::Userstamp.compatibility_mode defaults = { :stamper_class_name => :user, :creator_attribute => (compatability ? :created_by : :creator_id), :updater_attribute => (compatability ? :updated_by : :updater_id), :deleter_attribute => (compatability ? :deleted_by : :deleter_id), :deleter => !!(options.has_key?(:deleter_attribute) or defined?(Caboose::Acts::Paranoid)) }.merge(options) self.stamper_class_name = defaults[:stamper_class_name].to_sym self.creator_attribute = defaults[:creator_attribute].to_sym self.updater_attribute = defaults[:updater_attribute].to_sym self.deleter_attribute = defaults[:deleter_attribute].to_sym class_eval do klass = "::#{stamper_class_name.to_s.singularize.camelize}" belongs_to :creator, :class_name => klass, :foreign_key => creator_attribute belongs_to :updater, :class_name => klass, :foreign_key => updater_attribute before_validation :set_updater_attribute before_validation :set_creator_attribute, :on => :create if defaults[:deleter] belongs_to :deleter, :class_name => klass, :foreign_key => deleter_attribute before_destroy :set_deleter_attribute end end end
without_stamps() { || ... }
click to toggle source
Temporarily allows you to turn stamping off. For example:
Post.without_stamps do post = Post.find(params[:id]) post.update_attributes(params[:post]) post.save end
# File lib/stampable.rb, line 106 def without_stamps original_value = self.record_userstamp self.record_userstamp = false yield ensure self.record_userstamp = original_value end