sportradar-api 0.12.0 → 0.12.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a544bed7327664085716d731056ce27741ae3235
4
- data.tar.gz: d48e44f4d80b63b24a482ac6e40bb4f55382f5cf
3
+ metadata.gz: b514a3e1f6532c216d3d19df5c189b45e4686f0c
4
+ data.tar.gz: 9c08fc98da409006c5cea61c24b8976cb3af8bde
5
5
  SHA512:
6
- metadata.gz: 440c2f9bffb27fb8c11d4ccb7d76cfcd6eca961e77b1dafe7d445bb95e685b8391051a38c0a1c8af2b999bd7cbaf4ac5a5be073586e6c084821770fa18e78f28
7
- data.tar.gz: 548e34be5cc5b946a92b792df65200f66c852c24ec5f9ff933f2f5d595a416df7fcb623cbe01e69dd54cf7a67693d1f352b6b765949495d5d85377ace8900ee0
6
+ metadata.gz: 5058da90f72b7c8ddbf3b9172797e8684ae3e1275c2543439e44b37d462684e05b2a65400a14c02dfea087caceaf30656b35c4c2fc98d27a21c2cc82e31ffa4b
7
+ data.tar.gz: 64dd72c03e03dec6bfd556da1b2a677c9bbf1ddfe70add51c73fb899f8a6a64808c46e75b118e558c0034b8ed651ff9f4743571aa0c629ba7468c78c5af82c58
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sportradar-api (0.12.0)
4
+ sportradar-api (0.12.1)
5
5
  activesupport
6
6
  httparty (>= 0.14.0)
7
7
 
@@ -60,6 +60,10 @@ module Sportradar
60
60
  pitches.last&.count.dig('strikes') == 3
61
61
  end
62
62
 
63
+ def walk?
64
+ over? && pitches.last&.ball?
65
+ end
66
+
63
67
  def runs
64
68
  pitches.flat_map {|pitch| pitch.runners&.select {|x| x.ending_base == 4 } }.compact
65
69
  end
@@ -2,7 +2,7 @@ module Sportradar
2
2
  module Api
3
3
  module Baseball
4
4
  class Player < Data
5
- attr_accessor :response, :id, :number, :full_name, :first_name, :last_name, :position, :primary_position, :birth_place, :college, :height, :weight, :draft, :hitting, :pitching, :fielding, :team
5
+ attr_accessor :response, :id, :number, :full_name, :first_name, :last_name, :position, :primary_position, :birth_place, :college, :height, :weight, :draft, :hitting, :pitching, :fielding, :team, :stats
6
6
 
7
7
  def initialize(data, **opts)
8
8
  @response = data # comment this out when done developing
@@ -62,13 +62,13 @@ module Sportradar
62
62
  update_draft(data)
63
63
 
64
64
  @team.update_player_stats(self, data['statistics'], opts[:game]) if data['statistics']
65
- if stats = data['statistics']
66
- @fielding = stats.dig('fielding', 'overall')
67
- @pitching = stats.dig('pitching', 'overall')
68
- @hitting = stats.dig('hitting', 'overall')
65
+ if @stats = data['statistics']
66
+ @fielding = @stats.dig('fielding', 'overall')
67
+ @pitching = @stats.dig('pitching', 'overall')
68
+ @hitting = @stats.dig('hitting', 'overall')
69
69
 
70
70
  # used to be @team, lets leave as opt until it needs to go back
71
- opts[:team].update_player_stats(self, stats)
71
+ opts[:team].update_player_stats(self, @stats)
72
72
  end
73
73
 
74
74
  self
@@ -81,7 +81,7 @@ module Sportradar
81
81
  create_data(@players_hash, data, klass: Player, api: api, team: self, game: game)
82
82
  end
83
83
  def update_player_stats(player, stats, game = nil)
84
- game ? game.update_player_stats(player, stats) : @player_stats.merge!(player.id => stats.merge!(player: player))
84
+ game ? game.update_player_stats(player, stats) : @player_stats.merge!(player.id => stats.merge(player: player))
85
85
  end
86
86
  def parse_records(data)
