module Scoring class Engine ENGINES = { "volley" => Engines::VolleyEngine, "racket" => Engines::RacketEngine, "generic" => Engines::GenericEngine, "basket" => Engines::BasketEngine, "timed" => Engines::TimedEngine, "timer" => Engines::TimerEngine }.freeze def self.for_match(match) board = match.effective_board_type klass = ENGINES.fetch(board) { Engines::GenericEngine } klass.new(match: match) end def self.for_session(session) for_match(session.match) end def self.ensure_score_for(session) for_match(session.match).ensure_score(session) end end end