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.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +28 -26
  3. data/README.md +7 -6
  4. data/lib/sportradar/api/baseball/{REAME.md → README.md} +0 -0
  5. data/lib/sportradar/api/baseball/game.rb +29 -2
  6. data/lib/sportradar/api/baseball/mlb/hierarchy.rb +1 -0
  7. data/lib/sportradar/api/baseball/record.rb +0 -4
  8. data/lib/sportradar/api/baseball/venue.rb +2 -1
  9. data/lib/sportradar/api/basketball/game.rb +2 -2
  10. data/lib/sportradar/api/basketball/record.rb +0 -4
  11. data/lib/sportradar/api/basketball/venue.rb +2 -1
  12. data/lib/sportradar/api/data.rb +3 -3
  13. data/lib/sportradar/api/football/README.md +62 -0
  14. data/lib/sportradar/api/football/drive.rb +105 -0
  15. data/lib/sportradar/api/football/event.rb +33 -0
  16. data/lib/sportradar/api/football/game.rb +389 -0
  17. data/lib/sportradar/api/football/game_stats.rb +135 -0
  18. data/lib/sportradar/api/football/ncaafb/api.rb +76 -0
  19. data/lib/sportradar/api/football/ncaafb/conference.rb +53 -0
  20. data/lib/sportradar/api/football/ncaafb/division.rb +42 -0
  21. data/lib/sportradar/api/football/ncaafb/drive.rb +16 -0
  22. data/lib/sportradar/api/football/ncaafb/game.rb +110 -0
  23. data/lib/sportradar/api/football/ncaafb/play.rb +20 -0
  24. data/lib/sportradar/api/football/ncaafb/player.rb +31 -0
  25. data/lib/sportradar/api/football/ncaafb/quarter.rb +15 -0
  26. data/lib/sportradar/api/football/ncaafb/subdivision.rb +43 -0
  27. data/lib/sportradar/api/football/ncaafb/team.rb +45 -0
  28. data/lib/sportradar/api/football/ncaafb/week.rb +24 -0
  29. data/lib/sportradar/api/football/ncaafb.rb +273 -0
  30. data/lib/sportradar/api/football/nfl/api.rb +76 -0
  31. data/lib/sportradar/api/football/nfl/conference.rb +35 -0
  32. data/lib/sportradar/api/football/nfl/division.rb +37 -0
  33. data/lib/sportradar/api/football/nfl/drive.rb +19 -0
  34. data/lib/sportradar/api/football/nfl/event.rb +19 -0
  35. data/lib/sportradar/api/football/nfl/game.rb +77 -0
  36. data/lib/sportradar/api/football/nfl/play.rb +20 -0
  37. data/lib/sportradar/api/football/nfl/player.rb +31 -0
  38. data/lib/sportradar/api/football/nfl/quarter.rb +15 -0
  39. data/lib/sportradar/api/football/nfl/team.rb +42 -0
  40. data/lib/sportradar/api/football/nfl/week.rb +24 -0
  41. data/lib/sportradar/api/football/nfl.rb +293 -0
  42. data/lib/sportradar/api/football/play.rb +93 -0
  43. data/lib/sportradar/api/football/player.rb +111 -0
  44. data/lib/sportradar/api/football/quarter.rb +42 -0
  45. data/lib/sportradar/api/football/record.rb +48 -0
  46. data/lib/sportradar/api/football/scoring.rb +92 -0
  47. data/lib/sportradar/api/football/situation.rb +20 -0
  48. data/lib/sportradar/api/football/stat_pack/defense.rb +20 -20
  49. data/lib/sportradar/api/football/stat_pack/extra_points.rb +5 -4
  50. data/lib/sportradar/api/football/stat_pack/field_goals.rb +6 -5
  51. data/lib/sportradar/api/football/stat_pack/fumbles.rb +11 -9
  52. data/lib/sportradar/api/football/stat_pack/kick_returns.rb +8 -7
  53. data/lib/sportradar/api/football/stat_pack/kickoffs.rb +9 -7
  54. data/lib/sportradar/api/football/stat_pack/misc_returns.rb +1 -1
  55. data/lib/sportradar/api/football/stat_pack/passing.rb +13 -11
  56. data/lib/sportradar/api/football/stat_pack/penalties.rb +2 -2
  57. data/lib/sportradar/api/football/stat_pack/punt_returns.rb +7 -6
  58. data/lib/sportradar/api/football/stat_pack/punts.rb +12 -10
  59. data/lib/sportradar/api/football/stat_pack/receiving.rb +10 -9
  60. data/lib/sportradar/api/football/stat_pack/rushing.rb +11 -9
  61. data/lib/sportradar/api/football/stat_pack.rb +7 -3
  62. data/lib/sportradar/api/football/team.rb +160 -0
  63. data/lib/sportradar/api/football/venue.rb +25 -0
  64. data/lib/sportradar/api/football/week.rb +57 -0
  65. data/lib/sportradar/api/football.rb +43 -0
  66. data/lib/sportradar/api/mma/venue.rb +1 -1
  67. data/lib/sportradar/api/request.rb +19 -2
  68. data/lib/sportradar/api/version.rb +1 -1
  69. data/lib/sportradar/api.rb +0 -41
  70. metadata +41 -43
  71. data/lib/sportradar/api/ncaafb/drive.rb +0 -89
  72. data/lib/sportradar/api/ncaafb/game.rb +0 -161
  73. data/lib/sportradar/api/ncaafb/play.rb +0 -39
  74. data/lib/sportradar/api/ncaafb/player.rb +0 -61
  75. data/lib/sportradar/api/ncaafb/quarter.rb +0 -37
  76. data/lib/sportradar/api/ncaafb/season.rb +0 -71
  77. data/lib/sportradar/api/ncaafb/team.rb +0 -69
  78. data/lib/sportradar/api/ncaafb/week.rb +0 -33
  79. data/lib/sportradar/api/ncaafb.rb +0 -185
  80. data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
  81. data/lib/sportradar/api/nfl/broadcast.rb +0 -13
  82. data/lib/sportradar/api/nfl/changelog.rb +0 -17
  83. data/lib/sportradar/api/nfl/coach.rb +0 -17
  84. data/lib/sportradar/api/nfl/conference.rb +0 -17
  85. data/lib/sportradar/api/nfl/depth_chart.rb +0 -47
  86. data/lib/sportradar/api/nfl/division.rb +0 -16
  87. data/lib/sportradar/api/nfl/draft.rb +0 -16
  88. data/lib/sportradar/api/nfl/drive.rb +0 -73
  89. data/lib/sportradar/api/nfl/event.rb +0 -19
  90. data/lib/sportradar/api/nfl/franchise.rb +0 -14
  91. data/lib/sportradar/api/nfl/game.rb +0 -123
  92. data/lib/sportradar/api/nfl/game_statistic.rb +0 -133
  93. data/lib/sportradar/api/nfl/hierarchy.rb +0 -19
  94. data/lib/sportradar/api/nfl/injury.rb +0 -16
  95. data/lib/sportradar/api/nfl/league_depth_chart.rb +0 -26
  96. data/lib/sportradar/api/nfl/play.rb +0 -39
  97. data/lib/sportradar/api/nfl/play_statistics.rb +0 -249
  98. data/lib/sportradar/api/nfl/player.rb +0 -56
  99. data/lib/sportradar/api/nfl/position.rb +0 -14
  100. data/lib/sportradar/api/nfl/quarter.rb +0 -29
  101. data/lib/sportradar/api/nfl/scoring.rb +0 -25
  102. data/lib/sportradar/api/nfl/season.rb +0 -23
  103. data/lib/sportradar/api/nfl/situation.rb +0 -18
  104. data/lib/sportradar/api/nfl/statistic.rb +0 -28
  105. data/lib/sportradar/api/nfl/summary.rb +0 -17
  106. data/lib/sportradar/api/nfl/team.rb +0 -56
  107. data/lib/sportradar/api/nfl/team_depth_chart.rb +0 -44
  108. data/lib/sportradar/api/nfl/venue.rb +0 -22
  109. data/lib/sportradar/api/nfl/week.rb +0 -16
  110. 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,14 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Franchise < Data
4
- attr_accessor :response, :name, :alias
5
-
6
- def initialize(data)
7
- @response = data
8
- @name = data["name"]
9
- @alias = data["alias"]
10
- end
11
-
12
- end
13
- end
14
- 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