sportradar-api 0.9.12 → 0.11.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. checksums.yaml +4 -4
  2. data/.env.sample +6 -0
  3. data/.travis.yml +1 -0
  4. data/Gemfile.lock +32 -30
  5. data/README.md +12 -9
  6. data/lib/sportradar/api/baseball/README.md +28 -0
  7. data/lib/sportradar/api/baseball/error.rb +25 -0
  8. data/lib/sportradar/api/baseball/event.rb +44 -0
  9. data/lib/sportradar/api/baseball/events/at_bat.rb +96 -0
  10. data/lib/sportradar/api/baseball/events/lineup.rb +41 -0
  11. data/lib/sportradar/api/baseball/events/warming_up.rb +35 -0
  12. data/lib/sportradar/api/baseball/fielder.rb +26 -0
  13. data/lib/sportradar/api/baseball/game.rb +472 -0
  14. data/lib/sportradar/api/baseball/half_inning.rb +69 -0
  15. data/lib/sportradar/api/baseball/inning.rb +42 -0
  16. data/lib/sportradar/api/baseball/lineup.rb +116 -0
  17. data/lib/sportradar/api/baseball/mlb/division.rb +32 -0
  18. data/lib/sportradar/api/baseball/mlb/hierarchy.rb +273 -0
  19. data/lib/sportradar/api/baseball/mlb/league.rb +27 -0
  20. data/lib/sportradar/api/baseball/mlb.rb +84 -0
  21. data/lib/sportradar/api/baseball/outcome.rb +87 -0
  22. data/lib/sportradar/api/baseball/pitch.rb +245 -0
  23. data/lib/sportradar/api/baseball/player.rb +119 -0
  24. data/lib/sportradar/api/baseball/record.rb +42 -0
  25. data/lib/sportradar/api/baseball/runner.rb +78 -0
  26. data/lib/sportradar/api/baseball/scoring.rb +86 -0
  27. data/lib/sportradar/api/baseball/team.rb +147 -0
  28. data/lib/sportradar/api/baseball/venue.rb +51 -0
  29. data/lib/sportradar/api/baseball.rb +46 -0
  30. data/lib/sportradar/api/basketball/broadcast.rb +15 -0
  31. data/lib/sportradar/api/basketball/game.rb +339 -0
  32. data/lib/sportradar/api/basketball/injury.rb +41 -0
  33. data/lib/sportradar/api/basketball/nba/conference.rb +27 -0
  34. data/lib/sportradar/api/basketball/nba/division.rb +30 -0
  35. data/lib/sportradar/api/basketball/nba/game.rb +62 -0
  36. data/lib/sportradar/api/basketball/nba/hierarchy.rb +47 -0
  37. data/lib/sportradar/api/basketball/nba/player.rb +160 -0
  38. data/lib/sportradar/api/basketball/nba/quarter.rb +51 -0
  39. data/lib/sportradar/api/basketball/nba/schedule.rb +43 -0
  40. data/lib/sportradar/api/basketball/nba/scoring.rb +15 -0
  41. data/lib/sportradar/api/basketball/nba/season.rb +54 -0
  42. data/lib/sportradar/api/basketball/nba/series.rb +82 -0
  43. data/lib/sportradar/api/basketball/nba/team.rb +74 -0
  44. data/lib/sportradar/api/basketball/nba.rb +129 -0
  45. data/lib/sportradar/api/basketball/ncaamb/bracket.rb +44 -0
  46. data/lib/sportradar/api/basketball/ncaamb/conference.rb +41 -0
  47. data/lib/sportradar/api/basketball/ncaamb/division.rb +42 -0
  48. data/lib/sportradar/api/basketball/ncaamb/game.rb +75 -0
  49. data/lib/sportradar/api/basketball/ncaamb/half.rb +49 -0
  50. data/lib/sportradar/api/basketball/ncaamb/hierarchy.rb +65 -0
  51. data/lib/sportradar/api/basketball/ncaamb/player.rb +162 -0
  52. data/lib/sportradar/api/basketball/ncaamb/round.rb +55 -0
  53. data/lib/sportradar/api/basketball/ncaamb/schedule.rb +41 -0
  54. data/lib/sportradar/api/basketball/ncaamb/season.rb +55 -0
  55. data/lib/sportradar/api/basketball/ncaamb/team.rb +61 -0
  56. data/lib/sportradar/api/basketball/ncaamb/tournament.rb +154 -0
  57. data/lib/sportradar/api/basketball/ncaamb.rb +149 -0
  58. data/lib/sportradar/api/basketball/play.rb +75 -0
  59. data/lib/sportradar/api/basketball/plays/assist.rb +14 -0
  60. data/lib/sportradar/api/basketball/plays/base.rb +126 -0
  61. data/lib/sportradar/api/basketball/plays/block.rb +14 -0
  62. data/lib/sportradar/api/basketball/plays/clear_path_foul.rb +11 -0
  63. data/lib/sportradar/api/basketball/plays/deadball.rb +11 -0
  64. data/lib/sportradar/api/basketball/plays/defensive_three_seconds.rb +11 -0
  65. data/lib/sportradar/api/basketball/plays/delay.rb +11 -0
  66. data/lib/sportradar/api/basketball/plays/ejection.rb +14 -0
  67. data/lib/sportradar/api/basketball/plays/end_period.rb +28 -0
  68. data/lib/sportradar/api/basketball/plays/flagrant_one.rb +11 -0
  69. data/lib/sportradar/api/basketball/plays/flagrant_two.rb +11 -0
  70. data/lib/sportradar/api/basketball/plays/foul.rb +17 -0
  71. data/lib/sportradar/api/basketball/plays/free_throw_made.rb +23 -0
  72. data/lib/sportradar/api/basketball/plays/free_throw_miss.rb +25 -0
  73. data/lib/sportradar/api/basketball/plays/jumpball.rb +12 -0
  74. data/lib/sportradar/api/basketball/plays/kickball.rb +11 -0
  75. data/lib/sportradar/api/basketball/plays/lineup_change.rb +11 -0
  76. data/lib/sportradar/api/basketball/plays/offensive_foul.rb +11 -0
  77. data/lib/sportradar/api/basketball/plays/official_timeout.rb +11 -0
  78. data/lib/sportradar/api/basketball/plays/open_inbound.rb +9 -0
  79. data/lib/sportradar/api/basketball/plays/open_tip.rb +11 -0
  80. data/lib/sportradar/api/basketball/plays/personal_foul.rb +9 -0
  81. data/lib/sportradar/api/basketball/plays/rebound.rb +28 -0
  82. data/lib/sportradar/api/basketball/plays/review.rb +11 -0
  83. data/lib/sportradar/api/basketball/plays/shooting_foul.rb +9 -0
  84. data/lib/sportradar/api/basketball/plays/shot_made.rb +22 -0
  85. data/lib/sportradar/api/basketball/plays/shot_miss.rb +22 -0
  86. data/lib/sportradar/api/basketball/plays/steal.rb +11 -0
  87. data/lib/sportradar/api/basketball/plays/team_timeout.rb +14 -0
  88. data/lib/sportradar/api/basketball/plays/technical_foul.rb +14 -0
  89. data/lib/sportradar/api/basketball/plays/three_point_made.rb +14 -0
  90. data/lib/sportradar/api/basketball/plays/three_point_miss.rb +11 -0
  91. data/lib/sportradar/api/basketball/plays/timeout.rb +24 -0
  92. data/lib/sportradar/api/basketball/plays/turnover.rb +19 -0
  93. data/lib/sportradar/api/basketball/plays/tv_timeout.rb +11 -0
  94. data/lib/sportradar/api/basketball/plays/two_point_made.rb +14 -0
  95. data/lib/sportradar/api/basketball/plays/two_point_miss.rb +11 -0
  96. data/lib/sportradar/api/basketball/plays.rb +39 -0
  97. data/lib/sportradar/api/basketball/record.rb +28 -0
  98. data/lib/sportradar/api/basketball/scoring.rb +103 -0
  99. data/lib/sportradar/api/basketball/season.rb +20 -0
  100. data/lib/sportradar/api/basketball/team.rb +136 -0
  101. data/lib/sportradar/api/basketball/venue.rb +54 -0
  102. data/lib/sportradar/api/basketball.rb +35 -0
  103. data/lib/sportradar/api/{nfl/broadcast.rb → broadcast.rb} +1 -1
  104. data/lib/sportradar/api/content/article.rb +1 -1
  105. data/lib/sportradar/api/content/article_list.rb +1 -1
  106. data/lib/sportradar/api/content.rb +17 -5
  107. data/lib/sportradar/api/data.rb +53 -0
  108. data/lib/sportradar/api/football/README.md +62 -0
  109. data/lib/sportradar/api/football/drive.rb +114 -0
  110. data/lib/sportradar/api/football/event.rb +36 -0
  111. data/lib/sportradar/api/football/game.rb +404 -0
  112. data/lib/sportradar/api/football/game_stats.rb +135 -0
  113. data/lib/sportradar/api/football/ncaafb/api.rb +81 -0
  114. data/lib/sportradar/api/football/ncaafb/conference.rb +53 -0
  115. data/lib/sportradar/api/football/ncaafb/division.rb +42 -0
  116. data/lib/sportradar/api/football/ncaafb/drive.rb +36 -0
  117. data/lib/sportradar/api/football/ncaafb/game.rb +130 -0
  118. data/lib/sportradar/api/football/ncaafb/play.rb +97 -0
  119. data/lib/sportradar/api/football/ncaafb/player.rb +31 -0
  120. data/lib/sportradar/api/football/ncaafb/quarter.rb +15 -0
  121. data/lib/sportradar/api/football/ncaafb/subdivision.rb +43 -0
  122. data/lib/sportradar/api/football/ncaafb/team.rb +49 -0
  123. data/lib/sportradar/api/football/ncaafb/week.rb +24 -0
  124. data/lib/sportradar/api/football/ncaafb.rb +273 -0
  125. data/lib/sportradar/api/football/nfl/api.rb +76 -0
  126. data/lib/sportradar/api/football/nfl/conference.rb +35 -0
  127. data/lib/sportradar/api/football/nfl/depth_chart.rb +53 -0
  128. data/lib/sportradar/api/football/nfl/division.rb +37 -0
  129. data/lib/sportradar/api/football/nfl/drive.rb +19 -0
  130. data/lib/sportradar/api/football/nfl/event.rb +19 -0
  131. data/lib/sportradar/api/football/nfl/game.rb +77 -0
  132. data/lib/sportradar/api/football/nfl/league_depth_chart.rb +41 -0
  133. data/lib/sportradar/api/football/nfl/play.rb +27 -0
  134. data/lib/sportradar/api/football/nfl/player.rb +31 -0
  135. data/lib/sportradar/api/football/nfl/quarter.rb +15 -0
  136. data/lib/sportradar/api/football/nfl/team.rb +42 -0
  137. data/lib/sportradar/api/football/nfl/team_depth_chart.rb +44 -0
  138. data/lib/sportradar/api/football/nfl/week.rb +24 -0
  139. data/lib/sportradar/api/football/nfl.rb +322 -0
  140. data/lib/sportradar/api/football/play.rb +116 -0
  141. data/lib/sportradar/api/football/play_statistics.rb +313 -0
  142. data/lib/sportradar/api/football/player.rb +121 -0
  143. data/lib/sportradar/api/football/quarter.rb +46 -0
  144. data/lib/sportradar/api/football/record.rb +48 -0
  145. data/lib/sportradar/api/football/scoring.rb +92 -0
  146. data/lib/sportradar/api/football/situation.rb +32 -0
  147. data/lib/sportradar/api/football/stat_pack/defense.rb +20 -20
  148. data/lib/sportradar/api/football/stat_pack/extra_points.rb +5 -4
  149. data/lib/sportradar/api/football/stat_pack/field_goals.rb +6 -5
  150. data/lib/sportradar/api/football/stat_pack/fumbles.rb +11 -9
  151. data/lib/sportradar/api/football/stat_pack/kick_returns.rb +8 -7
  152. data/lib/sportradar/api/football/stat_pack/kickoffs.rb +9 -7
  153. data/lib/sportradar/api/football/stat_pack/misc_returns.rb +1 -1
  154. data/lib/sportradar/api/football/stat_pack/passing.rb +13 -11
  155. data/lib/sportradar/api/football/stat_pack/penalties.rb +2 -2
  156. data/lib/sportradar/api/football/stat_pack/punt_returns.rb +7 -6
  157. data/lib/sportradar/api/football/stat_pack/punts.rb +12 -10
  158. data/lib/sportradar/api/football/stat_pack/receiving.rb +10 -9
  159. data/lib/sportradar/api/football/stat_pack/rushing.rb +11 -9
  160. data/lib/sportradar/api/football/stat_pack.rb +7 -3
  161. data/lib/sportradar/api/football/team.rb +160 -0
  162. data/lib/sportradar/api/football/venue.rb +25 -0
  163. data/lib/sportradar/api/football/week.rb +57 -0
  164. data/lib/sportradar/api/football.rb +47 -0
  165. data/lib/sportradar/api/images/asset.rb +2 -1
  166. data/lib/sportradar/api/images/ref.rb +15 -0
  167. data/lib/sportradar/api/images.rb +51 -9
  168. data/lib/sportradar/api/mma/event.rb +111 -0
  169. data/lib/sportradar/api/mma/fight.rb +107 -0
  170. data/lib/sportradar/api/mma/fighter.rb +95 -0
  171. data/lib/sportradar/api/mma/judge.rb +70 -0
  172. data/lib/sportradar/api/mma/league.rb +63 -0
  173. data/lib/sportradar/api/mma/referee.rb +70 -0
  174. data/lib/sportradar/api/mma/result.rb +68 -0
  175. data/lib/sportradar/api/mma/roster.rb +72 -0
  176. data/lib/sportradar/api/mma/schedule.rb +53 -0
  177. data/lib/sportradar/api/mma/score.rb +83 -0
  178. data/lib/sportradar/api/mma/venue.rb +72 -0
  179. data/lib/sportradar/api/mma.rb +195 -0
  180. data/lib/sportradar/api/poll.rb +40 -0
  181. data/lib/sportradar/api/request.rb +40 -8
  182. data/lib/sportradar/api/soccer/schedule.rb +1 -0
  183. data/lib/sportradar/api/version.rb +1 -1
  184. data/lib/sportradar/api.rb +20 -34
  185. metadata +157 -34
  186. data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
  187. data/lib/sportradar/api/nfl/changelog.rb +0 -17
  188. data/lib/sportradar/api/nfl/coach.rb +0 -17
  189. data/lib/sportradar/api/nfl/conference.rb +0 -16
  190. data/lib/sportradar/api/nfl/depth_chart.rb +0 -47
  191. data/lib/sportradar/api/nfl/division.rb +0 -16
  192. data/lib/sportradar/api/nfl/draft.rb +0 -16
  193. data/lib/sportradar/api/nfl/drive.rb +0 -73
  194. data/lib/sportradar/api/nfl/event.rb +0 -19
  195. data/lib/sportradar/api/nfl/franchise.rb +0 -14
  196. data/lib/sportradar/api/nfl/game.rb +0 -94
  197. data/lib/sportradar/api/nfl/game_statistic.rb +0 -133
  198. data/lib/sportradar/api/nfl/hierarchy.rb +0 -19
  199. data/lib/sportradar/api/nfl/injury.rb +0 -16
  200. data/lib/sportradar/api/nfl/league_depth_chart.rb +0 -26
  201. data/lib/sportradar/api/nfl/play.rb +0 -39
  202. data/lib/sportradar/api/nfl/play_statistics.rb +0 -247
  203. data/lib/sportradar/api/nfl/player.rb +0 -49
  204. data/lib/sportradar/api/nfl/position.rb +0 -14
  205. data/lib/sportradar/api/nfl/quarter.rb +0 -29
  206. data/lib/sportradar/api/nfl/scoring.rb +0 -25
  207. data/lib/sportradar/api/nfl/season.rb +0 -23
  208. data/lib/sportradar/api/nfl/situation.rb +0 -18
  209. data/lib/sportradar/api/nfl/statistic.rb +0 -28
  210. data/lib/sportradar/api/nfl/summary.rb +0 -17
  211. data/lib/sportradar/api/nfl/team.rb +0 -56
  212. data/lib/sportradar/api/nfl/team_depth_chart.rb +0 -44
  213. data/lib/sportradar/api/nfl/venue.rb +0 -22
  214. data/lib/sportradar/api/nfl/week.rb +0 -16
  215. data/lib/sportradar/api/nfl.rb +0 -205
