Sha256: 674025975a5496b9b98d5769257d506acc1f549cbe8ff2d85980b09026419722

Contents?: true

Size: 930 Bytes

Versions: 2

Compression:

Stored size: 930 Bytes

Contents

class Purgatory < ActiveRecord::Base
  attr_accessible :requester, :soul

  belongs_to :soul, polymorphic: true
  belongs_to :requester, class_name: 'User'
  belongs_to :approver, class_name: 'User'
  before_create :store_changes

  validates :soul, :requester, presence: true

  scope :pending, conditions: { approved_at: nil }
  scope :approved, conditions: ["approved_at IS NOT NULL"]

  def approved?
    approved_at.present?
  end

  def pending?
    approved_at.nil?
  end

  def changes_hash
    ActiveSupport::JSON.decode(changes_json)
  end

  def approve!(approver)
    return if approved_at.present?
    changes = changes_hash
    if soul.update_attributes(changes.update(changes){|k,v| v.last}, without_protection: true)
      self.approver = approver
      self.approved_at = Time.now
      save
    end
  end

  private

  def store_changes
    self.changes_json = ActiveSupport::JSON.encode(soul.changes)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
purgatory-1.1.0 lib/purgatory/purgatory.rb
purgatory-1.0.0 lib/purgatory/purgatory.rb