diff options
Diffstat (limited to 'app/models/tournament_stage.rb')
-rw-r--r-- | app/models/tournament_stage.rb | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/app/models/tournament_stage.rb b/app/models/tournament_stage.rb index 205c8cc..efb4d5c 100644 --- a/app/models/tournament_stage.rb +++ b/app/models/tournament_stage.rb @@ -1,3 +1,55 @@ class TournamentStage < ActiveRecord::Base belongs_to :tournament + validates_presence_of :tournament + + has_many :matches + + validates(:scheduling_method, + presence: true, + inclusion: {in: Tournament.new.scheduling_methods}) + + validates(:seeding_method, + presence: true, + inclusion: {in: Tournament.new.seeding_methods}) + + def owned_by?(user) + self.tournament.owned_by?(user) + end + + # A 1-indexed hash of matches + def matches_ordered + h = {} + i = 1 + self.matches.order(:id).each do |m| + h[i] = m + i += 1 + end + return h + end + + def create_matches + scheduling.create_matches + end + + def to_svg(highlight_user) + return scheduling.graph(highlight_user) + end + + def seed + return seeding.seed.pair(matches, players) + end + + # Accessors to the configured methods + + def scoring + @scoring ||= tournament.scoring + end + + def scheduling + @scheduling ||= "Scheduling::#{self.scheduling_method.camelcase}".constantize.new(self) + end + + def seeding + @seeding ||= "Seeding::#{self.seeding_method.camelcase}".constantize + end end |