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