sportradar-api 0.10.7 → 0.11.1

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 (143) hide show
  1. checksums.yaml +4 -4
  2. data/.env.sample +2 -0
  3. data/.travis.yml +1 -1
  4. data/Gemfile.lock +30 -28
  5. data/README.md +10 -7
  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/game.rb +42 -7
  31. data/lib/sportradar/api/basketball/nba/game.rb +5 -0
  32. data/lib/sportradar/api/basketball/nba/series.rb +25 -2
  33. data/lib/sportradar/api/basketball/nba/team.rb +5 -0
  34. data/lib/sportradar/api/basketball/nba.rb +2 -2
  35. data/lib/sportradar/api/basketball/ncaamb/game.rb +15 -0
  36. data/lib/sportradar/api/basketball/ncaamb.rb +2 -2
  37. data/lib/sportradar/api/basketball/record.rb +0 -4
  38. data/lib/sportradar/api/basketball/venue.rb +2 -1
  39. data/lib/sportradar/api/{nfl/broadcast.rb → broadcast.rb} +1 -1
  40. data/lib/sportradar/api/config.rb +2 -2
  41. data/lib/sportradar/api/content.rb +9 -1
  42. data/lib/sportradar/api/data.rb +11 -6
  43. data/lib/sportradar/api/football/README.md +62 -0
  44. data/lib/sportradar/api/football/drive.rb +109 -0
  45. data/lib/sportradar/api/football/event.rb +36 -0
  46. data/lib/sportradar/api/football/game.rb +404 -0
  47. data/lib/sportradar/api/football/game_stats.rb +135 -0
  48. data/lib/sportradar/api/football/ncaafb/api.rb +81 -0
  49. data/lib/sportradar/api/football/ncaafb/conference.rb +53 -0
  50. data/lib/sportradar/api/football/ncaafb/division.rb +42 -0
  51. data/lib/sportradar/api/football/ncaafb/drive.rb +16 -0
  52. data/lib/sportradar/api/football/ncaafb/game.rb +115 -0
  53. data/lib/sportradar/api/football/ncaafb/play.rb +42 -0
  54. data/lib/sportradar/api/football/ncaafb/player.rb +31 -0
  55. data/lib/sportradar/api/football/ncaafb/quarter.rb +15 -0
  56. data/lib/sportradar/api/football/ncaafb/subdivision.rb +43 -0
  57. data/lib/sportradar/api/football/ncaafb/team.rb +49 -0
  58. data/lib/sportradar/api/football/ncaafb/week.rb +24 -0
  59. data/lib/sportradar/api/football/ncaafb.rb +273 -0
  60. data/lib/sportradar/api/football/nfl/api.rb +76 -0
  61. data/lib/sportradar/api/football/nfl/conference.rb +35 -0
  62. data/lib/sportradar/api/football/nfl/division.rb +37 -0
  63. data/lib/sportradar/api/football/nfl/drive.rb +19 -0
  64. data/lib/sportradar/api/football/nfl/event.rb +19 -0
  65. data/lib/sportradar/api/football/nfl/game.rb +77 -0
  66. data/lib/sportradar/api/football/nfl/play.rb +20 -0
  67. data/lib/sportradar/api/football/nfl/player.rb +31 -0
  68. data/lib/sportradar/api/football/nfl/quarter.rb +15 -0
  69. data/lib/sportradar/api/football/nfl/team.rb +42 -0
  70. data/lib/sportradar/api/football/nfl/week.rb +24 -0
  71. data/lib/sportradar/api/football/nfl.rb +293 -0
  72. data/lib/sportradar/api/football/play.rb +101 -0
  73. data/lib/sportradar/api/football/player.rb +120 -0
  74. data/lib/sportradar/api/football/quarter.rb +42 -0
  75. data/lib/sportradar/api/football/record.rb +48 -0
  76. data/lib/sportradar/api/football/scoring.rb +92 -0
  77. data/lib/sportradar/api/football/situation.rb +20 -0
  78. data/lib/sportradar/api/football/stat_pack/defense.rb +20 -20
  79. data/lib/sportradar/api/football/stat_pack/extra_points.rb +5 -4
  80. data/lib/sportradar/api/football/stat_pack/field_goals.rb +6 -5
  81. data/lib/sportradar/api/football/stat_pack/fumbles.rb +11 -9
  82. data/lib/sportradar/api/football/stat_pack/kick_returns.rb +8 -7
  83. data/lib/sportradar/api/football/stat_pack/kickoffs.rb +9 -7
  84. data/lib/sportradar/api/football/stat_pack/misc_returns.rb +1 -1
  85. data/lib/sportradar/api/football/stat_pack/passing.rb +13 -11
  86. data/lib/sportradar/api/football/stat_pack/penalties.rb +2 -2
  87. data/lib/sportradar/api/football/stat_pack/punt_returns.rb +7 -6
  88. data/lib/sportradar/api/football/stat_pack/punts.rb +12 -10
  89. data/lib/sportradar/api/football/stat_pack/receiving.rb +10 -9
  90. data/lib/sportradar/api/football/stat_pack/rushing.rb +11 -9
  91. data/lib/sportradar/api/football/stat_pack.rb +7 -3
  92. data/lib/sportradar/api/football/team.rb +160 -0
  93. data/lib/sportradar/api/football/venue.rb +25 -0
  94. data/lib/sportradar/api/football/week.rb +57 -0
  95. data/lib/sportradar/api/football.rb +43 -0
  96. data/lib/sportradar/api/images/asset.rb +2 -1
  97. data/lib/sportradar/api/images/ref.rb +15 -0
  98. data/lib/sportradar/api/images.rb +46 -8
  99. data/lib/sportradar/api/mma/venue.rb +1 -1
  100. data/lib/sportradar/api/request.rb +24 -2
  101. data/lib/sportradar/api/soccer/schedule.rb +1 -0
  102. data/lib/sportradar/api/version.rb +1 -1
  103. data/lib/sportradar/api.rb +6 -43
  104. metadata +67 -43
  105. data/lib/sportradar/api/ncaafb/drive.rb +0 -89
  106. data/lib/sportradar/api/ncaafb/game.rb +0 -161
  107. data/lib/sportradar/api/ncaafb/play.rb +0 -39
  108. data/lib/sportradar/api/ncaafb/player.rb +0 -61
  109. data/lib/sportradar/api/ncaafb/quarter.rb +0 -37
  110. data/lib/sportradar/api/ncaafb/season.rb +0 -71
  111. data/lib/sportradar/api/ncaafb/team.rb +0 -69
  112. data/lib/sportradar/api/ncaafb/week.rb +0 -33
  113. data/lib/sportradar/api/ncaafb.rb +0 -185
  114. data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
  115. data/lib/sportradar/api/nfl/changelog.rb +0 -17
  116. data/lib/sportradar/api/nfl/coach.rb +0 -17
  117. data/lib/sportradar/api/nfl/conference.rb +0 -17
  118. data/lib/sportradar/api/nfl/depth_chart.rb +0 -47
  119. data/lib/sportradar/api/nfl/division.rb +0 -16
  120. data/lib/sportradar/api/nfl/draft.rb +0 -16
  121. data/lib/sportradar/api/nfl/drive.rb +0 -73
  122. data/lib/sportradar/api/nfl/event.rb +0 -19
  123. data/lib/sportradar/api/nfl/franchise.rb +0 -14
  124. data/lib/sportradar/api/nfl/game.rb +0 -123
  125. data/lib/sportradar/api/nfl/game_statistic.rb +0 -133
  126. data/lib/sportradar/api/nfl/hierarchy.rb +0 -19
  127. data/lib/sportradar/api/nfl/injury.rb +0 -16
  128. data/lib/sportradar/api/nfl/league_depth_chart.rb +0 -26
  129. data/lib/sportradar/api/nfl/play.rb +0 -39
  130. data/lib/sportradar/api/nfl/play_statistics.rb +0 -249
  131. data/lib/sportradar/api/nfl/player.rb +0 -56
  132. data/lib/sportradar/api/nfl/position.rb +0 -14
  133. data/lib/sportradar/api/nfl/quarter.rb +0 -29
  134. data/lib/sportradar/api/nfl/scoring.rb +0 -25
  135. data/lib/sportradar/api/nfl/season.rb +0 -23
  136. data/lib/sportradar/api/nfl/situation.rb +0 -18
  137. data/lib/sportradar/api/nfl/statistic.rb +0 -28
  138. data/lib/sportradar/api/nfl/summary.rb +0 -17
  139. data/lib/sportradar/api/nfl/team.rb +0 -56
  140. data/lib/sportradar/api/nfl/team_depth_chart.rb +0 -44
  141. data/lib/sportradar/api/nfl/venue.rb +0 -22
  142. data/lib/sportradar/api/nfl/week.rb +0 -16
  143. data/lib/sportradar/api/nfl.rb +0 -211
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b22a0a7a406d1e9334db57e47c9f22cc1d722441
4
- data.tar.gz: b46dfcead44339f9d5c37b6eb947f7d661ef4015
3
+ metadata.gz: 16cb3b28febfcd41fd83739b56120b115bee1c41
4
+ data.tar.gz: 7105f0331b5807f152f920e9fb2322880ba7f567
5
5
  SHA512:
