Module: Ddb::Userstamp::Stampable::ClassMethods

Defined in:
lib/stampable.rb

Instance Method Summary collapse

Instance Method Details

#stampable(options = {}) ⇒ Object

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.



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# 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

#stamper_classObject

:nodoc:



114
115
116
# File 'lib/stampable.rb', line 114

def stamper_class #:nodoc:
  stamper_class_name.to_s.camelize.constantize rescue nil
end

#without_stampsObject

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


106
107
108
109
110
111
112
# 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