sportradar-api 0.11.29 → 0.11.30

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0ae518e6c2877be592959429a8f00eb2e39502f
4
- data.tar.gz: 0e453ae9626df7c4bb2a45e44e8e3377e4dae1db
3
+ metadata.gz: 76ddfa31a38fdaeecf69e5185c005d42b696b39e
4
+ data.tar.gz: a6ae4ad2d9340c1b7e61fbfb2478541b983f7861
5
5
  SHA512:
6
- metadata.gz: 706e4afd46682e50865b24147f3d8949eeab265ac4316420502614f2dcf36744a98b525e4e1e0004d6013d887439198a7b362a246ecee5eb7a5ccc4395c1380c
7
- data.tar.gz: 117e71073ed6fe17e24e714bcc4d2f1a00a7b5e8db89c35de6d532a79af9d758727aea9a1a712b3307c58aecd362f09c1eb9752bf93aa5230f9c0aca9317853d
6
+ metadata.gz: b955ecd7d861b43f7bea35bb1b31cc1b85e35dea5a3c24f46908554f9e6f8850674c5b99e89c23eb984763d5b5cd9fbf55ff3f7212ab6a3cf7db8319c9266d78
7
+ data.tar.gz: ef369787441c79cd2f5aeb2834b3e41d654bd9923a340efb56520cc3c45c18d5797b0ec09f89d97bd14eec57f5b1ad3d2d856b438ab28f0a58cb0995c3a3cc01
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sportradar-api (0.11.29)
4
+ sportradar-api (0.11.30)
5
5
  activesupport
6
6
  httparty (>= 0.14.0)
7
7
 
@@ -168,7 +168,7 @@ module Sportradar
168
168
  end
169
169
 
170
170
  def current_possession_team_id
171
- drives.grep(Sportradar::Api::Football::Drive).last.team_id
171
+ drives.grep(Sportradar::Api::Football::Drive).last&.team_id
172
172
  end
173
173
 
174
174
  def next_possession_team_id
@@ -56,6 +56,8 @@ module Sportradar
56
56
  # ["kick", "rush", "pass", "punt", "penalty", nil, "fieldgoal", "extrapoint"]
57
57
  def parse_description_for_drive_end
58
58
  parsed_ending = case @description
59
+ when /no play/i
60
+ nil
59
61
  when /intercepted/i
60
62
  :interception
61
63
  when /fumbles/i
@@ -43,18 +43,28 @@ module Sportradar
43
43
  @participants = data["participants"] if data["participants"]
44
44
  @play_type = data["play_type"] if data["play_type"]
45
45
  @sequence = data["sequence"] if data["sequence"]
46
- @players = data["players"] if data["players"]
46
+
47
47
  @deleted = data["deleted"] || @deleted
48
48
 
49
49
  @details = data["details"].gsub('.json', '') if data["details"]
50
50
 
51
- @statistics = data['statistics'] ? Sportradar::Api::Football::PlayStatistics.new(data['statistics']) : OpenStruct.new
52
- parse_player if @statistics
51
+ if data['statistics']
52
+ @statistics = Sportradar::Api::Football::PlayStatistics.new(data['statistics'])
53
+ elsif data['players']
54
+ @statistics = Sportradar::Api::Football::PlayStatistics.new(data['players'])
55
+ else
56
+ @statistics ||= OpenStruct.new(players: [])
57
+ end
58
+ parse_player
53
59
  @wall_clock = data["wall_clock"]
54
60
 
55
61
  self
56
62
  end
57
63
 
64
+ def players
65
+ statistics.players
66
+ end
67
+
58
68
  def deleted?
59
69
  !!@deleted
60
70
  end
@@ -94,11 +104,11 @@ module Sportradar
94
104
  # check for fumble/interception
95
105
  parse_description_for_drive_end
96
106
  when 'punt'
97
- :punt
107
+ parse_description_for_drive_end
98
108
  when 'penalty'
99
109
  nil
100
110
  when 'fieldgoal'
101
- :fg
111
+ parse_description_for_drive_end # nullified plays still have FG
102
112
  when 'extrapoint'
103
113
  :pat
104
114
  else
@@ -108,6 +118,8 @@ module Sportradar
108
118
 
109
119
  def parse_description_for_drive_end
110
120
  parsed_ending = case @description
121
+ when /no play/i
122
+ nil
111
123
  when /intercepted/i
112
124
  :interception
113
125
  when /fumbles/i
@@ -6,6 +6,15 @@ module Sportradar
6
6
  def initialize(data)
7
7
  data = [data] if data.is_a?(Hash)
8
8
  @response = data