87
87
  @records['overall'] = Record.new(data, type: 'overall')
@@ -99,7 +99,7 @@ module Sportradar
99
99
  # data retrieval
100
100
 
101
101
  def get_roster
102
- data = api.get_data(path_roster)
102
+ data = api.get_data(path_roster).to_h
103
103
  ingest_roster(data)
104
104
  end
105
105
  def ingest_roster(data)
@@ -112,14 +112,14 @@ module Sportradar
112
112
  end
113
113
 
114
114
  def get_season_stats(year = Date.today.year)
115
- data = api.get_data(path_season_stats(year))
115
+ data = api.get_data(path_season_stats(year)).to_h
116
116
  ingest_season_stats(data)
117
117
  end
118
118
  def ingest_season_stats(data)
119
119
  parse_season_stats(data)
120
120
  end
121
- def queue_season_stats
122
- url, headers, options, timeout = api.get_request_info(path_season_stats)
121
+ def queue_season_stats(year = Date.today.year)
122
+ url, headers, options, timeout = api.get_request_info(path_season_stats(year))
123
123
  {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_season_stats)}
124
124
  end
125
125
 
@@ -3,7 +3,7 @@ module Sportradar
3
3
  module Basketball
4
4
  class Nba
5
5
  class Player < Data
6
- attr_accessor :response, :id, :number, :full_name, :first_name, :last_name, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft
6
+ attr_accessor :response, :id, :number, :full_name, :first_name, :last_name, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft, :stats
7
7
  # @all_hash = {}
8
8
  # def self.new(data, **opts)
9
9
  # existing = @all_hash[data['id']]
@@ -69,7 +69,11 @@ module Sportradar
69
69
  @team.update_player_stats(self, data['statistics'], opts[:game]) if data['statistics']
70
70
  if avgs = data['average']
71
71
  @totals = data['total']
72
- @averages = avgs.except(:player)
72
+ @averages = avgs
73
+ @stats = {
74
+ 'total' => @totals,
75
+ 'averages' => @averages,
76
+ }
73
77
  @team.update_player_stats(self, avgs)
74
78
  end
75
79
 
@@ -3,7 +3,7 @@ module Sportradar
3
3
  module Basketball
4
4
  class Ncaamb
5
5
  class Player < Data
6
- attr_accessor :response, :id, :number, :full_name, :first_name, :last_name, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft
6
+ attr_accessor :response, :id, :number, :full_name, :first_name, :last_name, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft, :stats
7
7
  # @all_hash = {}
8
8
  # def self.new(data, **opts)
9
9
  # existing = @all_hash[data['id']]
@@ -71,7 +71,11 @@ module Sportradar
71
71
  @team.update_player_stats(self, data['statistics'], opts[:game]) if data['statistics']
72
72
  if avgs = data['average']
73
73
  @totals = data['total']
74
- @averages = avgs.except(:player)
74
+ @averages = avgs
75
+ @stats = {
76
+ 'total' => @totals,
77
+ 'averages' => @averages,
78
+ }
75
79
  @team.update_player_stats(self, avgs)
76
80
  end
77
81
 
@@ -84,39 +84,50 @@ module Sportradar
84
84
  create_data(@players_hash, data, klass: player_class, api: api, team: self, game: game)
85
85
  end
86
86
  def update_player_stats(player, stats, game = nil)
87
- game ? game.update_player_stats(player, stats) : @player_stats.merge!(player.id => stats.merge!(player: player))
87
+ game ? game.update_player_stats(player, stats) : @player_stats.merge!(player.id => stats.merge(player: player))
88
88
  end
89
+ def parse_records(data)
90
+ @records['overall'] = Record.new(data, type: 'overall')
91
+ data['records'].each { |record| @records[record['record_type']] = Record.new(record, type: record['record_type']) }
92
+ end
93
+
94
+ def parse_season_stats(data)
95
+ @team_stats = data.dig('own_record')
96
+ update(data)
97
+ player_data = data.dig('players')
98
+ create_data(@players_hash, player_data, klass: player_class, api: api, team: self)
99
+ data
100
+ end
101
+
102
+
103
+ # data retrieval
89
104
 