6
- metadata.gz: 0121db5a08f0f80fe5df0bb73abc15cea485150f69e492d17621ca5624c42e917a0bcf1523c1307bc48c8dfc3ad80c6da07cfc140445b7cd25e3416ffe1f6155
7
- data.tar.gz: ca20ff2d455c33c9e108208dbf39ac417d411844c2fb7028cb00bfaf0d15ae2fbd408ce27878b55008bd1c83af824836a71aa7dd8b6552c4e22517ef0bce0183
6
+ metadata.gz: 4c9e3b04058b82c88fd4b4fd67ec1698c71f4d8df0489f2b03c7231768b8be869a2878f8b3cdfc307c16f676e420d864ff2fc45658237578c7abcdad4d83e1dd
7
+ data.tar.gz: aa210eb3b481ad666f9277f665f4cd762ea0db1748ccfd6cd1ccdf5098b3601dd265e861a232fa5e51f7df1b9ec99c4bcad6d32c9ab543e896bab9eaf8d46660
data/.env.sample CHANGED
@@ -11,6 +11,8 @@ SPORTRADAR_IMAGES_MLS: your-images_mls-api-key
11
11
  SPORTRADAR_IMAGES_NBA: your-images_nba-api-key
12
12
  SPORTRADAR_IMAGES_NFL: your-images_nfl-api-key
