Module: Pravangi::Model

Extended by:
ActiveSupport::Concern
Defined in:
lib/pravangi/requires_approval.rb

Instance Method Summary collapse

Instance Method Details

#approve_pending_changesObject



61
62
63
64
65
# 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?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/pravangi/requires_approval.rb', line 57

def pending_approval?
  pending_approvals.present?
end

#pravangi_object_changesObject



36
37
38
# File 'lib/pravangi/requires_approval.rb', line 36

def pravangi_object_changes
  self.changes.except(*self.class.pravangi_options[:skip_attributes])
end

#reject_pending_changesObject



67
68
69
70
71
# File 'lib/pravangi/requires_approval.rb', line 67

def reject_pending_changes
  self.pending_approvals.each(&:reject_changes)
  self.touch
  self.reload
end

#track_approvalObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 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