module Pravangi::Model
Public Instance Methods
approve_pending_changes()
click to toggle source
# File lib/pravangi/requires_approval.rb, line 61 def approve_pending_changes self.pending_approvals.each(&:approve_changes) self.touch self.reload end
pending_approval?()
click to toggle source
# File lib/pravangi/requires_approval.rb, line 57 def pending_approval? pending_approvals.present? end
pravangi_object_changes()
click to toggle source
# File lib/pravangi/requires_approval.rb, line 36 def pravangi_object_changes self.changes.except(*self.class.pravangi_options[:skip_attributes]) end
reject_pending_changes()
click to toggle source
# File lib/pravangi/requires_approval.rb, line 67 def reject_pending_changes self.pending_approvals.each(&:reject_changes) self.touch self.reload end
requires_approval(options = {})
click to toggle source
# File lib/pravangi/requires_approval.rb, line 14 def requires_approval(options = {}) class_attribute :pravangi_options self.pravangi_options = options.dup attr_accessor :skip_approval class_eval do def should_track_approval? self.send(self.class.pravangi_options[:if]) && !skip_approval end end before_update :track_approval, if: :should_track_approval? has_many :pending_approvals, lambda { order('id ASC') }, class_name: 'Pravangi::PendingApproval', as: :resource end
should_track_approval?()
click to toggle source
# File lib/pravangi/requires_approval.rb, line 21 def should_track_approval? self.send(self.class.pravangi_options[:if]) && !skip_approval end
track_approval()
click to toggle source
# File lib/pravangi/requires_approval.rb, line 40 def track_approval warn('Pravangi: The record cannot be updated, because it requires approval.') if changed? original = self.clone original.pending_approvals.build( object_changes: original.pravangi_object_changes, raw_object: original.to_yaml ).save self.reload skip_attributes = Array(self.class.pravangi_options[:skip_attributes]) skip_attributes.each do |attr| self[attr] = original[attr] end end end