9
+ if data.first['name'] # indicates college data structures. we want to convert it to nfl data structures
10
+ data.map! do |hash|
11
+ type = self.class.college_type_translations.each_key.detect { |str| hash.key?(str) }
12
+ binding.pry if type.nil?
13
+ stats = hash.delete(type)
14
+ new_team = { 'id' => hash['team'], 'alias' => hash['team'] } # use intermediate variable to avoid temp memory blowup
15
+ new_hash = { 'player' => hash, 'team' => new_team, 'stat_type' => self.class.college_type_translations[type] }.merge(stats)
16
+ end
17
+ end
9
18
  data.each do |hash|
10
19
  var = instance_variable_get("@#{hash['stat_type']}")
11
20
  unless var
@@ -27,6 +36,27 @@ module Sportradar
27
36
  @players_by_team ||= players.group_by(&:team)
28
37
  end
29
38
 
39
+ def self.college_type_translations
40
+ @college_type_translations ||= {
41
+ "kickoffs" => 'kick',
42
+ "kick_return" => 'return',
43
+ "rushing" => 'rush',
44
+ "fumble" => 'fumble',
45
+ "defense" => 'defense',
46
+ "receiving" => 'receive',
47
+ "punting" => 'punt',
48
+ "penalty" => 'penalty',
49
+ "passing" => 'pass',
50
+ "field_goal" => 'field_goal',
51
+ "extra_point" => 'extra_point',
52
+ "blocked_field_goal_return" => 'block',
53
+ "interception_return" => 'return',
54
+ "fumble_return" => 'return',
55
+ "punt_return" => 'return',
56
+ 'misc' => 'misc',
57
+ }.freeze
58
+ end
59
+
30
60
  def self.stat_type_classes
31
61
  @stat_type_classes ||= {
32
62
  'kick' => PlayKickStatistics,
@@ -52,7 +82,8 @@ module Sportradar
52
82
  class MiscStatistics < Data
53
83
  attr_reader :team, :player, :yards
54
84
  def initialize(data)
55
- @yards = data['yards']
85
+ @response = data
86
+ @yards = data['yards'] || data['yds']
56
87
  @team = OpenStruct.new(data['team']) if data['team']
57
88
  @player = OpenStruct.new(data['player']) if data['player']
58
89
  end
@@ -61,8 +92,9 @@ module Sportradar
61
92
  class BlockStatistics < Data
62
93
  attr_reader :team, :player, :block, :category
63
94
  def initialize(data)
95
+ @response = data
64
96
  @category = data['category']
65
- @block = data['block']
97
+ @block = data['block'] || data['blk']
66
98
  @team = OpenStruct.new(data['team']) if data['team']
67
99
  @player = OpenStruct.new(data['player']) if data['player']
68
100
  end
@@ -71,6 +103,7 @@ module Sportradar
71
103
  class PlayDownConversionStatistics < Data
72
104
  attr_accessor :attempt, :complete, :down, :nullified, :team, :player
73
105
  def initialize(data)
106
+ @response = data
74
107
  @attempt = data['attempt']
75
108
  @complete = data['complete']
76
109
  @down = data['down']
@@ -87,6 +120,7 @@ module Sportradar
87
120
  class PlayDefenseStatistics < Data
88
121
  attr_accessor :ast_tackle, :interception, :int_yards, :nullified, :pass_defended, :primary, :qb_hit, :sack, :sack_yards, :tlost, :tlost_yards, :team, :player, :tackle, :int_touchdown
89
122
  def initialize(data)
123
+ @response = data
90
124
  @ast_tackle = data['ast_tackle']
91
125
  @interception = data['interception']
92
126
  @int_yards = data['int_yards']
@@ -113,6 +147,7 @@ module Sportradar
113
147
  class PlayExtraPointStatistics < Data
114
148
  attr_accessor :attempt, :nullified
115
149
  def initialize(data)
150
+ @response = data
116
151
  @attempt = data['attempt']
117
152
  @nullified = data['nullified']
118
153
  end
@@ -125,11 +160,13 @@ module Sportradar
125
160
  class PlayFieldGoalStatistics < Data
126
161
  attr_accessor :attempt, :att_yards, :missed, :yards, :nullified, :blocked, :team, :player
127
162
  def initialize(data)
128
- @attempt = data['attempt']
163
+ "att"=>1, "made"=>1, "yds"=>17, "att_yds"=>17, "blk"=>0, "ret"=>0}
164
+ @response = data
165
+ @attempt = data['attempt'] || data['att']
129
166
  @att_yards = data['att_yards']
130
- @missed = data['missed']
131
- @blocked = data['blocked']
132
- @yards = data['yards']
167
+ @missed = data['missed'] || (data['made'] - 1).abs
168
+ @blocked = data['blocked'] || data['blk']
169
+ @yards = data['yards'] || data['yds']
133
170
  @nullified = data['nullified']
134
171
  @team = OpenStruct.new(data['team']) if data['team']
