class SmashRuby::Tournament
Constants
- BASE_URL
- M
Attributes
end_date[R]
entrants[R]
id[R]
name[R]
sets[R]
slug[R]
start_date[R]
venue_address[R]
venue_name[R]
Public Class Methods
find(slug)
click to toggle source
# File lib/smash_ruby/tournament.rb, line 35 def self.find(slug) url = "#{BASE_URL}/#{slug}" response = SmashRuby::Request.get(url, slug, 'tournament') response.fmap do |result| new(result.dig('entities', 'tournament').merge('slug' => slug)) end.value end
new(attributes)
click to toggle source
# File lib/smash_ruby/tournament.rb, line 17 def initialize(attributes) @id = attributes.dig('id') @name = attributes.dig('name') @slug = attributes.dig('slug') @start_date = Time.at(attributes.dig('startAt')) @end_date = Time.at(attributes.dig('endAt')) @venue_name = attributes.dig('venueName') @venue_address = attributes.dig('venueAddress') end
Public Instance Methods
available_phases()
click to toggle source
# File lib/smash_ruby/tournament.rb, line 31 def available_phases @available_phases ||= fetch_phases end
fetch_complete_results_for_event(event)
click to toggle source
# File lib/smash_ruby/tournament.rb, line 82 def fetch_complete_results_for_event(event) players = [] available_phases.dig(event.to_sym).each do |phase| players << fetch_phase_results(event.to_sym, phase) end results = dedupe_and_combine_players(players) build_sets(results) results.values.sort_by(&:placement) end
fetch_phase_results(event, phase)
click to toggle source
# File lib/smash_ruby/tournament.rb, line 44 def fetch_phase_results(event, phase) get_id(event, phase.name).fmap do |id| players = [] if phase.pools.empty? url = "#{BASE_URL}/#{slug}/event/#{event}/phase_groups?expand[]=results&filter={\"phaseId\": \"#{id}\"}&getSingleBracket=true" players << get_player_results(url) else phase.pools.each do |pool| url = "#{BASE_URL}/#{slug}/event/#{event}/phase_groups?expand[]=results&filter={\"phaseId\": \"#{id}\", \"id\": \"#{pool.id}\"}&getSingleBracket=true" players << get_player_results(url) end end players.flatten end.value end
get_player_results(url)
click to toggle source
# File lib/smash_ruby/tournament.rb, line 61 def get_player_results(url) response = SmashRuby::Request.get(url, slug, 'tournament') response.fmap do |result| data = result.dig('items', 'entities') standings = data.dig('standings') entrants = data.dig('entrants') players = [] entrants.each do |e| standings.each do |s| if s.dig('id').include? e.dig('id').to_s players << SmashRuby::Player.new(s.merge(e)) end end end players end.value end
melee_results()
click to toggle source
# File lib/smash_ruby/tournament.rb, line 27 def melee_results @melee_singles_results ||= fetch_singles end
Private Instance Methods
build_sets(results)
click to toggle source
# File lib/smash_ruby/tournament.rb, line 149 def build_sets(results) @sets ||= SmashRuby::SetService.perform(results, slug) end
dedupe_and_combine_players(players)
click to toggle source
# File lib/smash_ruby/tournament.rb, line 133 def dedupe_and_combine_players(players) clean_players = {} players.flatten.each do |p| if clean_players[p.id].nil? clean_players[p.id] = p else clean_players[p.id].losses += p.losses clean_players[p.id].losses.flatten! end end @entrants = clean_players.size clean_players end
fetch_phases()
click to toggle source
# File lib/smash_ruby/tournament.rb, line 96 def fetch_phases { 'melee-singles': fetch_single_event('melee-singles'), 'melee-doubles': fetch_single_event('melee-doubles') } end
fetch_single_event(event)
click to toggle source
# File lib/smash_ruby/tournament.rb, line 103 def fetch_single_event(event) url = "#{BASE_URL}/#{slug}/event/#{event}?expand[]=phase&expand[]=groups" response = SmashRuby::Request.get(url, slug, 'tournament') response.fmap do |result| result.dig('entities', 'phase').map do |phase| groups = result.dig('entities', 'groups') built_phase = SmashRuby::Phase.new(phase) built_phase.build_pools(groups) built_phase end end.value end
get_id(event, phase)
click to toggle source
# File lib/smash_ruby/tournament.rb, line 117 def get_id(event, phase) fetched_phase = available_phases[event.to_sym].select { |p| p.name == phase }.first if fetched_phase.nil? M.Left( SmashRuby::Errors::ErrorHandler.build_error( 'phase', "Phase: #{phase} does not exist for #{event}", 404 ) ) else M.Right(fetched_phase.id) end end