90
105
  def get_roster
91
- data = api.get_data(path_roster)
106
+ data = api.get_data(path_roster).to_h
92
107
  ingest_roster(data)
93
108
  end
94
109
  def ingest_roster(data)
95
110
  update(data)
96
111
  data
97
112
  end
113
+ def queue_roster
114
+ url, headers, options, timeout = api.get_request_info(path_roster)
115
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_roster)}
116
+ end
98
117
 
99
- def get_season_stats
100
- data = api.get_data(path_season_stats)
118
+ def get_season_stats(year = Date.today.year)
119
+ data = api.get_data(path_season_stats(year)).to_h
101
120
  ingest_season_stats(data)
102
121
  end
103
122
  def ingest_season_stats(data)
104
123
  parse_season_stats(data)
105
124
  end
106
-
107
- def parse_records(data)
108
- @records['overall'] = Record.new(data, type: 'overall')
109
- data['records'].each { |record| @records[record['record_type']] = Record.new(record, type: record['record_type']) }
110
- end
111
-
112
- def parse_season_stats(data)
113
- @team_stats = data.dig('own_record')
114
- update(data)
115
- player_data = data.dig('players')
116
- create_data(@players_hash, player_data, klass: player_class, api: api, team: self)
117
- data
125
+ def queue_season_stats
126
+ url, headers, options, timeout = api.get_request_info(path_season_stats)
127
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_season_stats)}
118
128
  end
119
129
 
130
+ # url path helpers
120
131
  def path_base
121
132
  "teams/#{ id }"
122
133
  end
@@ -126,8 +137,8 @@ module Sportradar
126
137
  def path_roster
127
138
  "#{ path_base }/profile"
128
139
  end
129
- def path_season_stats
130
- "#{ path_base_stats }/statistics"
140
+ def path_season_stats(year)
141
+ "#{ path_base_stats(year) }/statistics"
131
142
  end
132
143
 
133
144
  end
@@ -159,8 +159,8 @@ module Sportradar
159
159
  @score.merge!(score)
160
160
  end
161
161
 
162
- def update_drives(data)
163
- create_data(@drives_hash, data, klass: drive_class, api: api, game: self)
162
+ def update_drives(data, **opts)
163
+ create_data(@drives_hash, data, klass: drive_class, api: api, game: self, **opts)
164
164
  end
165
165
 
166
166
  def leading_team_id
@@ -173,7 +173,7 @@ module Sportradar
173
173
  end
174
174
 
175
175
  def current_possession_team_id
176
- drives.grep(Sportradar::Api::Football::Drive).last&.team_id
176
+ drives.last&.team_id
177
177
  end
178
178
 
179
179
  def next_possession_team_id
@@ -209,10 +209,15 @@ module Sportradar
209
209
  @pbp ||= quarters
210
210
  end
211
211
 
212
- def drives
212
+ def drives_with_events
213
213
  @drives_hash.values
214
214
  end
215
215
 
216
+ def drives
217
+ drives_with_events.grep(Sportradar::Api::Football::Drive)
218
+ end
219
+
220
+
216
221
  def plays
217
222
  drives.flat_map(&:plays).compact
218
223
  end
@@ -371,7 +376,7 @@ module Sportradar
371
376
  def ingest_pbp(data)
372
377
  data = data
373
378
  update(data, source: :pbp)
374
- create_data(@quarters_hash, data[period_key], klass: quarter_class, identifier: 'number', api: api, game: self) if data[period_key]
379
+ create_data(@quarters_hash, data[period_key], klass: quarter_class, identifier: quarter_class.period_index, api: api, game: self) if data[period_key]
375
380
  check_newness(:pbp, plays.last&.description)
376
381
  check_newness(:score, @score)
377
382
  @pbp = @quarters_hash.values
@@ -9,7 +9,7 @@ module Sportradar
9
9
  def update(data, **opts)
10
10
  super.tap {
11
11
  if opts[:game]
12
- game_drives = opts[:game].drives.grep(Sportradar::Api::Football::Drive)
12
+ game_drives = opts[:game].drives
13
13
  @sequence = (game_drives.index(self) || game_drives.size) + 1
14
14
  end
15
15
  }
