65 lines
1.4 KiB
Ruby

# The game class
class Game < ActiveRecord::Base
has_many :players, dependent: :destroy
has_many :users, through: :players
accepts_nested_attributes_for :players
validates :title, presence: true
def start
# Save the game to the database
return false unless startable?
# Start the game TODO
self.status = 'Game Started' if startable?
# Create a deck
d = Deck.new
# Shuffle the deck
d.cards.shuffle!
# Deal the cards
players.each do |player|
13.times do
card = d.cards.shift
player.player_cards.new(card.instance_values)
end
player.save
end
save
end
def validate_startable
@player_count = players.size
errors[:players] = 'Must be at least 2 players.' if @player_count < 2
errors[:players] = 'Must be less than 5 players.' if @player_count > 4
end
def startable?
@player_count = players.size
tests = [
@player_count.between?(2, 4),
status != 'Game Started'
]
tests.each do |test|
if test == false then return false end
end
return true
end
def add_player_from_user(user)
return false unless can_accomodate(user)
self.players.create(user: user)
end
def can_accomodate(user)
!(already_has?(user) || full?)
end
def already_has?(user)
users.include?(user)
end
def full?
players.size >= 4
end
end