carolineartz
2/13/2016 - 12:03 AM

ticket.rb

class Ticket < ActiveRecord::Base
  belongs_to :grouper
  belongs_to :user

  validate :user_cant_be_blacklisted, on: :confirmation
  validate :user_cant_double_book, on: :confirmation

  validate :grouper_cant_be_full, on: :confirmation
  validate :grouper_cant_have_occurred, on: :confirmation

  validate :ticket_cant_have_been_confirmed, on: :confirmation


  def confirm
    update confirmed: true if confirmable?
  end
  
  def confirmable?
    valid? :confirmation
  end

  
  private
    def user_cant_be_blacklisted
      errors.add :user, "can't book a Grouper at this time" if user.blacklisted?
    end
    
    def user_cant_double_book
      errors.add :user, 'are already going to a Grouper on that day' if user.has_existing_grouper?(grouper)
    end
    
    def grouper_cant_be_full
      errors.add :grouper, 'has already occurred!' if grouper.full?
    end
    
    def grouper_cant_have_occurred
      errors.add :grouper, 'has already occurred!' if grouper.past?
    end
    
    def ticket_cant_have_been_confirmed
      errors.add :user, 'have already confirmed this ticket' if confirmed?
    end
end