@@ -8,6 +8,14 @@ module Sportradar
8
8
  Drive
9
9
  end
10
10
 
11
+ def overtime?
12
+ @number > 4
13
+ end
14
+
15
+ def self.period_index
16
+ 'number'
17
+ end
18
+
11
19
  end
12
20
  end
13
21
  end
@@ -8,6 +8,14 @@ module Sportradar
8
8
  Drive
9
9
  end
10
10
 
11
+ def overtime?
12
+ @sequence > 4
13
+ end
14
+
15
+ def self.period_index
16
+ 'sequence'
17
+ end
18
+
11
19
  end
12
20
  end
13
21
  end
@@ -2,7 +2,7 @@ module Sportradar
2
2
  module Api
3
3
  module Football
4
4
  class Player < Data
5
- attr_accessor :response, :id, :preferred_name, :number, :name_full, :name_first, :name_last, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft, :depth, :api
5
+ attr_accessor :response, :id, :preferred_name, :number, :name_full, :name_first, :name_last, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft, :depth, :api, :stats
6
6
 
7
7
  def initialize(data, **opts)
8
8
  @response = data
@@ -62,10 +62,16 @@ module Sportradar
62
62
  # update_injuries(data)
63
63
  # update_draft(data)
64
64
 
65
- if stats = data['statistics']
66
- @totals = stats
65
+ if @stats = data['statistics']
66
+ @totals = @stats
67
67
  # binding.pry
68
- @team.update_player_stats(self, stats.dup, opts[:game])
68
+ @team.update_player_stats(self, @stats.dup, opts[:game])
69
+ elsif @stats = data['games_played']
70
+ @stats = data.dup
71
+ %w[id name jersey reference position].each do |useless_key|
72
+ @stats.delete(useless_key)
73
+ end
74
+ @totals = @stats
69
75
  else
70
76
  @totals = {}
71
77
  end
@@ -6,7 +6,7 @@ module Sportradar
6
6
 
7
7
  def initialize(data, **opts)
8
8
  @response = data
9
- @id = data["number"]
9
+ @id = data[self.class.period_index]
10
10
  @api = opts[:api]
11
11
 
12
12
  @drives_hash = {}
@@ -24,7 +24,7 @@ module Sportradar
24
24
  @away_info = data["away"]
25
25
 
26
26
  if data['pbp']
27
- opts[:game].update_drives(data['pbp'])
27
+ opts[:game].update_drives(data['pbp'], quarter: self)
28
28
  create_data(@drives_hash, data['pbp'], klass: drive_class, api: api, quarter: self)
29
29
  end
30
30
 
@@ -32,7 +32,7 @@ module Sportradar
32
32
  end
33
33
 
34
34
  def overtime?
35
- @number > 4
35
+ (@sequence || @number) > 4
36
36
  end
37
37
 
38
38
  def drives
@@ -87,7 +87,7 @@ module Sportradar
87
87
  create_data(@players_hash, data, klass: player_class, api: api, team: self, game: game)
88
88
  end
89
89
  def update_player_stats(player, stats, game = nil)
90
- game ? game.update_player_stats(player, stats) : @player_stats.merge!(player.id => stats.merge!(player: player))
90
+ game ? game.update_player_stats(player, stats) : @player_stats.merge!(player.id => stats.merge(player: player))
91
91
  end
92
92
 
93
93
  def get_roster
@@ -98,6 +98,11 @@ module Sportradar
98
98
  update(data)
99
99
  data
100
100
  end
101
+ def queue_roster
102
+ url, headers, options, timeout = api.get_request_info(path_roster)
103
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_roster)}
104
+ end
105
+
101
106
 
102
107
  def get_season_stats(year = default_year)
103
108
  data = api.get_data(path_season_stats(year)).to_h
@@ -1,5 +1,5 @@
1
1
  module Sportradar
2
2
  module Api
3
- VERSION = "0.12.0"
3
+ VERSION = "0.12.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportradar-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Eggett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-29 00:00:00.000000000 Z
11
+ date: 2017-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler