lib/sportradar/api/football/drive.rb
module Sportradar
module Api
module Football
class Drive < Data
attr_accessor :response, :api, :id, :sequence, :start_reason, :end_reason, :play_count, :duration, :first_downs, :gain, :penalty_yards, :scoring_drive, :quarter, :team
def self.new(data, **opts)
if data['type'] == 'event'
Event.new(data, **opts)
else
super
end
end
def initialize(data, **opts)
@id = data["id"]
@api = opts[:api]
@plays_hash = {}
@events_hash = {}
update(data, **opts)
end
def update(data, **opts)
@response = data
@type = data['type']
@team = data['team']
@clock = data['clock']
@overtime = !!opts[:quarter]&.overtime? || @overtime
@sequence = data["sequence"]
@start_reason = data["start_reason"]
@end_reason = data["end_reason"]
@play_count = data["play_count"]
@duration = data["duration"]
@first_downs = data["first_downs"]
@gain = data["gain"]
@penalty_yards = data["penalty_yards"]
@scoring_drive = data["scoring_drive"]
@quarter_data = data['quarter']
@team_data = data['team']
handle_plays_and_events(data, **opts)
self
end
def overtime?
@overtime
end
def halftime?
self.end_reason == 'End of Half'
end
def plays
@plays_hash.values
end
def events
@events_hash.values
end
def over?
end_reason != 'UNKNOWN' && !end_reason.nil? # && !plays.last.parsed_ending # FIXME - maybe fix this. sim games have inconsistent data
end
def end_reason_possibilities
[
'UNKNOWN',
'Touchdown',
'Safety',
'Field Goal',
'Missed FG',
'Blocked FG',
'Blocked FG, Downs',
'Blocked FG, Safety',
'Punt',
'Blocked Punt',
'Blocked Punt, Downs',
'Blocked Punt, Safety',
'Downs',
'Interception',
'Fumble',
'Fumble, Safety',
'Muffed FG',
'Muffed Punt',
'Muffed Kickoff',
'Kickoff',
'Own Kickoff',
'Onside Kick',
'Kickoff, No Play',
'End of Half',
'End of Game',
]
end
def normalized_end_reason
case end_reason
when 'Touchdown', :pat
'Touchdown'
when 'Field Goal', 'Missed FG', "Blocked FG, Downs", 'Muffed FG', :fg
'Field Goal'
when 'Downs'
'Downs'
when 'Interception', 'Fumble', :fumble, :interception
'Turnover'
when 'Punt', 'Blocked Punt, Downs', 'Blocked Punt, Safety', :punt
'Punt'
when 'End of Half', :end_of_half
'End of Half'
when 'End of Game', :end_of_game
'End of Game'
when 'Safety', 'Blocked FG, Safety'
'Safety'
else
'Other'
end
end
end
end
end
end