Module: Jumbotron::Adapters::Espn::NflHelpers::Progress

Defined in:
app/adapters/jumbotron/adapters/espn/nfl_helpers/progress.rb

Constant Summary collapse

NIL_LIFECYCLES =
%w[scheduled postponed cancelled].freeze
INTERMISSION_PATTERN =
/halftime/i

Class Method Summary collapse

Class Method Details

.build(state:, kind:, number:, clock:) ⇒ Object



43
44
45
46
47
48
49
# File 'app/adapters/jumbotron/adapters/espn/nfl_helpers/progress.rb', line 43

def build(state:, kind:, number:, clock:)
  Canonical::GameProgress.new(
    state: state,
    segment: Canonical::GameSegment.new(kind: kind, number: number),
    clock: clock
  )
end

.call(status, lifecycle:) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
# File 'app/adapters/jumbotron/adapters/espn/nfl_helpers/progress.rb', line 13

def call(status, lifecycle:)
  return if NIL_LIFECYCLES.include?(lifecycle.to_s)
  return quarter_intermission if intermission?(status)

  period = status.period
  return if period.nil? || period < 1

  kind = period <= 4 ? "quarter" : "overtime"
  number = period <= 4 ? period : period - 4
  build(state: "active", kind: kind, number: number, clock: clock_for(status))
end

.clock_for(status) ⇒ Object



35
36
37
38
39
40
41
# File 'app/adapters/jumbotron/adapters/espn/nfl_helpers/progress.rb', line 35

def clock_for(status)
  seconds = status.clock.is_a?(Integer) ? status.clock : nil
  display = status.display_clock.presence
  return if seconds.nil? && display.nil?

  Canonical::GameClock.new(mode: "remaining", seconds: seconds, display: display)
end

.intermission?(status) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
29
# File 'app/adapters/jumbotron/adapters/espn/nfl_helpers/progress.rb', line 25

def intermission?(status)
  [status.type_name, status.type_description, status.type_detail, status.type_short_detail]
    .compact
    .any? { |value| INTERMISSION_PATTERN.match?(value) }
end

.quarter_intermissionObject



31
32
33
# File 'app/adapters/jumbotron/adapters/espn/nfl_helpers/progress.rb', line 31

def quarter_intermission
  build(state: "intermission", kind: "quarter", number: 2, clock: nil)
end