Module: Userstamp::Stampable::ClassMethods

Defined in:
lib/userstamp/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
end

The method will automatically setup all the associations, and create before_save and before_create filters for doing the stamping.


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/userstamp/stampable.rb', line 51

def stampable(options = {})
  defaults = {
    stamper_class_name: :user,
    creator_attribute: :creator_id,
    updater_attribute: :updater_id,
    deleter_attribute: :deleter_id
  }.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_save :set_updater_attribute
    before_create :set_creator_attribute

    # if self.respond_to?(:columns_definition) && self.columns_definition[:deleter_id]
    #   belongs_to(:deleter, , class_name: klass, foreign_key: deleter_attribute)
    #   before_destroy :set_deleter_attribute
    # end
  end
end

#stamper_classObject

:nodoc:


93
94
95
96
97
# File 'lib/userstamp/stampable.rb', line 93

def stamper_class #:nodoc:
  stamper_class_name.to_s.capitalize.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

86
87
88
89
90
91
# File 'lib/userstamp/stampable.rb', line 86

def without_stamps
  original_value = record_userstamp
  self.record_userstamp = false
  yield
  self.record_userstamp = original_value
end