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 :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 71 71: def stampable(options = {}) 72: compatability = Ddb::Userstamp.compatibility_mode 73: defaults = { 74: :stamper_class_name => :user, 75: :creator_attribute => (compatability ? :created_by : :creator_id), 76: :updater_attribute => (compatability ? :updated_by : :updater_id), 77: :deleter_attribute => (compatability ? :deleted_by : :deleter_id), 78: :deleter => !!(options.has_key?(:deleter_attribute) or defined?(Caboose::Acts::Paranoid)) 79: }.merge(options) 80: 81: self.stamper_class_name = defaults[:stamper_class_name].to_sym 82: self.creator_attribute = defaults[:creator_attribute].to_sym 83: self.updater_attribute = defaults[:updater_attribute].to_sym 84: self.deleter_attribute = defaults[:deleter_attribute].to_sym 85: 86: class_eval do 87: klass = stamper_class_name.to_s.singularize.camelize 88: belongs_to :creator, :class_name => klass, :foreign_key => creator_attribute 89: belongs_to :updater, :class_name => klass, :foreign_key => updater_attribute 90: 91: before_save :set_updater_attribute 92: before_create :set_creator_attribute 93: 94: if defaults[:deleter] 95: belongs_to :deleter, :class_name => klass, :foreign_key => deleter_attribute 96: before_destroy :set_deleter_attribute 97: end 98: end 99: 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 108 108: def without_stamps 109: original_value = self.record_userstamp 110: self.record_userstamp = false 111: yield 112: ensure 113: self.record_userstamp = original_value 114: end