Class: Sportradar::Nba::Parsers::BoxscoreParser
- Inherits:
-
Object
- Object
- Sportradar::Nba::Parsers::BoxscoreParser
- Defined in:
- lib/sportradar/nba/parsers/boxscore_parser.rb
Instance Method Summary collapse
- #attendance ⇒ Object
- #away_team_id ⇒ Object
- #away_team_json ⇒ Object
- #away_team_outcome ⇒ Object
- #away_team_score ⇒ Object
- #away_team_scoring ⇒ Object
- #away_team_scoring_data ⇒ Object
- #away_team_scoring_quarters ⇒ Object
- #clock ⇒ Object
- #clock_attributes ⇒ Object
- #clock_secs ⇒ Object
- #duration ⇒ Object
- #duration_secs ⇒ Object
- #ended_at ⇒ Object (also: #completed)
- #game_attributes ⇒ Object
- #game_id ⇒ Object
- #game_scoring_attributes ⇒ Object
- #home_team_id ⇒ Object
- #home_team_json ⇒ Object
- #home_team_outcome ⇒ Object
- #home_team_score ⇒ Object
- #home_team_scoring ⇒ Object
- #home_team_scoring_data ⇒ Object
- #home_team_scoring_quarters ⇒ Object
-
#initialize(json: {}) ⇒ BoxscoreParser
constructor
A new instance of BoxscoreParser.
- #lead_changes ⇒ Object
- #over? ⇒ Boolean
- #period ⇒ Object
- #scheduled_at ⇒ Object (also: #started_at)
- #status ⇒ Object
- #team_scoring_quarters(data:) ⇒ Object
- #times_tied ⇒ Object
Constructor Details
#initialize(json: {}) ⇒ BoxscoreParser
Returns a new instance of BoxscoreParser.
5 6 7 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 5 def initialize(json: {}) @json = json['game'] || json end |
Instance Method Details
#attendance ⇒ Object
13 14 15 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 13 def attendance json['attendance'] end |
#away_team_id ⇒ Object
122 123 124 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 122 def away_team_id away_team_json['id'] end |
#away_team_json ⇒ Object
118 119 120 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 118 def away_team_json json['away'] || {} end |
#away_team_outcome ⇒ Object
200 201 202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 200 def away_team_outcome if over? if home_team_score < away_team_score 'win' elsif home_team_score > away_team_score 'loss' else 'tie' end else 'undecided' end end |
#away_team_score ⇒ Object
196 197 198 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 196 def away_team_score away_team_scoring[:points_scored_total] || 0 end |
#away_team_scoring ⇒ Object
130 131 132 133 134 135 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 130 def away_team_scoring { points_scored_total: away_team_json['points'], }.merge(away_team_scoring_quarters). compact end |
#away_team_scoring_data ⇒ Object
126 127 128 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 126 def away_team_scoring_data away_team_json['scoring'] || [] end |
#away_team_scoring_quarters ⇒ Object
137 138 139 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 137 def away_team_scoring_quarters team_scoring_quarters(data: away_team_scoring_data) end |
#clock ⇒ Object
49 50 51 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 49 def clock json['clock'] end |
#clock_attributes ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 53 def clock_attributes { clock: clock, clock_secs: clock_secs, duration: duration_secs, period: period, ended_at: ended_at, status: status, lead_changes: lead_changes, times_tied: times_tied, }.compact end |
#clock_secs ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 66 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 |
#duration ⇒ Object
79 80 81 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 79 def duration json['duration'] end |
#duration_secs ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 83 def duration_secs begin if duration && duration.include?(':') hours, mins = duration.split(':').map(&:to_i) Time.parse("#{hours}:#{mins}:00"). seconds_since_midnight.to_i end rescue => e return 0 end end |
#ended_at ⇒ Object Also known as: completed
26 27 28 29 30 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 26 def ended_at if over? scheduled_at + duration_secs.seconds end end |
#game_attributes ⇒ Object
214 215 216 217 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 214 def game_attributes clock_attributes.merge(game_scoring_attributes). compact end |
#game_id ⇒ Object
9 10 11 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 9 def game_id json['id'] end |
#game_scoring_attributes ⇒ Object
168 169 170 171 172 173 174 175 176 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 168 def game_scoring_attributes { attendance: attendance, home_team_outcome: home_team_outcome, home_team_score: home_team_score, away_team_outcome: away_team_outcome, away_team_score: away_team_score, } end |
#home_team_id ⇒ Object
99 100 101 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 99 def home_team_id home_team_json['id'] end |
#home_team_json ⇒ Object
95 96 97 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 95 def home_team_json json['home'] || {} end |
#home_team_outcome ⇒ Object
182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 182 def home_team_outcome if over? if home_team_score > away_team_score 'win' elsif home_team_score < away_team_score 'loss' else 'tie' end else 'undecided' end end |
#home_team_score ⇒ Object
178 179 180 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 178 def home_team_score home_team_scoring[:points_scored_total] || 0 end |
#home_team_scoring ⇒ Object
107 108 109 110 111 112 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 107 def home_team_scoring { points_scored_total: home_team_json['points'], }.merge(home_team_scoring_quarters). compact end |
#home_team_scoring_data ⇒ Object
103 104 105 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 103 def home_team_scoring_data home_team_json['scoring'] || [] end |
#home_team_scoring_quarters ⇒ Object
114 115 116 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 114 def home_team_scoring_quarters team_scoring_quarters(data: home_team_scoring_data) end |
#lead_changes ⇒ Object
41 42 43 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 41 def lead_changes json['lead_changes'] || 0 end |
#over? ⇒ Boolean
33 34 35 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 33 def over? status == 'closed' end |
#period ⇒ Object
17 18 19 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 17 def period json['quarter'].to_i end |
#scheduled_at ⇒ Object Also known as: started_at
21 22 23 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 21 def scheduled_at json['scheduled'] && json['scheduled'].to_datetime end |
#status ⇒ Object
37 38 39 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 37 def status json['status'] end |
#team_scoring_quarters(data:) ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 141 def team_scoring_quarters(data:) {}.tap do |scoring_quarters| overtime_points = 0 scoring_quarters[:points_overtime] = overtime_points data.map do |scoring_data| if quarter = scoring_data['sequence'].to_i if quarter > 0 && quarter <= 4 key = "points_quarter_#{quarter}".to_sym scoring_quarters[key] = scoring_data['points'].to_i elsif quarter > 4 quarter_type = (scoring_data['type'] || 'quarter').downcase if quarter_type == 'overtime' key = "points_#{quarter_type}_#{scoring_data['number'].to_i}".to_sym scoring_quarters[key] = scoring_data['points'].to_i overtime_points += scoring_data['points'].to_i scoring_quarters[:points_overtime] = overtime_points end end end end scoring_quarters[:points_overtime] = overtime_points end end |
#times_tied ⇒ Object
45 46 47 |
# File 'lib/sportradar/nba/parsers/boxscore_parser.rb', line 45 def times_tied json['times_tied'] || 0 end |