13
13
  SPORTRADAR_IMAGES_NFL_OFFICIAL_PREMIUM: your-images_nfl-official-premium-api-key
14
+ SPORTRADAR_IMAGES_MLB: your-images_mlb-api-key
15
+ SPORTRADAR_IMAGES_MLB_PREMIUM: your-images_mlb-premium-api-key
14
16
  SPORTRADAR_LIVE_IMAGES_MLS: your-live_images_mls-api-key
15
17
  SPORTRADAR_LIVE_IMAGES_NBA: your-live_images_nba-api-key
16
18
  SPORTRADAR_LIVE_IMAGES_NFL: your-live_images_nfl-api-key
data/.travis.yml CHANGED
@@ -2,5 +2,5 @@ sudo: false
2
2
  language: ruby
3
3
  rvm:
4
4
  - 2.3.1
5
- - 2.4.0
5
+ - 2.4.1
6
6
  before_install: gem install bundler -v 1.12.5
data/Gemfile.lock CHANGED
@@ -1,36 +1,37 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sportradar-api (0.10.7)
4
+ sportradar-api (0.11.1)
5
5
  activesupport
6
6
  httparty (>= 0.14.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (5.0.1)
11
+ activesupport (5.1.2)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
13
  i18n (~> 0.7)
14
14
  minitest (~> 5.1)
15
15
  tzinfo (~> 1.1)
16
- addressable (2.4.0)
17
- codeclimate-test-reporter (0.6.0)
18
- simplecov (>= 0.7.1, < 1.0.0)
16
+ addressable (2.5.1)
17
+ public_suffix (~> 2.0, >= 2.0.2)
18
+ codeclimate-test-reporter (1.0.8)
19
+ simplecov (<= 0.13)
19
20
  coderay (1.1.1)
20
21
  concurrent-ruby (1.0.5)
21
- coveralls (0.8.15)
22
+ coveralls (0.8.19)
22
23
  json (>= 1.8, < 3)
23
24
  simplecov (~> 0.12.0)
24
25
  term-ansicolor (~> 1.3)
25
26
  thor (~> 0.19.1)
26
- tins (>= 1.6.0, < 2)
27
+ tins (~> 1.6)
27
28
  crack (0.4.3)
28
29
  safe_yaml (~> 1.0.0)
29
30
  docile (1.1.5)
30
- dotenv (2.1.1)
31
- ffi (1.9.14)
31
+ dotenv (2.2.1)
32
+ ffi (1.9.18)
32
33
  formatador (0.2.5)
33
- guard (2.14.0)
34
+ guard (2.14.1)
34
35
  formatador (>= 0.2.4)
35
36
  listen (>= 2.7, < 4.0)
36
37
  lumberjack (~> 1.0)
@@ -43,18 +44,18 @@ GEM
43
44
  guard-minitest (2.4.6)
44
45
  guard-compat (~> 1.2)
45
46
  minitest (>= 3.0)
46
- hashdiff (0.3.0)
47
- httparty (0.14.0)
47
+ hashdiff (0.3.4)
48
+ httparty (0.15.5)
48
49
  multi_xml (>= 0.5.2)
49
- i18n (0.8.0)
50
- json (2.0.2)
50
+ i18n (0.8.4)
51
+ json (2.1.0)
51
52
  listen (3.1.5)
52
53
  rb-fsevent (~> 0.9, >= 0.9.4)
53
54
  rb-inotify (~> 0.9, >= 0.9.7)
54
55
  ruby_dep (~> 1.2)
55
- lumberjack (1.0.10)
56
+ lumberjack (1.0.12)
56
57
  method_source (0.8.2)
57
- minitest (5.9.1)
58
+ minitest (5.10.2)
58
59
  minitest-focus (1.1.2)
59
60
  minitest (>= 4, < 6)
60
61
  multi_xml (0.6.0)
@@ -66,28 +67,29 @@ GEM
66
67
  coderay (~> 1.1.0)
67
68
  method_source (~> 0.8.1)
68
69
  slop (~> 3.4)
70
+ public_suffix (2.0.5)
69
71
  rake (10.5.0)
70
- rb-fsevent (0.9.7)
71
- rb-inotify (0.9.7)
72
- ffi (>= 0.5.0)
73
- ruby_dep (1.4.0)
72
+ rb-fsevent (0.9.8)
73
+ rb-inotify (0.9.10)
74
+ ffi (>= 0.5.0, < 2)
75
+ ruby_dep (1.5.0)
74
76
  safe_yaml (1.0.4)
75
77
  shellany (0.0.1)
76
78
  simplecov (0.12.0)
77
79
  docile (~> 1.1.0)
78
80
  json (>= 1.8, < 3)
79
81
  simplecov-html (~> 0.10.0)
80
- simplecov-html (0.10.0)
82
+ simplecov-html (0.10.1)
81
83
  slop (3.6.0)
82
- term-ansicolor (1.4.0)
84
+ term-ansicolor (1.6.0)
83
85
  tins (~> 1.0)
84
- thor (0.19.1)
85
- thread_safe (0.3.5)
86
- tins (1.12.0)
87
- tzinfo (1.2.2)
86
+ thor (0.19.4)
87
+ thread_safe (0.3.6)
88
+ tins (1.14.0)
89
+ tzinfo (1.2.3)
88
90
  thread_safe (~> 0.1)
89
91
  vcr (3.0.3)
90
- webmock (2.1.0)
92
+ webmock (3.0.1)
91
93
  addressable (>= 2.3.6)
92
94
  crack (>= 0.3.2)
93
95
  hashdiff
@@ -112,4 +114,4 @@ DEPENDENCIES
112
114
  webmock
113
115
 
114
116
  BUNDLED WITH
115
- 1.14.3
117
+ 1.15.3
data/README.md CHANGED
@@ -23,7 +23,7 @@ Our goal is to incrementally integrate with them. **Contributions are welcome**
23
23
  | API | Version | Docs | Implemented? | Priority |
24
24
  | --- | --- | --- | --- | --- |
25
25
  | NFL | 1 | [📚](http://developer.sportradar.us/page/NFL_Official) | ✅ | 👍 |
26
- | MLB | 5 | [📚](http://developer.sportradar.us/docs/MLB_API) | - | - |
26
+ | MLB | 6 | [📚](https://developer.sportradar.com/files/indexBaseball.html#major-league-baseball-api-v6) | | 👍 |
27
27
  | NHL | 3 | [📚](http://developer.sportradar.us/docs/NHL_API) | - | - |
28
28
  | NBA | 3 | [📚](http://developer.sportradar.us/docs/NBA_API) | ✅ | - |
29
29
  | NCAAMB | 3 | [📚](http://developer.sportradar.us/docs/NCAA_Mens_Basketball) | ✅ | - |
@@ -86,15 +86,18 @@ summary = sim.match_summary(sim.simulation_match)
86
86
  boxscore = sim.match_boxscore(sim.simulation_match)
87
87
  ```
88
88
 
89
- ### NFL
89
+ ### Football
90
90
 
91
- It's possible to find the current simulation game:
91
+ It's possible to use simulation games from Sportradar. This allows you to see what data looks like during a game (including non game APIs), useful for development during the offseason.
92
92
 
93
93
  ```
94
- Sportradar::Api::Nfl.new('o').active_simulation
95
- =>
96
- https://api.sportradar.us/nfl-sim1/games/f45b4a31-b009-4039-8394-42efbc6d5532/boxscore.xml
97
- Live Game: Green Bay Packers vs Minnesota Vikings. Q2 00:08. game_id='f45b4a31-b009-4039-8394-42efbc6d5532'
94
+ sims = Sportradar::Api::Football::Nfl.simulations # => returns array of simulation games. Only 1 is inprogress at a time
95
+ sims.each(&:get_pbp).detect(&:started?)
96
+ nfl = Sportradar::Api::Football::Nfl.simulation # => returns Sportradar::Api::Football::Nfl instance with a sim api. useful for mid season stats, standings, etc
97
+
98
+ sims = Sportradar::Api::Football::Ncaafb.simulations # => returns array of simulation games. Only 1 is inprogress at a time
99
+ sims.each(&:get_pbp).detect(&:started?)
100
+ ncaafb = Sportradar::Api::Football::Ncaafb.simulation # => returns Sportradar::Api::Football::Ncaafb instance with a sim api. useful for mid season stats, standings, etc
98
101
  ```
99
102
 
100
103
  ## Development
@@ -0,0 +1,28 @@
1
+ # Sportradar Baseball
2
+
3
+ ![API Reference](http://developer.sportradar.com/files/MLBv6SVG.svg)
4
+
5
+ *Currently, only MLB is supported.*
6
+
7
+ ## MLB
8
+
9
+ Get started with official MLB api v6:
10
+
11
+ ```ruby
12
+ mlb = Sportradar::Api::Baseball::Mlb::Hierarchy.new
13
+ res = mlb.get_daily_summary # => res is the raw response from Sportradar. `mlb` now has game summaries to interact with
14
+ res = mlb.get_hierarchy # => res is the raw response from Sportradar. `mlb` now has leagues/divisions/teams to interact with
15
+ mlb.leagues.count # => 2
16
+ mlb.divisions.count # => 6
17
+ mlb.teams.count # => 30
18
+ res = mlb.get_schedule # => res is the raw response from Sportradar. `mlb` now has games to interact with
19
+ mlb.games.count # => 2430
20
+
21
+ game = mlb.games.sample # => Sportradar::Api::Baseball::Game
22
+ data = game.get_pbp # => data is raw response from Sportradar. `game` now has innings/half innings/atbats/pitches to interact with
23
+ game.innings.count # => 10 (Sportradar has an inning #0, representing starting lineups)
24
+ game.half_innings.count # => 20 (if the game went the full 9 innings)
25
+ data = game.get_summary # => data is raw response from Sportradar. `game` now statistical information to interact with
26
+ game.count # `count` contains information about the current game state, such as balls/strikes to current batter, current inning, and outs
27
+ ```
28
+
@@ -0,0 +1,25 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Error < Data
5
+ attr_accessor :response, :id, :type, :last_name, :first_name, :preferred_name, :jersey_number
6
+
7
+ def initialize(data, **opts)
8
+ @response = data
9
+ # @game = opts[:game]
10
+
11
+ update(data)
12
+ end
13
+ def update(data, **opts)
14
+ @id = data["id"]
15
+ @type = data["type"]
16
+ @last_name = data["last_name"]
17
+ @first_name = data["first_name"]
18
+ @preferred_name = data["preferred_name"]
19
+ @jersey_number = data["jersey_number"]
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,44 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Event < Data
5
+ attr_accessor :response, :id, :at_bat, :lineup, :warming_up, :half_inning
6
+ # alias :type :event_type
7
+
8
+ def initialize(hash, **opts)
9
+ @response = hash
10
+ @half_inning = opts[:half_inning]
11
+ @at_bat = AtBat.new(hash['at_bat'], event: self) if hash['at_bat']
12
+ @lineup = Lineup.new(hash['lineup'], event: self) if hash['lineup']
13
+ @warming_up = WarmingUp.new(hash['warming_up'], event: self) if hash['warming_up']
14
+ end
15
+
16
+ def description
17
+ (@at_bat || @lineup || @warming_up)&.description
18
+ end
19
+
20
+ # def self.new(data, **opts)
21
+ # klass = subclass(data.keys.first)
22
+ # klass.new(data, **opts)
23
+ # rescue => e
24
+ # binding.pry
25
+ # end
26
+
27
+ # def ==(other)
28
+ # @at_bat == other.at_bat && @warming_up == other.warming_up && @lineup == other.lineup
29
+ # end
30
+ def self.subclass(event_type)
31
+ subclasses[event_type]
32
+ end
33
+ def self.subclasses
34
+ @subclasses ||= {
35
+ 'at_bat' => AtBat,
36
+ 'lineup' => Lineup,
37
+ 'warming_up' => WarmingUp,
38
+ }.freeze
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,96 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Event
5
+ class AtBat < Data
6
+ attr_accessor :response, :id, :event, :hitter_id, :hitter_hand, :pitcher_id, :pitcher_hand, :outcome, :description
7
+
8
+ def initialize(data, **opts)
9
+ @response = data
10
+ @api = opts[:api]
11
+ @event = opts[:event]
12
+
13
+ @id = data["id"]
14
+ @type = data['type']
15
+
16
+ @pitches_hash = {}
17
+
18
+ update(data)
19
+ end
20
+
21
+ # def ==(other)
22
+ # return false if other.nil?
23
+ # @id == other.id && pitches == other.pitches
24
+ # end
25
+ def outcome_id
26
+ pitches.last&.outcome_id
27
+ end
28
+
29
+ def outcome
30
+ pitches.last&.outcome
31
+ end
32
+
33
+ def hit?
34
+ single? || double? || triple? || homerun?
35
+ end
36
+
37
+
38
+
39
+ def single?
40
+ outcome.to_s.include?('Single')
41
+ end
42
+
43
+ def double?
44
+ outcome.to_s.include?('Double')
45
+ end
46
+
47
+ def triple?
48
+ outcome.to_s.include?('Triple')
49
+ end
50
+
51
+ def homerun?
52
+ pitches.last&.homerun?
53
+ end
54
+
55
+ def runs?
56
+ runs.any?
57
+ end
58
+
59
+ def strikeout?
60
+ pitches.last&.count.dig('strikes') == 3
61
+ end
62
+
63
+ def runs
64
+ pitches.flat_map {|pitch| pitch.runners&.select {|x| x.ending_base == 4 } }.compact
65
+ end
66
+
67
+ def update(data, **opts)
68
+ @description = data['description'] if data['description']
69
+ @hitter_id = data['hitter_id'] if data['hitter_id']
70
+ @pitcher_id = data['pitcher_id'] if data['pitcher_id']
71
+ @hitter_hand = data['hitter_hand'] if data['hitter_hand']
72
+ @pitcher_hand = data['pitcher_hand'] if data['pitcher_hand']
73
+ # this hasn't been checked yet
74
+ # pitch events
75
+ pitches = data.dig('events').select {|pitch| pitch["type"] == 'pitch' }
76
+ create_data(@pitches_hash, pitches, klass: Pitch, api: @api, at_bat: self)
77
+ end
78
+
79
+ def data_key
80
+ 'at_bat'
81
+ end
82
+
83
+ def over?
84
+ pitches.last&.is_ab_over
85
+ end
86
+
87
+
88
+ def pitches
89
+ @pitches_hash.values
90
+ end
91
+ end
92
+
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,41 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Event
5
+ class Lineup < Data
6
+ attr_accessor :response, :id, :hitter_id, :outcome, :description, :event, :player_id, :order, :position, :team_id, :last_name, :first_name, :preferred_name, :jersey_number
7
+
8
+ def initialize(data, **opts)
9
+ @response = data
10
+ @event = opts[:event]
11
+ @description = data["description"]
12
+ @id = data["id"]
13
+ @player_id = data["player_id"]
14
+ @order = data["order"]
15
+ @position = data["position"]
16
+ @team_id = data["team_id"]
17
+ @last_name = data["last_name"]
18
+ @first_name = data["first_name"]
19
+ @preferred_name = data["preferred_name"]
20
+ @jersey_number = data["jersey_number"]
21
+
22
+ update(data)
23
+ end
24
+
25
+ def update(data, **opts)
26
+ lineup = event.half_inning.inning.game.lineup
27
+ lineup.update_from_lineup_event(data)
28
+ end
29
+
30
+ def data_key
31
+ 'lineup'
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+
41
+
@@ -0,0 +1,35 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Event
5
+ class WarmingUp < Data
6
+ attr_accessor :response, :id, :first_name, :last_name, :player_id, :team_id
7
+
8
+ def initialize(data, **opts)
9
+ @response = data
10
+ # @api = opts[:api]
11
+ # @half_inning = opts[:half_inning]
12
+ @event = opts[:event]
13
+ @id = data["id"]
14
+ @type = data['type']
15
+ @first_name = data['first_name'] if data['first_name']
16
+ @last_name = data['last_name'] if data['last_name']
17
+ @player_id = data['player_id'] if data['player_id']
18
+ @team_id = data['team_id'] if data['team_id']
19
+ @preferred_name = data['preferred_name'] if data['preferred_name']
20
+ update(data)
21
+ end
22
+
23
+ def update(data, **opts)
24
+ # parse pitches
25
+ end
26
+
27
+ def data_key
28
+ 'warming_up'
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Fielder < Data
5
+ attr_accessor :response, :id, :starting_base, :ending_base, :outcome_id, :out
6
+
7
+ def initialize(data, **opts)
8
+ @response = data
9
+ # @game = opts[:game]
10
+
11
+ update(data)
12
+ end
13
+ def update(data, **opts)
14
+ @id = data["id"]
15
+ @type = data["type"]
16
+ @sequence = data["sequence"]
17
+ @last_name = data["last_name"]
18
+ @first_name = data["first_name"]
19
+ @preferred_name = data["preferred_name"]
20
+ @jersey_number = data["jersey_number"]
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+ end