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