Class: Jumbotron::Providers::Espn::Resources::Scoreboard

Inherits:
Object
  • Object
show all
Defined in:
app/providers/jumbotron/providers/espn/resources/scoreboard.rb

Constant Summary collapse

DISCOVERY_SEASON_TYPES =
[1, 2, 3].freeze

Class Method Summary collapse

Class Method Details

.acquire(adapter:, **query) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/providers/jumbotron/providers/espn/resources/scoreboard.rb', line 10

def self.acquire(adapter:, **query)
  cooldown = Cooldown.new
  return CommandTower::Clients::ClientResult.failure(error: CooldownActiveError.new) if cooldown.cooling_down?

  result = Jumbotron::Clients.espn.scoreboard.get(
    sport: adapter.sport,
    league: adapter.league,
    **query
  )
  if result.success?
    cooldown.record_success!
  else
    cooldown.record_failure!(result.error)
  end
  result
end

.acquire_full_season(adapter:, season_year:) ⇒ Object

ESPN year-only and phase-only scoreboards are capped (~100 events) and do not isolate a season. Full-season discovery expands leagues.calendar into dates + seasontype + week requests, then concatenates unique events.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/providers/jumbotron/providers/espn/resources/scoreboard.rb', line 30

def self.acquire_full_season(adapter:, season_year:)
  year = Integer(season_year)
  seed = acquire(adapter: adapter, dates: year)
  return seed unless seed.success?

  requests = discovery_requests(year, seed.output.season_calendar)
  return unavailable_calendar(year) if requests.empty?

  events_by_id = {}
  requests.each do |query|
    result = acquire(adapter: adapter, **query)
    return result unless result.success?

    Array(result.output.events).each do |event|
      events_by_id[event.id] ||= event
    end
  end

  CommandTower::Clients::ClientResult.success(
    output: Jumbotron::Deserializers::Clients::Espn::Scoreboard::Get::Result.build!(
      events: events_by_id.values,
      season_calendar: seed.output.season_calendar
    )
  )
end

.expand_full_season(adapter:, season_year:) ⇒ Object



56
57
58
59
60
61
62
63
64
65
# File 'app/providers/jumbotron/providers/espn/resources/scoreboard.rb', line 56

def self.expand_full_season(adapter:, season_year:)
  year = Integer(season_year)
  seed = acquire(adapter: adapter, dates: year)
  return seed unless seed.success?

  requests = discovery_requests(year, seed.output.season_calendar)
  return unavailable_calendar(year) if requests.empty?

  CommandTower::Clients::ClientResult.success(output: requests)
end