@@ -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,94 +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
- Array(quarters&.flat_map(&:drives)).compact
86
- end
87
-
88
- def plays
89
- Array(drives&.flat_map(&:plays)).compact
90
- end
91
-
92
- end
93
- end
94
- 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
@@ -1,247 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::PlayStatistics < Data
4
- attr_accessor :response, :kick, :return, :rush, :defense, :receive, :punt, :penalty, :pass, :first_down, :field_goal, :extra_point, :defense, :down_conversion
5
- def initialize(data)
6
- @response = data
7
- @kick = Nfl::PlayKickStatistics.new(data['kick']) if data['kick']
8
- @return = parse_into_array(selector: data['return'], klass: Nfl::PlayReturnStatistics) if data['return']
9
- @rush = parse_into_array(selector: data['rush'], klass: Nfl::PlayRushStatistics) if data['rush']
10
- @defense = parse_into_array(selector: data['defense'], klass: Nfl::PlayDefenseStatistics) if data['defense']
11
- @receive = parse_into_array(selector: data['receive'], klass: Nfl::PlayReceiveStatistics) if data['receive']
12
- @punt = Nfl::PlayPuntStatistics.new(data['punt']) if data['punt']
13
- @penalty = parse_into_array(selector: data['penalty'], klass: Nfl::PlayPenaltyStatistics) if data['penalty']
14
- @pass = Nfl::PlayPassingStatistics.new(data['pass']) if data['pass']
15
- @first_down = parse_into_array(selector: data['first_down'], klass: Nfl::PlayFirstDownStatistics) if data['first_down']
16
- @field_goal = Nfl::PlayFieldGoalStatistics.new(data['field_goal']) if data['field_goal']
17
- @extra_point = Nfl::PlayExtraPointStatistics.new(data['extra_point']) if data['extra_point']
18
- @down_conversion = Nfl::PlayDownConversionStatistics.new(data['down_conversion']) if data['down_conversion']
19
- end
20
- end
21
-
22
- class Nfl::PlayDownConversionStatistics < Data
23
- attr_accessor :attempt, :complete, :down, :nullified, :team
24
- def initialize(data)
25
- @attempt = data['attempt']
26
- @complete = data['complete']
27
- @down = data['down']
28
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
29
- @nullified = data['nullified']
30
- end
31
-
32
- def nullified?
33
- @nullified.to_s == 'true'
34
- end
35
- end
36
-
37
- class Nfl::PlayDefenseStatistics < Data
38
- attr_accessor :ast_tackle, :interception, :int_yards, :nullified, :pass_defended, :primary, :qb_hit, :sack, :sack_yards, :tlost, :tlost_yards, :team, :player, :tackle, :int_touchdown
39
- def initialize(data)
40
- @ast_tackle = data['ast_tackle']
41
- @interception = data['interception']
42
- @int_yards = data['int_yards']
43
- @int_touchdown = data['int_touchdown']
44
- @nullified = data['nullified']
45
- @pass_defended = data['pass_defended']
46
- @primary = data['primary']
47
- @qb_hit = data['qb_hit']
48
- @sack = data['sack']
49
- @sack_yards = data['sack_yards']
50
- @tlost = data['tlost']
51
- @tlost_yards = data['tlost_yards']
52
- @tackle = data['tackle']
53
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
54
- @player = Nfl::Player.new(data['player']) if data['player']
55
- @nullified = data['nullified']
56
- end
57
-
58
- def nullified?
59
- @nullified.to_s == 'true'
60
- end
61
- end
62
-
63
- class Nfl::PlayExtraPointStatistics < Data
64
- attr_accessor :attempt, :nullified
65
- def initialize(data)
66
- @attempt = data['attempt']
67
- @nullified = data['nullified']
68
- end
69
-
70
- def nullified?
71
- @nullified.to_s == 'true'
72
- end
73
- end
74
-
75
- class Nfl::PlayFieldGoalStatistics < Data
76
- attr_accessor :attempt, :att_yards, :missed, :yards, :nullified, :blocked, :team, :player
77
- def initialize(data)
78
- @attempt = data['attempt']
79
- @att_yards = data['att_yards']
80
- @missed = data['missed']
81
- @blocked = data['blocked']
82
- @yards = data['yards']
83
- @nullified = data['nullified']
84
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
85
- @player = Nfl::Player.new(data['player']) if data['player']
86
- end
87
-
88
- def nullified?
89
- @nullified.to_s == 'true'
90
- end
91
- end
92
-
93
- class Nfl::PlayFirstDownStatistics < Data
94
- attr_accessor :category, :nullified, :team
95
- def initialize(data)
96
- @category = data['category']
97
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
98
- @nullified = data['nullified']
99
- end
100
-
101
- def nullified?
102
- @nullified.to_s == 'true'
103
- end
104
- end
105
-
106
- class Nfl::PlayPassingStatistics < Data
107
- attr_accessor :attempt, :att_yards, :complete, :firstdown, :goaltogo, :inside_20, :interception, :sack, :sack_yards, :touchdown, :yards, :nullified, :team, :player
108
- def initialize(data)
109
- @attempt = data['attempt']
110
- @att_yards = data['att_yards']
111
- @complete = data['complete']
112
- @firstdown = data['firstdown']
113
- @goaltogo = data['goaltogo']
114
- @inside_20 = data['inside_20']
115
- @interception = data['interception']
116
- @sack = data['sack']
117
- @sack_yards = data['sack_yards']
118
- @touchdown = data['touchdown']
119
- @yards = data['yards']
120
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
121
- @player = Nfl::Player.new(data['player']) if data['player']
122
- @nullified = data['nullified']
123
- end
124
-
125
- def nullified?
126
- @nullified.to_s == 'true'
127
- end
128
- end
129
-
130
- class Nfl::PlayPenaltyStatistics < Data
131
- attr_accessor :penalty, :yards, :nullified, :team, :player
132
- def initialize(data)
133
- @penalty = data['penalty'] if data['penalty']
134
- @yards = data['yards'] if data['yards']
135
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
136
- @player = Nfl::Player.new(data['player']) if data['player']
137
- @nullified = data['nullified']
138
- end
139
-
140
- def nullified?
141
- @nullified.to_s == 'true'
142
- end
143
- end
144
-
145
- class Nfl::PlayPuntStatistics < Data
146
- attr_accessor :attempt, :downed, :faircatch, :inside_20, :out_of_bounds, :touchback, :yards, :nullified, :team, :player
147
- def initialize(data)
148
- @attempt = data['attempt']
149
- @downed = data['downed']
150
- @inside_20 = data['inside_20']
151
- @out_of_bounds = data['out_of_bounds']
152
- @touchback = data['touchback']
153
- @yards = data['yards']
154
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
155
- @player = Nfl::Player.new(data['player']) if data['player']
156
- @nullified = data['nullified']
157
- end
158
-
159
- def nullified?
160
- @nullified.to_s == 'true'
161
- end
162
- end
163
-
164
- class Nfl::PlayReceiveStatistics < Data
165
- attr_accessor :firstdown, :goaltogo, :inside_20, :reception, :target, :touchdown, :yards, :yards_after_catch, :nullified, :team, :player
166
- def initialize(data)
167
- @firstdown = data['firstdown']
168
- @goaltogo = data['goaltogo']
169
- @inside_20 = data['inside_20']
170
- @reception = data['reception']
171
- @target = data['target']
172
- @touchdown = data['touchdown']
173
- @yards = data['yards']
174
- @yards_after_catch = data['yards_after_catch']
175
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
176
- @player = Nfl::Player.new(data['player']) if data['player']
177
- @nullified = data['nullified']
178
- end
179
-
180
- def nullified?
181
- @nullified.to_s == 'true'
182
- end
183
- end
184
-
185
- class Nfl::PlayRushStatistics < Data
186
- attr_accessor :attempt, :firstdown, :tlost, :tlost_yards, :yards, :inside_20, :goal_to_go, :team, :player, :nullified, :touchdown
187
- def initialize(data)
188
- @attempt = data['attempt']
189
- @firstdown = data['firstdown']
190
- @goal_to_go = data['goal_to_go']
191
- @inside_20 = data['inside_20']
192
- @tlost = data['tlost']
193
- @tlost_yards = data['tlost_yards']
194
- @touchdown = data['touchdown']
195
- @yards = data['yards']
196
-
197
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
198
- @player = Nfl::Player.new(data['player']) if data['player']
199
- @nullified = data['nullified']
200
- end
201
-
202
- def nullified?
203
- @nullified.to_s == 'true'
204
- end
205
- end
206
-
207
-
208
- class Nfl::PlayKickStatistics < Data
209
- attr_accessor :attempt, :yards, :gross_yards, :touchback, :team, :player, :endzone, :inside_20, :nullified
210
- def initialize(data)
211
- @endzone = data['endzone']
212
- @inside_20 = data['inside_20']
213
- @attempt = data['attempt']
214
- @yards = data['yards']
215
- @gross_yards = data['gross_yards']
216
- @touchback = data['touchback']
217
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
218
- @player = Nfl::Player.new(data['player']) if data['player']
219
- @nullified = data['nullified']
220
- end
221
-
222
- def nullified?
223
- @nullified.to_s == 'true'
224
- end
225
- end
226
-
227
- class Nfl::PlayReturnStatistics < Data
228
- attr_accessor :category, :downed, :faircatch, :out_of_bounds, :return, :touchback, :yards, :team, :nullified, :player
229
- def initialize(data)
230
- @category = data['category']
231
- @downed = data['downed']
232
- @faircatch = data['faircatch']
233
- @out_of_bounds = data['out_of_bounds']
234
- @return = data['return']
235
- @touchback = data['touchback']
236
- @yards = data['yards']
237
- @team = Sportradar::Api::Nfl::Team.new(data['team']) if data['team']
238
- @player = Nfl::Player.new(data['player']) if data['player']
239
- @nullified = data['nullified']
240
- end
241
-
242
- def nullified?
243
- @nullified.to_s == 'true'
244
- end
245
- end
246
- end
247
- end
@@ -1,49 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Player < Data
4
- attr_accessor :response, :id, :sequence, :title, :game, :name, :jersey, :reference, :position, :depth, :injury, :age, :birth_date, :birth_place, :college, :college_conf, :draft, :first_name, :height, :high_school, :last_name, :preferred_name, :references, :rookie_year, :status, :weight, :abbr_name, :seasons, :team
5
-
6
- def initialize(data)
7
- data = [data].to_h if data.is_a? Array # for kickers in depth charts
8
- @response = data
9
- @depth = data["depth"]
10
- @game = data["game"] # Games
11
- @id = data["id"]
12
- @jersey = data["jersey"]
13
- @name = data["name"]
14
- @position = data["position"]
15
- @reference = data["reference"]
16
- @sequence = data["sequence"]
17
- @title = data["title"]
18
- @age = data["age"]
19
- @birth_date = data["birth_date"]
20
- @birth_place = data["birth_place"]
21
- @college = data["college"]
22
- @college_conf = data["college_conf"]
23
- @first_name = data["first_name"]
24
- @height = data["height"]
25
- @high_school = data["high_school"]
26
- @last_name = data["last_name"]
27
- @preferred_name = data["preferred_name"]
28
- @references = data["references"]
29
- @rookie_year = data["rookie_year"]
30
- @status = data["status"]
31
- @weight = data["weight"]
32
- @abbr_name = data["abbr_name"]
33
- @team = Sportradar::Api::Nfl::Team.new data["team"] if data["team"]
34
- @injury = Sportradar::Api::Nfl::Injury.new data["injury"] if data["injury"]
35
- @draft = Sportradar::Api::Nfl::Draft.new data["draft"] if data["draft"]
36
- @seasons = parse_into_array(selector: response["season"], klass: Sportradar::Api::Nfl::Season) if response["season"]
37
- end
38
-
39
- def age
40
- if birth_date.present?
41
- now = Time.now.utc.to_date
42
- dob = birth_date.to_date
43
- now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
44
- end
45
- end
46
-
47
- end
48
- end
49
- end
@@ -1,14 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Position < Data
4
- attr_accessor :response, :name, :players
5
-
6
- def initialize(data)
7
- @response = data
8
- @name = data["name"]
9
- @players = parse_into_array(selector: response["player"], klass: Sportradar::Api::Nfl::Player) if response["player"]
10
- end
11
-
12
- end
13
- end
14
- end