135
172
  @player = OpenStruct.new(data['player']) if data['player']
@@ -143,6 +180,7 @@ module Sportradar
143
180
  class PlayFirstDownStatistics < Data
144
181
  attr_accessor :category, :nullified, :team
145
182
  def initialize(data)
183
+ @response = data
146
184
  @category = data['category']
147
185
  @team = OpenStruct.new(data['team']) if data['team']
148
186
  @nullified = data['nullified']
@@ -156,17 +194,18 @@ module Sportradar
156
194
  class PlayPassingStatistics < Data
157
195
  attr_accessor :attempt, :att_yards, :complete, :firstdown, :goaltogo, :inside_20, :interception, :sack, :sack_yards, :touchdown, :yards, :nullified, :team, :player
158
196
  def initialize(data)
159
- @attempt = data['attempt']
197
+ @response = data
198
+ @attempt = data['attempt'] || data['att']
160
199
  @att_yards = data['att_yards']
161
- @complete = data['complete']
162
- @firstdown = data['firstdown']
200
+ @complete = data['complete'] || data['cmp']
201
+ @firstdown = data['firstdown'] || data['fd']
163
202
  @goaltogo = data['goaltogo']
164
- @inside_20 = data['inside_20']
165
- @interception = data['interception']
166
- @sack = data['sack']
167
- @sack_yards = data['sack_yards']
168
- @touchdown = data['touchdown']
169
- @yards = data['yards']
203
+ @inside_20 = data['inside_20'] || data['rz_att']
204
+ @interception = data['interception'] || data['int']
205
+ @sack = data['sack'] || data['sk']
206
+ @sack_yards = data['sack_yards'] || data['sk_yds']
207
+ @touchdown = data['touchdown'] || data['td']
208
+ @yards = data['yards'] || data['yds']
170
209
  @team = OpenStruct.new(data['team']) if data['team']
171
210
  @player = OpenStruct.new(data['player']) if data['player']
172
211
  @nullified = data['nullified']
@@ -178,10 +217,12 @@ module Sportradar
178
217
  end
179
218
 
180
219
  class PlayPenaltyStatistics < Data
181
- attr_accessor :penalty, :yards, :nullified, :team, :player
220
+ attr_accessor :penalty, :yards, :nullified, :team, :player, :first_down
182
221
  def initialize(data)
183
- @penalty = data['penalty'] if data['penalty']
184
- @yards = data['yards'] if data['yards']
222
+ @response = data
223
+ @penalty = data['penalty'] || data['abbr'] # unsure about abbr here
224
+ @yards = data['yards'] || data['yds']
225
+ @first_down = data['fd']
185
226
  @team = OpenStruct.new(data['team']) if data['team']
186
227
  @player = OpenStruct.new(data['player']) if data['player']
187
228
  @nullified = data['nullified']
@@ -195,13 +236,15 @@ module Sportradar
195
236
  class PlayPuntStatistics < Data
196
237
  attr_accessor :attempt, :downed, :faircatch, :inside_20, :out_of_bounds, :touchback, :yards, :nullified, :team, :player
197
238
  def initialize(data)
239
+ @response = data
198
240
  data = data.first if data.is_a?(Array)
199
- @attempt = data['attempt']
241
+ @attempt = data['attempt'] || data['punts']
200
242
  @downed = data['downed']
201
- @inside_20 = data['inside_20']
243
+ @inside_20 = data['inside_20'] || data['in20']
202
244
  @out_of_bounds = data['out_of_bounds']
203
- @touchback = data['touchback']
204
- @yards = data['yards']
245
+ @touchback = data['touchback'] || data['tb']
246
+ @yards = data['yards'] || data['yds']
247
+ @blocked = data['blk']
205
248
  @team = OpenStruct.new(data['team']) if data['team']
206
249
  @player = OpenStruct.new(data['player']) if data['player']
207
250
  @nullified = data['nullified']
@@ -215,14 +258,15 @@ module Sportradar
215
258
  class PlayReceiveStatistics < Data
216
259
  attr_accessor :firstdown, :goaltogo, :inside_20, :reception, :target, :touchdown, :yards, :yards_after_catch, :nullified, :team, :player
217
260
  def initialize(data)
218
- @firstdown = data['firstdown']
261
+ @response = data
262
+ @firstdown = data['firstdown'] || data['fd']
219
263
  @goaltogo = data['goaltogo']
220
- @inside_20 = data['inside_20']
221
- @reception = data['reception']
222
- @target = data['target']
223
- @touchdown = data['touchdown']
224
- @yards = data['yards']
225
- @yards_after_catch = data['yards_after_catch']
264
+ @inside_20 = data['inside_20'] || data['rz_tar']
265
+ @reception = data['reception'] || data['rec']
266
+ @target = data['target'] || data['tar']
267
+ @touchdown = data['touchdown'] || data['td']
268
+ @yards = data['yards'] || data['yds']
269
+ @yards_after_catch = data['yards_after_catch'] || data['yac']
226
270
  @team = OpenStruct.new(data['team']) if data['team']
