sportradar-api 0.10.55 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +28 -26
- data/README.md +7 -6
- data/lib/sportradar/api/baseball/{REAME.md → README.md} +0 -0
- data/lib/sportradar/api/baseball/game.rb +29 -2
- data/lib/sportradar/api/baseball/mlb/hierarchy.rb +1 -0
- data/lib/sportradar/api/baseball/record.rb +0 -4
- data/lib/sportradar/api/baseball/venue.rb +2 -1
- data/lib/sportradar/api/basketball/game.rb +2 -2
- data/lib/sportradar/api/basketball/record.rb +0 -4
- data/lib/sportradar/api/basketball/venue.rb +2 -1
- data/lib/sportradar/api/data.rb +3 -3
- data/lib/sportradar/api/football/README.md +62 -0
- data/lib/sportradar/api/football/drive.rb +105 -0
- data/lib/sportradar/api/football/event.rb +33 -0
- data/lib/sportradar/api/football/game.rb +389 -0
- data/lib/sportradar/api/football/game_stats.rb +135 -0
- data/lib/sportradar/api/football/ncaafb/api.rb +76 -0
- data/lib/sportradar/api/football/ncaafb/conference.rb +53 -0
- data/lib/sportradar/api/football/ncaafb/division.rb +42 -0
- data/lib/sportradar/api/football/ncaafb/drive.rb +16 -0
- data/lib/sportradar/api/football/ncaafb/game.rb +110 -0
- data/lib/sportradar/api/football/ncaafb/play.rb +20 -0
- data/lib/sportradar/api/football/ncaafb/player.rb +31 -0
- data/lib/sportradar/api/football/ncaafb/quarter.rb +15 -0
- data/lib/sportradar/api/football/ncaafb/subdivision.rb +43 -0
- data/lib/sportradar/api/football/ncaafb/team.rb +45 -0
- data/lib/sportradar/api/football/ncaafb/week.rb +24 -0
- data/lib/sportradar/api/football/ncaafb.rb +273 -0
- data/lib/sportradar/api/football/nfl/api.rb +76 -0
- data/lib/sportradar/api/football/nfl/conference.rb +35 -0
- data/lib/sportradar/api/football/nfl/division.rb +37 -0
- data/lib/sportradar/api/football/nfl/drive.rb +19 -0
- data/lib/sportradar/api/football/nfl/event.rb +19 -0
- data/lib/sportradar/api/football/nfl/game.rb +77 -0
- data/lib/sportradar/api/football/nfl/play.rb +20 -0
- data/lib/sportradar/api/football/nfl/player.rb +31 -0
- data/lib/sportradar/api/football/nfl/quarter.rb +15 -0
- data/lib/sportradar/api/football/nfl/team.rb +42 -0
- data/lib/sportradar/api/football/nfl/week.rb +24 -0
- data/lib/sportradar/api/football/nfl.rb +293 -0
- data/lib/sportradar/api/football/play.rb +93 -0
- data/lib/sportradar/api/football/player.rb +111 -0
- data/lib/sportradar/api/football/quarter.rb +42 -0
- data/lib/sportradar/api/football/record.rb +48 -0
- data/lib/sportradar/api/football/scoring.rb +92 -0
- data/lib/sportradar/api/football/situation.rb +20 -0
- data/lib/sportradar/api/football/stat_pack/defense.rb +20 -20
- data/lib/sportradar/api/football/stat_pack/extra_points.rb +5 -4
- data/lib/sportradar/api/football/stat_pack/field_goals.rb +6 -5
- data/lib/sportradar/api/football/stat_pack/fumbles.rb +11 -9
- data/lib/sportradar/api/football/stat_pack/kick_returns.rb +8 -7
- data/lib/sportradar/api/football/stat_pack/kickoffs.rb +9 -7
- data/lib/sportradar/api/football/stat_pack/misc_returns.rb +1 -1
- data/lib/sportradar/api/football/stat_pack/passing.rb +13 -11
- data/lib/sportradar/api/football/stat_pack/penalties.rb +2 -2
- data/lib/sportradar/api/football/stat_pack/punt_returns.rb +7 -6
- data/lib/sportradar/api/football/stat_pack/punts.rb +12 -10
- data/lib/sportradar/api/football/stat_pack/receiving.rb +10 -9
- data/lib/sportradar/api/football/stat_pack/rushing.rb +11 -9
- data/lib/sportradar/api/football/stat_pack.rb +7 -3
- data/lib/sportradar/api/football/team.rb +160 -0
- data/lib/sportradar/api/football/venue.rb +25 -0
- data/lib/sportradar/api/football/week.rb +57 -0
- data/lib/sportradar/api/football.rb +43 -0
- data/lib/sportradar/api/mma/venue.rb +1 -1
- data/lib/sportradar/api/request.rb +19 -2
- data/lib/sportradar/api/version.rb +1 -1
- data/lib/sportradar/api.rb +0 -41
- metadata +41 -43
- data/lib/sportradar/api/ncaafb/drive.rb +0 -89
- data/lib/sportradar/api/ncaafb/game.rb +0 -161
- data/lib/sportradar/api/ncaafb/play.rb +0 -39
- data/lib/sportradar/api/ncaafb/player.rb +0 -61
- data/lib/sportradar/api/ncaafb/quarter.rb +0 -37
- data/lib/sportradar/api/ncaafb/season.rb +0 -71
- data/lib/sportradar/api/ncaafb/team.rb +0 -69
- data/lib/sportradar/api/ncaafb/week.rb +0 -33
- data/lib/sportradar/api/ncaafb.rb +0 -185
- data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
- data/lib/sportradar/api/nfl/broadcast.rb +0 -13
- data/lib/sportradar/api/nfl/changelog.rb +0 -17
- data/lib/sportradar/api/nfl/coach.rb +0 -17
- data/lib/sportradar/api/nfl/conference.rb +0 -17
- data/lib/sportradar/api/nfl/depth_chart.rb +0 -47
- data/lib/sportradar/api/nfl/division.rb +0 -16
- data/lib/sportradar/api/nfl/draft.rb +0 -16
- data/lib/sportradar/api/nfl/drive.rb +0 -73
- data/lib/sportradar/api/nfl/event.rb +0 -19
- data/lib/sportradar/api/nfl/franchise.rb +0 -14
- data/lib/sportradar/api/nfl/game.rb +0 -123
- data/lib/sportradar/api/nfl/game_statistic.rb +0 -133
- data/lib/sportradar/api/nfl/hierarchy.rb +0 -19
- data/lib/sportradar/api/nfl/injury.rb +0 -16
- data/lib/sportradar/api/nfl/league_depth_chart.rb +0 -26
- data/lib/sportradar/api/nfl/play.rb +0 -39
- data/lib/sportradar/api/nfl/play_statistics.rb +0 -249
- data/lib/sportradar/api/nfl/player.rb +0 -56
- data/lib/sportradar/api/nfl/position.rb +0 -14
- data/lib/sportradar/api/nfl/quarter.rb +0 -29
- data/lib/sportradar/api/nfl/scoring.rb +0 -25
- data/lib/sportradar/api/nfl/season.rb +0 -23
- data/lib/sportradar/api/nfl/situation.rb +0 -18
- data/lib/sportradar/api/nfl/statistic.rb +0 -28
- data/lib/sportradar/api/nfl/summary.rb +0 -17
- data/lib/sportradar/api/nfl/team.rb +0 -56
- data/lib/sportradar/api/nfl/team_depth_chart.rb +0 -44
- data/lib/sportradar/api/nfl/venue.rb +0 -22
- data/lib/sportradar/api/nfl/week.rb +0 -16
- data/lib/sportradar/api/nfl.rb +0 -211
@@ -1,17 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Changelog < Data
|
4
|
-
attr_accessor :response, :start_time, :end_time, :players, :games
|
5
|
-
|
6
|
-
def initialize(data)
|
7
|
-
@response = data
|
8
|
-
@start_time = data["start_time"]
|
9
|
-
@end_time = data["end_time"]
|
10
|
-
@games = parse_into_array(selector: response["game"], klass: Sportradar::Api::Nfl::Game) if response["game"]
|
11
|
-
@players = parse_into_array(selector: response["profiles"]["players"]["player"], klass: Sportradar::Api::Nfl::Player) if response["profiles"] && response["profiles"]["players"] && response["profiles"]["players"]["player"]
|
12
|
-
end
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Coach < Data
|
4
|
-
attr_accessor :response, :id, :full_name, :first_name, :last_name, :position
|
5
|
-
|
6
|
-
def initialize(data)
|
7
|
-
@response = data
|
8
|
-
@id = data["id"]
|
9
|
-
@full_name = data["full_name"]
|
10
|
-
@first_name = data["first_name"]
|
11
|
-
@last_name = data["last_name"]
|
12
|
-
@position = data["position"]
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Conference < Data
|
4
|
-
attr_accessor :response, :id, :name, :alias, :divisions
|
5
|
-
|
6
|
-
def initialize(data, **opts)
|
7
|
-
@response = data
|
8
|
-
@api = opts[:api]
|
9
|
-
@id = data["id"]
|
10
|
-
@name = data["name"]
|
11
|
-
@alias = data["alias"]
|
12
|
-
@divisions = parse_into_array(selector: response["division"], klass: Sportradar::Api::Nfl::Division) if response["division"]
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::DepthChart < Data
|
4
|
-
include Enumerable
|
5
|
-
attr_accessor :response, :chart
|
6
|
-
|
7
|
-
def initialize(data)
|
8
|
-
generate_chart(data)
|
9
|
-
end
|
10
|
-
|
11
|
-
def team(number)
|
12
|
-
teams[number]
|
13
|
-
end
|
14
|
-
|
15
|
-
def each
|
16
|
-
populate_teams
|
17
|
-
teams.each { |team| yield team }
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def teams
|
23
|
-
@teams ||= populate_teams
|
24
|
-
end
|
25
|
-
|
26
|
-
def populate_teams
|
27
|
-
(1..3).each_with_object({}) do |i, hash|
|
28
|
-
hash[i] = generate_team(i)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def generate_team(number)
|
33
|
-
@chart.each_with_object({}) do |(pos_name, groups), memo|
|
34
|
-
memo[pos_name] = groups[number.to_s]
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def generate_chart(data)
|
39
|
-
@chart = data['position'].each_with_object({}) do |position, memo|
|
40
|
-
players = position['player'].map { |h| Sportradar::Api::Nfl::Player.new(h) }
|
41
|
-
memo[position['name']] = players.group_by(&:depth)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Division < Data
|
4
|
-
attr_accessor :response, :id, :name, :alias, :teams
|
5
|
-
|
6
|
-
def initialize(data)
|
7
|
-
@response = data
|
8
|
-
@id = data["id"]
|
9
|
-
@name = data["name"]
|
10
|
-
@alias = data["alias"]
|
11
|
-
@teams = parse_into_array(selector: response["team"], klass: Sportradar::Api::Nfl::Team) if response["team"]
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Draft < Data
|
4
|
-
attr_accessor :response, :year, :round, :number, :team
|
5
|
-
|
6
|
-
def initialize(data)
|
7
|
-
@response = data
|
8
|
-
@year = data["year"]
|
9
|
-
@round = data["round"]
|
10
|
-
@number = data["number"]
|
11
|
-
@team = Sportradar::Api::Nfl::Team.new data["team"] if data["team"]
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Drive < Data
|
4
|
-
attr_accessor :response, :id, :sequence, :start_reason, :end_reason, :play_count, :duration, :first_downs, :gain, :penalty_yards, :scoring_drive, :quarter, :team, :plays, :events
|
5
|
-
|
6
|
-
def initialize(data)
|
7
|
-
@response = data
|
8
|
-
@id = data["id"]
|
9
|
-
@sequence = data["sequence"]
|
10
|
-
@start_reason = data["start_reason"]
|
11
|
-
@end_reason = data["end_reason"]
|
12
|
-
@play_count = data["play_count"]
|
13
|
-
@duration = data["duration"]
|
14
|
-
@first_downs = data["first_downs"]
|
15
|
-
@gain = data["gain"]
|
16
|
-
@penalty_yards = data["penalty_yards"]
|
17
|
-
@scoring_drive = data["scoring_drive"]
|
18
|
-
@quarter = Sportradar::Api::Nfl::Quarter.new data["quarter"] if data["quarter"]
|
19
|
-
@team = Sportradar::Api::Nfl::Team.new data["team"] if data["team"]
|
20
|
-
@plays = parse_into_array(selector: response["play"], klass: Sportradar::Api::Nfl::Play) if response["play"]
|
21
|
-
@plays ||= parse_into_array(selector: response["plays"]["play"], klass: Sportradar::Api::Nfl::Play) if response["plays"] && response["plays"]["play"]
|
22
|
-
@events = parse_into_array(selector: response["event"], klass: Sportradar::Api::Nfl::Event) if response["event"]
|
23
|
-
end
|
24
|
-
|
25
|
-
def end_reason_possibilities
|
26
|
-
[
|
27
|
-
'UNKNOWN',
|
28
|
-
'Touchdown',
|
29
|
-
'Safety',
|
30
|
-
'Field Goal',
|
31
|
-
'Missed FG',
|
32
|
-
'Blocked FG',
|
33
|
-
'Blocked FG, Downs',
|
34
|
-
'Blocked FG, Safety',
|
35
|
-
'Punt',
|
36
|
-
'Blocked Punt',
|
37
|
-
'Blocked Punt, Downs',
|
38
|
-
'Blocked Punt, Safety',
|
39
|
-
'Downs',
|
40
|
-
'Interception',
|
41
|
-
'Fumble',
|
42
|
-
'Fumble, Safety',
|
43
|
-
'Muffed FG',
|
44
|
-
'Muffed Punt',
|
45
|
-
'Muffed Kickoff',
|
46
|
-
'Kickoff',
|
47
|
-
'Own Kickoff',
|
48
|
-
'Onside Kick',
|
49
|
-
'Kickoff, No Play',
|
50
|
-
'End of Half',
|
51
|
-
'End of Game',
|
52
|
-
]
|
53
|
-
end
|
54
|
-
def normalized_end_reason
|
55
|
-
case end_reason
|
56
|
-
when 'Touchdown'
|
57
|
-
'Touchdown'
|
58
|
-
when 'Field Goal', 'Missed FG', "Blocked FG, Downs", 'Muffed FG', 'Blocked FG, Safety'
|
59
|
-
'Field Goal'
|
60
|
-
when 'Downs'
|
61
|
-
'Downs'
|
62
|
-
when 'Interception', 'Fumble'
|
63
|
-
'Turnover'
|
64
|
-
when 'Punt'
|
65
|
-
'Punt'
|
66
|
-
else
|
67
|
-
'Other'
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Event < Data
|
4
|
-
attr_accessor :response, :id, :sequence, :reference, :clock, :type, :description, :alt_description
|
5
|
-
|
6
|
-
def initialize(data)
|
7
|
-
@response = data
|
8
|
-
@id = data["id"]
|
9
|
-
@sequence = data["sequence"]
|
10
|
-
@reference = data["reference"]
|
11
|
-
@clock = data["clock"]
|
12
|
-
@type = data["type"]
|
13
|
-
@description = data["description"]
|
14
|
-
@alt_description = data["alt_description"]
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,123 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Game < Data
|
4
|
-
attr_accessor :response, :id, :status, :reference, :number, :scheduled, :entry_mode, :venue, :home, :away, :broadcast, :number, :attendance, :utc_offset, :weather, :clock, :quarter, :summary, :situation, :last_event, :scoring, :scoring_drives, :quarters, :stats, :week, :season, :overtime
|
5
|
-
|
6
|
-
def initialize(data)
|
7
|
-
@response = data
|
8
|
-
@id = data["id"]
|
9
|
-
|
10
|
-
@status = data["status"]
|
11
|
-
@reference = data["reference"]
|
12
|
-
@number = data["number"]
|
13
|
-
@scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
|
14
|
-
@week = Sportradar::Api::Nfl::Week.new data.dig("summary", "week") if data.dig("summary", "week")
|
15
|
-
@season = Sportradar::Api::Nfl::Season.new data.dig("summary", "season") if data.dig("summary", "season")
|
16
|
-
@entry_mode = data["entry_mode"]
|
17
|
-
|
18
|
-
# game boxscore
|
19
|
-
@number = data["number"]
|
20
|
-
@attendance = data["attendance"]
|
21
|
-
@utc_offset = data["utc_offset"]
|
22
|
-
@weather = data["weather"]
|
23
|
-
@clock = data["clock"]
|
24
|
-
|
25
|
-
if data["quarter"]
|
26
|
-
@quarter = data["quarter"][0]
|
27
|
-
quarter_data = data["quarter"][1].is_a?(Hash) ? data["quarter"][1..-1] : data["quarter"][1]
|
28
|
-
@quarters = quarter_data&.map { |hash| Sportradar::Api::Nfl::Quarter.new(hash) }
|
29
|
-
end
|
30
|
-
|
31
|
-
if data["overtime"]
|
32
|
-
@overtime = parse_into_array(selector: data['overtime'], klass: Sportradar::Api::Nfl::Quarter)
|
33
|
-
@quarters.concat(@overtime)
|
34
|
-
end
|
35
|
-
|
36
|
-
@summary = Sportradar::Api::Nfl::Summary.new data["summary"] if data["summary"]
|
37
|
-
@situation = Sportradar::Api::Nfl::Situation.new data["situation"] if data["situation"]
|
38
|
-
@last_event = Sportradar::Api::Nfl::Event.new data["last_event"]["event"] if data["last_event"] && data["last_event"]["event"]
|
39
|
-
@scoring = Sportradar::Api::Nfl::Scoring.new data["scoring"] if data["scoring"]
|
40
|
-
|
41
|
-
@scoring_drives = parse_into_array(selector: response["scoring_drives"]["drive"], klass: Sportradar::Api::Nfl::Drive) if response["scoring_drives"] && response["scoring_drives"]["drive"]
|
42
|
-
|
43
|
-
location = data["summary"] || data
|
44
|
-
@venue = Sportradar::Api::Nfl::Venue.new data["venue"] || location["venue"] if data["venue"] || location["venue"]
|
45
|
-
@home = Sportradar::Api::Nfl::Team.new data["home"] || location["home"] if data["home"] || location["home"]
|
46
|
-
@away = Sportradar::Api::Nfl::Team.new data["away"] || location["away"] if data["away"] || location["away"]
|
47
|
-
|
48
|
-
@broadcast = Sportradar::Api::Nfl::Broadcast.new data["broadcast"] if data["broadcast"]
|
49
|
-
|
50
|
-
if data["team"]
|
51
|
-
@stats = data["team"].map { |team_stat| [team_stat["id"], Sportradar::Api::Nfl::GameStatistic.new(team_stat)] }.to_h
|
52
|
-
@home.stats = @stats[@home.id]
|
53
|
-
@away.stats = @stats[@away.id]
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
|
58
|
-
def overtime?
|
59
|
-
!overtime.nil?
|
60
|
-
end
|
61
|
-
|
62
|
-
def full_name
|
63
|
-
"#{away.full_name} vs #{home.full_name}"
|
64
|
-
end
|
65
|
-
|
66
|
-
def name
|
67
|
-
"#{away.name} vs #{home.name}"
|
68
|
-
end
|
69
|
-
def started?
|
70
|
-
['inprogress', 'halftime', 'delayed'].include?(status)
|
71
|
-
end
|
72
|
-
def finished?
|
73
|
-
status == "closed"
|
74
|
-
end
|
75
|
-
|
76
|
-
def sport_league
|
77
|
-
'NFL'.freeze
|
78
|
-
end
|
79
|
-
|
80
|
-
def current_score
|
81
|
-
"#{summary.home.points}-#{summary.away.points}" if summary
|
82
|
-
end
|
83
|
-
|
84
|
-
def drives
|
85
|
-
@drives ||= begin
|
86
|
-
drives = Array(quarters&.flat_map(&:drives)).compact
|
87
|
-
# Scan for duplicates
|
88
|
-
drives.each_cons(2) do |a,b|
|
89
|
-
# Merge plays and events into the first if duplicate and flag dup for removal
|
90
|
-
if a.id == b.id
|
91
|
-
Array(a.plays).concat(b.plays)
|
92
|
-
Array(a.events).concat(Array(b.events)).uniq!
|
93
|
-
b.id = nil
|
94
|
-
end
|
95
|
-
end
|
96
|
-
# Remove the dup
|
97
|
-
drives.delete_if{ |d| d.id.nil? }
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def plays
|
102
|
-
Array(drives&.flat_map(&:plays)).compact
|
103
|
-
end
|
104
|
-
|
105
|
-
def status_description
|
106
|
-
status_description = {
|
107
|
-
"scheduled" => "The game is currently scheduled to occur.",
|
108
|
-
"inprogress" => "The game is currently in progress.",
|
109
|
-
"halftime" => "The game is currently at the half.",
|
110
|
-
"complete" => "The game is over, but the statistics validation process has not been completed.",
|
111
|
-
"closed" => "The game is over and the game statistics have been validated.",
|
112
|
-
"cancelled" => "The game has been cancelled.",
|
113
|
-
"postponed" => "The scheduled game has been postponed for some reason.",
|
114
|
-
"delayed" => "The scheduled game, or a game that was in progress, is now delayed for some reason.",
|
115
|
-
"flex-schedule" => "The game is currently scheduled to occur on a specific date and time, however, it will more than likely be moved to a different time for broadcast purposes.",
|
116
|
-
"time-tbd" => "The game is scheduled to occur, the date is known, but the start time has not been determined.",
|
117
|
-
}
|
118
|
-
status_descriptions[status] if status
|
119
|
-
end
|
120
|
-
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
@@ -1,133 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::GameStatistic < Data
|
4
|
-
attr_accessor :response, :id, :efficiency, :first_downs, :interceptions, :touchdowns, :name, :market, :alias, :reference, :possession_time, :avg_gain, :safeties, :turnovers, :play_count, :rush_plays, :total_yards, :lost_fumbles, :penalty_yards, :return_yards
|
5
|
-
|
6
|
-
# attr_writer :rushing, :receiving, :punts, :punt_returns, :penalties, :passing, :misc_returns, :kickoffs, :kick_returns, :int_returns, :fumbles, :field_goals, :extra_points, :defense # probably not necessary, but leaving here in case we want it later
|
7
|
-
|
8
|
-
def initialize(data)
|
9
|
-
@response = data
|
10
|
-
@id = data["id"]
|
11
|
-
@name = data["name"]
|
12
|
-
@market = data["market"]
|
13
|
-
@alias = data["alias"]
|
14
|
-
@reference = data["reference"]
|
15
|
-
@efficiency = data["efficiency"]
|
16
|
-
@first_downs = data["first_downs"]
|
17
|
-
@interceptions = data["interceptions"]
|
18
|
-
@touchdowns = data["touchdowns"]
|
19
|
-
@possession_time = data["possession_time"]
|
20
|
-
@avg_gain = data["avg_gain"]
|
21
|
-
@safeties = data["safeties"]
|
22
|
-
@turnovers = data["turnovers"]
|
23
|
-
@play_count = data["play_count"]
|
24
|
-
@rush_plays = data["rush_plays"]
|
25
|
-
@total_yards = data["total_yards"]
|
26
|
-
@lost_fumbles = data["lost_fumbles"]
|
27
|
-
@penalty_yards = data["penalty_yards"]
|
28
|
-
@return_yards = data["return_yards"]
|
29
|
-
end
|
30
|
-
|
31
|
-
# :skip_test_coverage:
|
32
|
-
# These are in methods rather than attributes to use them lazily. Each one is tested in it's respective class
|
33
|
-
def rushing
|
34
|
-
if response["rushing"]
|
35
|
-
response["rushing"] = parse_out_hashes response["rushing"]
|
36
|
-
@rushing ||= Sportradar::Api::Football::StatPack::Rushing.new(response["rushing"])
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def receiving
|
41
|
-
if response["receiving"]
|
42
|
-
response["receiving"] = parse_out_hashes response["receiving"]
|
43
|
-
@receiving ||= Sportradar::Api::Football::StatPack::Receiving.new(response["receiving"])
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def punts
|
48
|
-
if response["punts"]
|
49
|
-
response["punts"] = parse_out_hashes response["punts"]
|
50
|
-
@punts ||= Sportradar::Api::Football::StatPack::Punts.new(response["punts"])
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def punt_returns
|
55
|
-
if response["punt_returns"]
|
56
|
-
response["punt_returns"] = parse_out_hashes response["punt_returns"]
|
57
|
-
@punt_returns ||= Sportradar::Api::Football::StatPack::PuntReturns.new(response["punt_returns"])
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def penalties
|
62
|
-
if response["penalties"]
|
63
|
-
response["penalties"] = parse_out_hashes response["penalties"]
|
64
|
-
@penalties ||= Sportradar::Api::Football::StatPack::Penalties.new(response["penalties"])
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def passing
|
69
|
-
if response["passing"]
|
70
|
-
response["passing"] = parse_out_hashes response["passing"]
|
71
|
-
@passing ||= Sportradar::Api::Football::StatPack::Passing.new(response["passing"])
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def misc_returns
|
76
|
-
if response["misc_returns"]
|
77
|
-
response["misc_returns"] = parse_out_hashes response["misc_returns"]
|
78
|
-
@misc_returns ||= Sportradar::Api::Football::StatPack::MiscReturns.new(response["misc_returns"])
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def kickoffs
|
83
|
-
if response["kickoffs"]
|
84
|
-
response["kickoffs"] = parse_out_hashes response["kickoffs"]
|
85
|
-
@kickoffs ||= Sportradar::Api::Football::StatPack::Kickoffs.new(response["kickoffs"])
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def kick_returns
|
90
|
-
if response["kick_returns"]
|
91
|
-
response["kick_returns"] = parse_out_hashes response["kick_returns"]
|
92
|
-
@kick_returns ||= Sportradar::Api::Football::StatPack::KickReturns.new(response["kick_returns"])
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def int_returns
|
97
|
-
if response["int_returns"]
|
98
|
-
response["int_returns"] = parse_out_hashes response["int_returns"]
|
99
|
-
@int_returns ||= Sportradar::Api::Football::StatPack::IntReturns.new(response["int_returns"])
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def fumbles
|
104
|
-
if response["fumbles"]
|
105
|
-
response["fumbles"] = parse_out_hashes response["fumbles"]
|
106
|
-
@fumbles ||= Sportradar::Api::Football::StatPack::Fumbles.new(response["fumbles"])
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def field_goals
|
111
|
-
if response["field_goals"]
|
112
|
-
response["field_goals"] = parse_out_hashes response["field_goals"]
|
113
|
-
@field_goals ||= Sportradar::Api::Football::StatPack::FieldGoals.new(response["field_goals"])
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def extra_points
|
118
|
-
if response["extra_points"]
|
119
|
-
response["extra_points"] = parse_out_hashes response["extra_points"]
|
120
|
-
@extra_points ||= Sportradar::Api::Football::StatPack::ExtraPoints.new(response["extra_points"])
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def defense
|
125
|
-
if response["defense"]
|
126
|
-
response["defense"] = parse_out_hashes response["defense"]
|
127
|
-
@defense ||= Sportradar::Api::Football::StatPack::Defense.new(response["defense"])
|
128
|
-
end
|
129
|
-
end
|
130
|
-
# :skip_test_coverage:
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Hierarchy < Data
|
4
|
-
attr_accessor :response, :id, :name, :alias, :divisions, :conferences, :teams
|
5
|
-
|
6
|
-
def initialize(data)
|
7
|
-
@response = data
|
8
|
-
@id = data["id"]
|
9
|
-
@name = data["name"]
|
10
|
-
@alias = data["alias"]
|
11
|
-
@conferences = parse_into_array(selector: data["conference"], klass: Sportradar::Api::Nfl::Conference) if data["conference"]
|
12
|
-
@divisions = conferences.flat_map(&:divisions) if conferences&.all? { |conference| conference.divisions }
|
13
|
-
@divisions ||= parse_into_array(selector: data["division"], klass: Sportradar::Api::Nfl::Division) if data["division"]
|
14
|
-
@teams = @divisions.flat_map(&:teams) if divisions&.all? {|division| division.teams }
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Injury < Data
|
4
|
-
attr_accessor :response, :status, :status_date, :practice, :primary
|
5
|
-
|
6
|
-
def initialize(data)
|
7
|
-
@response = data
|
8
|
-
@status = data["status"]
|
9
|
-
@status_date = data["status_date"]
|
10
|
-
@practice = OpenStruct.new data["practice"] if data['practice']
|
11
|
-
@primary = data["primary"]
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::LeagueDepthChart < Data
|
4
|
-
include Enumerable
|
5
|
-
attr_accessor :response, :season, :charts
|
6
|
-
|
7
|
-
def initialize(data)
|
8
|
-
@response = data
|
9
|
-
depth_chart_data = data['depth_charts']
|
10
|
-
@season = Sportradar::Api::Nfl::Season.new data
|
11
|
-
# @teams = depth_chart_data["team"].map {|team| Sportradar::Api::Nfl::Team.new team } if depth_chart_data["team"]
|
12
|
-
@charts = depth_chart_data["team"].map {|team| Sportradar::Api::Nfl::TeamDepthChart.new(team, season) } if depth_chart_data["team"]
|
13
|
-
end
|
14
|
-
|
15
|
-
# id is preferred search, but we allow for team abbreviation too
|
16
|
-
def team(id = nil, abbrev: nil)
|
17
|
-
@charts.detect { |chart| chart.team_id == id || chart.abbrev == abbrev }
|
18
|
-
end
|
19
|
-
|
20
|
-
def each
|
21
|
-
self.charts.each { |chart| yield chart }
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Nfl::Play < Data
|
4
|
-
attr_accessor :response, :id, :sequence, :reference, :clock, :home_points, :away_points, :type, :play_clock, :wall_clock, :start_situation, :end_situation, :description, :alt_description, :statistics, :score, :scoring_play, :team_id, :player_id
|
5
|
-
|
6
|
-
def initialize(data)
|
7
|
-
@response = data
|
8
|
-
@alt_description = data["alt_description"]
|
9
|
-
@away_points = data["away_points"]
|
10
|
-
@clock = data["clock"]
|
11
|
-
@description = data["description"]
|
12
|
-
@end_situation = Sportradar::Api::Nfl::Situation.new data["end_situation"] if data["end_situation"]
|
13
|
-
@team_id = end_situation.team_id if end_situation
|
14
|
-
@home_points = data["home_points"]
|
15
|
-
@id = data["id"]
|
16
|
-
@play_clock = data["play_clock"]
|
17
|
-
@reference = data["reference"]
|
18
|
-
@score = data["score"]
|
19
|
-
@scoring_play = data["scoring_play"]
|
20
|
-
@sequence = data["sequence"]
|
21
|
-
@start_situation = Sportradar::Api::Nfl::Situation.new data["start_situation"] if data["start_situation"]
|
22
|
-
@statistics = Sportradar::Api::Nfl::PlayStatistics.new data["statistics"] if data["statistics"]
|
23
|
-
parse_player if @statistics
|
24
|
-
@type = data["type"]
|
25
|
-
@wall_clock = data["wall_clock"]
|
26
|
-
end
|
27
|
-
|
28
|
-
def parse_player
|
29
|
-
# TODO: Currently there is an issue where we are only mapping one player_id to a play, but there are plays with multiple players involved.
|
30
|
-
play_stats = @statistics.penalty || @statistics.rush || @statistics.return || @statistics.receive
|
31
|
-
if play_stats.is_a?(Array)
|
32
|
-
play_stats = play_stats.first
|
33
|
-
end
|
34
|
-
@player_id = play_stats&.player&.id
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|