Module: Blamestamp::Blameable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/blamestamp/active_record.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#blame_cascade(time, usr_id) ⇒ Object
called by other models, when they’re updated.
-
#blame_create ⇒ Object
create callback.
-
#blame_destroy ⇒ Object
destory callback.
-
#blame_update ⇒ Object
update callback.
-
#cascade_blame!(time, usr_id) ⇒ Object
cascade the blame up.
-
#has_non_blame_changes? ⇒ Boolean
check if non-blame columns have changed.
Instance Method Details
#blame_cascade(time, usr_id) ⇒ Object
called by other models, when they’re updated
90 91 92 93 94 95 |
# File 'lib/blamestamp/active_record.rb', line 90 def blame_cascade(time, usr_id) at_col = self.blameable_config[:upd_at] by_col = self.blameable_config[:upd_by] self[at_col] = time self[by_col] = usr_id end |
#blame_create ⇒ Object
create callback
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/blamestamp/active_record.rb', line 56 def blame_create at_col = self.blameable_config[:cre_at] by_col = self.blameable_config[:cre_by] name = self.blameable_config[:cre_user] # only set blanks self[at_col] = Time.now if self[at_col].blank? self[by_col] = Blamestamp::get_blame_user if self[by_col].blank? && !self.send(name) # required option raise NoBlameUserError if self.blameable_config[:required] && !self[by_col] # cascade self.cascade_blame!(self[at_col], self[by_col]) end |
#blame_destroy ⇒ Object
destory callback
85 86 87 |
# File 'lib/blamestamp/active_record.rb', line 85 def blame_destroy self.cascade_blame!(Time.now, Blamestamp::get_blame_user) end |
#blame_update ⇒ Object
update callback
73 74 75 76 77 78 79 80 81 82 |
# File 'lib/blamestamp/active_record.rb', line 73 def blame_update at_col = self.blameable_config[:upd_at] by_col = self.blameable_config[:upd_by] name = self.blameable_config[:upd_user] # respect manual user updates self[at_col] = Time.now unless self.changed.include?(at_col) self[by_col] = Blamestamp::get_blame_user unless self.changed.include?(by_col) self.cascade_blame!(self[at_col], self[by_col]) end |
#cascade_blame!(time, usr_id) ⇒ Object
cascade the blame up
46 47 48 49 50 51 52 53 |
# File 'lib/blamestamp/active_record.rb', line 46 def cascade_blame!(time, usr_id) self.blameable_config[:cascade].each do |assoc| if self.send(assoc) self.send(assoc).blame_cascade(time, usr_id) self.send(assoc).save :validate => false end end end |
#has_non_blame_changes? ⇒ Boolean
check if non-blame columns have changed
98 99 100 101 102 103 104 105 106 |
# File 'lib/blamestamp/active_record.rb', line 98 def has_non_blame_changes? cols = [ self.blameable_config[:cre_at], self.blameable_config[:cre_by], self.blameable_config[:upd_at], self.blameable_config[:upd_by], ] (self.changed - cols).empty? ? false : true end |