227
271
  @player = OpenStruct.new(data['player']) if data['player']
228
272
  @nullified = data['nullified']
@@ -236,6 +280,7 @@ module Sportradar
236
280
  class PlayFumbleStatistics < Data
237
281
  attr_reader :own_rec, :own_rec_yards, :forced, :team, :player
238
282
  def initialize(data)
283
+ @response = data
239
284
  @own_rec = data['own_rec']
240
285
  @own_rec_yards = data['own_rec_yards']
241
286
  @forced = data['forced']
@@ -248,14 +293,15 @@ module Sportradar
248
293
  class PlayRushStatistics < Data
249
294
  attr_accessor :attempt, :firstdown, :tlost, :tlost_yards, :yards, :inside_20, :goal_to_go, :team, :player, :nullified, :touchdown
250
295
  def initialize(data)
251
- @attempt = data['attempt']
252
- @firstdown = data['firstdown']
296
+ @response = data
297
+ @attempt = data['attempt'] || data['att']
298
+ @firstdown = data['firstdown'] || data['fd']
253
299
  @goal_to_go = data['goal_to_go']
254
- @inside_20 = data['inside_20']
300
+ @inside_20 = data['inside_20'] || data['rz_att']
255
301
  @tlost = data['tlost']
256
302
  @tlost_yards = data['tlost_yards']
257
- @touchdown = data['touchdown']
258
- @yards = data['yards']
303
+ @touchdown = data['touchdown'] || data['td']
304
+ @yards = data['yards'] || data['yds']
259
305
 
260
306
  @team = OpenStruct.new(data['team']) if data['team']
261
307
  @player = OpenStruct.new(data['player']) if data['player']
@@ -271,12 +317,14 @@ module Sportradar
271
317
  class PlayKickStatistics < Data
272
318
  attr_accessor :attempt, :yards, :gross_yards, :touchback, :team, :player, :endzone, :inside_20, :nullified
273
319
  def initialize(data)
320
+ @response = data
274
321
  @endzone = data['endzone']
275
- @inside_20 = data['inside_20']
276
- @attempt = data['attempt']
277
- @yards = data['yards']
278
- @gross_yards = data['gross_yards']
279
- @touchback = data['touchback']
322
+ @inside_20 = data['inside_20'] || data['in20']
323
+ @attempt = data['attempt'] || data['kicks']
324
+ @returned = data['ret']
325
+ @yards = data['yards'] || data['yds']
326
+ @gross_yards = data['gross_yards'] || data['net_yds']
327
+ @touchback = data['touchback'] || data['tb']
280
328
  @team = OpenStruct.new(data['team']) if data['team']
281
329
  @player = OpenStruct.new(data['player']) if data['player']
282
330
  @nullified = data['nullified']
@@ -290,6 +338,7 @@ module Sportradar
290
338
  class ConversionStatistics < Data
291
339
  attr_reader :stat_type, :attempt, :complete, :category, :player, :team
292
340
  def initialize(data)
341
+ @response = data
293
342
  @stat_type = data['stat_type']
294
343
  @attempt = data['attempt']
295
344
  @complete = data['complete']
@@ -302,14 +351,15 @@ module Sportradar
302
351
  class PlayReturnStatistics < Data
303
352
  attr_accessor :category, :downed, :faircatch, :out_of_bounds, :return, :touchback, :yards, :team, :nullified, :player, :touchdown
304
353
  def initialize(data)
354
+ @response = data
305
355
  @category = data['category']
306
356
  @downed = data['downed']
307
- @faircatch = data['faircatch']
357
+ @faircatch = data['faircatch'] || data['fc']
308
358
  @out_of_bounds = data['out_of_bounds']
309
- @return = data['return']
310
- @touchback = data['touchback']
311
- @touchdown = data['touchdown']
312
- @yards = data['yards']
359
+ @return = data['return'] || data['returns']
360
+ @touchback = data['touchback'] || data['tb']
361
+ @touchdown = data['touchdown'] || data['td']
362
+ @yards = data['yards'] || data['yds']
313
363
  @team = OpenStruct.new(data['team']) if data['team']
314
364
  @player = OpenStruct.new(data['player']) if data['player']
315
365
  @nullified = data['nullified']
@@ -1,5 +1,5 @@
1
1
  module Sportradar
2
2
  module Api
3
- VERSION = "0.11.29"
3
+ VERSION = "0.11.30"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportradar-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.29
4
+ version: 0.11.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Eggett