app/models/approval/request.rb in approval-0.3.7 vs app/models/approval/request.rb in approval-0.4.0

- old
+ new

@@ -8,11 +8,11 @@ end has_many :comments, class_name: :"Approval::Comment", inverse_of: :request, dependent: :destroy has_many :items, class_name: :"Approval::Item", inverse_of: :request, dependent: :destroy - enum state: { pending: 0, cancelled: 1, approved: 2, rejected: 3 } + enum state: { pending: 0, cancelled: 1, approved: 2, rejected: 3, executed: 4 } scope :recently, -> { order(id: :desc) } validates :state, presence: true validates :respond_user, presence: true, unless: :pending? @@ -26,14 +26,22 @@ before_create do self.requested_at = Time.current end + def execute + self.state = :executed + self.executed_at = Time.current + items.each(&:apply) + end + private def ensure_state_was_pending return unless persisted? - errors.add(:base, :already_performed) if state_was != "pending" + if %w[pending approved].exclude?(state_was) + errors.add(:base, :already_performed) + end end end end