Module | Ddb::Userstamp::Stampable::ClassMethods |
In: |
lib/stampable.rb
|
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.
# File lib/stampable.rb, line 68 68: def stampable(options = {}) 69: defaults = { 70: :stamper_class_name => :user, 71: :creator_attribute => Ddb::Userstamp.compatibility_mode ? :created_by : :creator_id, 72: :updater_attribute => Ddb::Userstamp.compatibility_mode ? :updated_by : :updater_id, 73: :deleter_attribute => Ddb::Userstamp.compatibility_mode ? :deleted_by : :deleter_id 74: }.merge(options) 75: 76: self.stamper_class_name = defaults[:stamper_class_name].to_sym 77: self.creator_attribute = defaults[:creator_attribute].to_sym 78: self.updater_attribute = defaults[:updater_attribute].to_sym 79: self.deleter_attribute = defaults[:deleter_attribute].to_sym 80: 81: class_eval do 82: belongs_to :creator, :class_name => self.stamper_class_name.to_s.singularize.camelize, 83: :foreign_key => self.creator_attribute 84: 85: belongs_to :updater, :class_name => self.stamper_class_name.to_s.singularize.camelize, 86: :foreign_key => self.updater_attribute 87: 88: before_save :set_updater_attribute 89: before_create :set_creator_attribute 90: 91: if defined?(Caboose::Acts::Paranoid) 92: belongs_to :deleter, :class_name => self.stamper_class_name, 93: :foreign_key => self.deleter_attribute 94: before_destroy :set_deleter_attribute 95: end 96: end 97: end
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 106: def without_stamps 107: original_value = self.record_userstamp 108: self.record_userstamp = false 109: yield 110: self.record_userstamp = original_value 111: end