Class: Sportradar::Nfl::Parsers::BoxscoreParser

Inherits:
Object
  • Object
show all
Defined in:
lib/sportradar/nfl/parsers/boxscore_parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(json: {}) ⇒ BoxscoreParser

Returns a new instance of BoxscoreParser.



5
6
7
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 5

def initialize(json: {})
  @json = json['game'] || json
end

Instance Method Details

#away_team_idObject



81
82
83
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 81

def away_team_id
  away_team_json['id']
end

#away_team_jsonObject



77
78
79
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 77

def away_team_json
  json['away_team'] || {}
end

#away_team_scoringObject



89
90
91
92
93
94
95
96
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 89

def away_team_scoring
  {
    points: away_team_json['points'],
    remaining_challenges: away_team_json['remaining_challenges'],
    remaining_timeouts: away_team_json['remaining_timeouts'],
  }.merge(away_team_scoring_quarters).
    compact
end

#away_team_scoring_dataObject



85
86
87
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 85

def away_team_scoring_data
  away_team_json['scoring'] || {}
end

#away_team_scoring_quartersObject



98
99
100
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 98

def away_team_scoring_quarters
  team_scoring_quarters(data: away_team_scoring_data)
end

#clockObject



17
18
19
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 17

def clock
  json['clock']
end

#clock_attributesObject



29
30
31
32
33
34
35
36
37
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 29

def clock_attributes
  {
    clock: clock,
    clock_secs: clock_secs,
    period: quarter,
    ended_at: completed,
    status: status,
  }.compact
end

#clock_secsObject



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 39

def clock_secs
  begin
    if clock && clock.include?(':')
      mins, secs = clock.split(':').map(&:to_i)
      Time.parse("00:#{mins}:#{secs}").
         seconds_since_midnight.to_i
    end
  rescue => e
    puts e
    return 0
  end
end

#completedObject



21
22
23
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 21

def completed
  json['completed'] && json['completed'].to_datetime
end

#game_idObject



9
10
11
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 9

def game_id
  json['id']
end

#home_team_idObject



56
57
58
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 56

def home_team_id
  home_team_json['id']
end

#home_team_jsonObject



52
53
54
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 52

def home_team_json
  json['home_team'] || {}
end

#home_team_scoringObject



64
65
66
67
68
69
70
71
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 64

def home_team_scoring
  {
    points: home_team_json['points'],
    remaining_challenges: home_team_json['remaining_challenges'],
    remaining_timeouts: home_team_json['remaining_timeouts'],
  }.merge(home_team_scoring_quarters).
    compact
end

#home_team_scoring_dataObject



60
61
62
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 60

def home_team_scoring_data
  home_team_json['scoring'] || {}
end

#home_team_scoring_quartersObject



73
74
75
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 73

def home_team_scoring_quarters
  team_scoring_quarters(data: home_team_scoring_data)
end

#quarterObject



13
14
15
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 13

def quarter
  json['quarter'].to_i
end

#statusObject



25
26
27
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 25

def status
  json['status']
end

#team_scoring_quarters(data:) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/sportradar/nfl/parsers/boxscore_parser.rb', line 102

def team_scoring_quarters(data:)
  {}.tap do |scoring_quarters|
    overtime_points = 0
    data.map do |scoring_data|
      if quarter = scoring_data['quarter'].to_i
        if quarter > 0 && quarter <= 4
          key = "points_quarter_#{quarter}".to_sym
          scoring_quarters[key] =
            scoring_data['points'].to_i
        elsif quarter > 4
          key = "points_overtime_#{quarter - 4}".to_sym
          scoring_quarters[key] =
            scoring_data['points'].to_i
          overtime_points += scoring_data['points'].to_i
        end
      end
    end
    scoring_quarters[:points_overtime] = overtime_points
  end
end