sportradar-api 0.9.59 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.env.sample +5 -1
- data/Gemfile.lock +4 -4
- data/README.md +1 -1
- data/lib/sportradar/api.rb +1 -0
- data/lib/sportradar/api/basketball.rb +15 -6
- data/lib/sportradar/api/basketball/game.rb +285 -0
- data/lib/sportradar/api/basketball/injury.rb +6 -6
- data/lib/sportradar/api/basketball/nba.rb +22 -25
- data/lib/sportradar/api/basketball/nba/conference.rb +1 -1
- data/lib/sportradar/api/basketball/nba/division.rb +2 -1
- data/lib/sportradar/api/basketball/nba/game.rb +12 -249
- data/lib/sportradar/api/basketball/nba/hierarchy.rb +5 -4
- data/lib/sportradar/api/basketball/nba/player.rb +8 -8
- data/lib/sportradar/api/basketball/nba/quarter.rb +1 -1
- data/lib/sportradar/api/basketball/nba/schedule.rb +17 -6
- data/lib/sportradar/api/basketball/nba/scoring.rb +15 -95
- data/lib/sportradar/api/basketball/nba/season.rb +6 -5
- data/lib/sportradar/api/basketball/nba/team.rb +5 -122
- data/lib/sportradar/api/basketball/ncaamb.rb +133 -0
- data/lib/sportradar/api/basketball/ncaamb/conference.rb +41 -0
- data/lib/sportradar/api/basketball/ncaamb/division.rb +42 -0
- data/lib/sportradar/api/basketball/ncaamb/game.rb +60 -0
- data/lib/sportradar/api/basketball/ncaamb/half.rb +49 -0
- data/lib/sportradar/api/basketball/ncaamb/hierarchy.rb +65 -0
- data/lib/sportradar/api/basketball/ncaamb/player.rb +162 -0
- data/lib/sportradar/api/basketball/ncaamb/schedule.rb +41 -0
- data/lib/sportradar/api/basketball/ncaamb/season.rb +42 -0
- data/lib/sportradar/api/basketball/ncaamb/team.rb +40 -0
- data/lib/sportradar/api/basketball/play.rb +15 -5
- data/lib/sportradar/api/basketball/plays.rb +1 -0
- data/lib/sportradar/api/basketball/plays/base.rb +30 -6
- data/lib/sportradar/api/basketball/plays/deadball.rb +11 -0
- data/lib/sportradar/api/basketball/plays/end_period.rb +2 -2
- data/lib/sportradar/api/basketball/plays/free_throw_miss.rb +3 -1
- data/lib/sportradar/api/basketball/plays/rebound.rb +5 -1
- data/lib/sportradar/api/basketball/plays/shot_made.rb +4 -3
- data/lib/sportradar/api/basketball/plays/shot_miss.rb +4 -3
- data/lib/sportradar/api/basketball/plays/timeout.rb +0 -3
- data/lib/sportradar/api/basketball/plays/turnover.rb +1 -1
- data/lib/sportradar/api/basketball/record.rb +32 -0
- data/lib/sportradar/api/basketball/scoring.rb +103 -0
- data/lib/sportradar/api/basketball/team.rb +148 -0
- data/lib/sportradar/api/data.rb +2 -0
- data/lib/sportradar/api/poll.rb +40 -0
- data/lib/sportradar/api/request.rb +15 -6
- data/lib/sportradar/api/version.rb +1 -1
- metadata +18 -7
- data/lib/sportradar/api/basketball/bio.rb +0 -33
- data/lib/sportradar/api/basketball/nba/overview.rb +0 -64
- data/lib/sportradar/api/basketball/nba/record.rb +0 -34
- data/lib/sportradar/api/basketball/overview.rb +0 -74
- data/lib/sportradar/api/basketball/profile.rb +0 -48
data/lib/sportradar/api/data.rb
CHANGED
@@ -51,6 +51,8 @@ module Sportradar
|
|
51
51
|
def create_data(existing = {}, data, klass: nil, **opts)
|
52
52
|
existing ||= {} # handles nil case, typically during object instantiation
|
53
53
|
case data
|
54
|
+
when [], {}
|
55
|
+
existing
|
54
56
|
when Array
|
55
57
|
data.each do |hash|
|
56
58
|
current = existing[hash['id']]
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
class Rank
|
4
|
+
def initialize(data)
|
5
|
+
@id = data['id']
|
6
|
+
@name = data['name']
|
7
|
+
@market = data['market']
|
8
|
+
@rank = data['rank']
|
9
|
+
@wins = data['wins']
|
10
|
+
@losses = data['losses']
|
11
|
+
@prev_rank = data['prev_rank']
|
12
|
+
@points = data['points'] || data['votes']
|
13
|
+
@fp_votes = data['fp_votes'].to_i
|
14
|
+
if data['rpi']
|
15
|
+
@rpi = data
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
class Poll
|
20
|
+
def initialize(data)
|
21
|
+
@response = data
|
22
|
+
|
23
|
+
@id = data.dig('poll', 'id')
|
24
|
+
@name = data.dig('poll', 'name')
|
25
|
+
@alias = data.dig('poll', 'alias')
|
26
|
+
@week = data['week']
|
27
|
+
@year = data['year']
|
28
|
+
@time = data['effective_date']
|
29
|
+
|
30
|
+
update(data)
|
31
|
+
end
|
32
|
+
def update(data)
|
33
|
+
@ranked = data['rankings'].map { |h| Rank.new(h) }
|
34
|
+
if @alias == 'AP' || @alias == 'US'
|
35
|
+
@votes = data['candidates'].map.with_index(@ranked.size + 1) { |h, i| Rank.new(h.merge('rank' => i)) }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -4,13 +4,13 @@ module Sportradar
|
|
4
4
|
|
5
5
|
include HTTParty
|
6
6
|
|
7
|
-
attr_reader :url, :headers, :timeout, :api_key
|
7
|
+
# attr_reader :url, :headers, :timeout, :api_key
|
8
8
|
|
9
9
|
def get(path, options={})
|
10
|
-
base_setup(path, options)
|
10
|
+
url, headers, options, timeout = base_setup(path, options)
|
11
11
|
begin
|
12
12
|
# puts url + "?api_key=#{api_key[:api_key]}" # uncomment for debugging
|
13
|
-
response = self.class.get(url, headers: headers, query: options
|
13
|
+
response = self.class.get(url, headers: headers, query: options, timeout: timeout)
|
14
14
|
rescue Net::ReadTimeout, Net::OpenTimeout
|
15
15
|
raise Sportradar::Api::Error::Timeout
|
16
16
|
rescue EOFError
|
@@ -20,6 +20,10 @@ module Sportradar
|
|
20
20
|
response
|
21
21
|
end
|
22
22
|
|
23
|
+
def get_request_info(url)
|
24
|
+
base_setup(request_url(url))
|
25
|
+
end
|
26
|
+
|
23
27
|
private
|
24
28
|
|
25
29
|
def base_setup(path, options={})
|
@@ -27,6 +31,7 @@ module Sportradar
|
|
27
31
|
@url += format unless options[:format] == 'none'
|
28
32
|
@headers = set_headers unless options[:format] == 'none'
|
29
33
|
@timeout = options.delete(:api_timeout) || Sportradar::Api.config.api_timeout
|
34
|
+
[@url, @headers, options.merge(api_key), @timeout]
|
30
35
|
end
|
31
36
|
|
32
37
|
def set_base(path)
|
@@ -34,6 +39,7 @@ module Sportradar
|
|
34
39
|
url = "#{protocol}api.sportradar.us"
|
35
40
|
url += path
|
36
41
|
end
|
42
|
+
|
37
43
|
|
38
44
|
def date_path(date)
|
39
45
|
"#{date.year}/#{date.month}/#{date.day}"
|
@@ -45,11 +51,15 @@ module Sportradar
|
|
45
51
|
|
46
52
|
|
47
53
|
def format
|
48
|
-
".#{
|
54
|
+
".#{content_format}" if Sportradar::Api.config.format
|
49
55
|
end
|
50
56
|
|
51
57
|
def set_headers
|
52
|
-
{'Content-Type' => "application/#{
|
58
|
+
{'Content-Type' => "application/#{content_format}", 'Accept' => "application/#{content_format}"}
|
59
|
+
end
|
60
|
+
|
61
|
+
def content_format
|
62
|
+
Sportradar::Api.config.format
|
53
63
|
end
|
54
64
|
|
55
65
|
def api_key
|
@@ -58,4 +68,3 @@ module Sportradar
|
|
58
68
|
end
|
59
69
|
end
|
60
70
|
end
|
61
|
-
|
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.
|
4
|
+
version: 0.10.0
|
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-
|
11
|
+
date: 2017-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -241,29 +241,37 @@ files:
|
|
241
241
|
- bin/setup
|
242
242
|
- lib/sportradar/api.rb
|
243
243
|
- lib/sportradar/api/basketball.rb
|
244
|
-
- lib/sportradar/api/basketball/bio.rb
|
245
244
|
- lib/sportradar/api/basketball/broadcast.rb
|
245
|
+
- lib/sportradar/api/basketball/game.rb
|
246
246
|
- lib/sportradar/api/basketball/injury.rb
|
247
247
|
- lib/sportradar/api/basketball/nba.rb
|
248
248
|
- lib/sportradar/api/basketball/nba/conference.rb
|
249
249
|
- lib/sportradar/api/basketball/nba/division.rb
|
250
250
|
- lib/sportradar/api/basketball/nba/game.rb
|
251
251
|
- lib/sportradar/api/basketball/nba/hierarchy.rb
|
252
|
-
- lib/sportradar/api/basketball/nba/overview.rb
|
253
252
|
- lib/sportradar/api/basketball/nba/player.rb
|
254
253
|
- lib/sportradar/api/basketball/nba/quarter.rb
|
255
|
-
- lib/sportradar/api/basketball/nba/record.rb
|
256
254
|
- lib/sportradar/api/basketball/nba/schedule.rb
|
257
255
|
- lib/sportradar/api/basketball/nba/scoring.rb
|
258
256
|
- lib/sportradar/api/basketball/nba/season.rb
|
259
257
|
- lib/sportradar/api/basketball/nba/team.rb
|
260
|
-
- lib/sportradar/api/basketball/
|
258
|
+
- lib/sportradar/api/basketball/ncaamb.rb
|
259
|
+
- lib/sportradar/api/basketball/ncaamb/conference.rb
|
260
|
+
- lib/sportradar/api/basketball/ncaamb/division.rb
|
261
|
+
- lib/sportradar/api/basketball/ncaamb/game.rb
|
262
|
+
- lib/sportradar/api/basketball/ncaamb/half.rb
|
263
|
+
- lib/sportradar/api/basketball/ncaamb/hierarchy.rb
|
264
|
+
- lib/sportradar/api/basketball/ncaamb/player.rb
|
265
|
+
- lib/sportradar/api/basketball/ncaamb/schedule.rb
|
266
|
+
- lib/sportradar/api/basketball/ncaamb/season.rb
|
267
|
+
- lib/sportradar/api/basketball/ncaamb/team.rb
|
261
268
|
- lib/sportradar/api/basketball/play.rb
|
262
269
|
- lib/sportradar/api/basketball/plays.rb
|
263
270
|
- lib/sportradar/api/basketball/plays/assist.rb
|
264
271
|
- lib/sportradar/api/basketball/plays/base.rb
|
265
272
|
- lib/sportradar/api/basketball/plays/block.rb
|
266
273
|
- lib/sportradar/api/basketball/plays/clear_path_foul.rb
|
274
|
+
- lib/sportradar/api/basketball/plays/deadball.rb
|
267
275
|
- lib/sportradar/api/basketball/plays/defensive_three_seconds.rb
|
268
276
|
- lib/sportradar/api/basketball/plays/delay.rb
|
269
277
|
- lib/sportradar/api/basketball/plays/ejection.rb
|
@@ -296,8 +304,10 @@ files:
|
|
296
304
|
- lib/sportradar/api/basketball/plays/tv_timeout.rb
|
297
305
|
- lib/sportradar/api/basketball/plays/two_point_made.rb
|
298
306
|
- lib/sportradar/api/basketball/plays/two_point_miss.rb
|
299
|
-
- lib/sportradar/api/basketball/
|
307
|
+
- lib/sportradar/api/basketball/record.rb
|
308
|
+
- lib/sportradar/api/basketball/scoring.rb
|
300
309
|
- lib/sportradar/api/basketball/season.rb
|
310
|
+
- lib/sportradar/api/basketball/team.rb
|
301
311
|
- lib/sportradar/api/basketball/venue.rb
|
302
312
|
- lib/sportradar/api/config.rb
|
303
313
|
- lib/sportradar/api/content.rb
|
@@ -381,6 +391,7 @@ files:
|
|
381
391
|
- lib/sportradar/api/nfl/venue.rb
|
382
392
|
- lib/sportradar/api/nfl/week.rb
|
383
393
|
- lib/sportradar/api/odds.rb
|
394
|
+
- lib/sportradar/api/poll.rb
|
384
395
|
- lib/sportradar/api/request.rb
|
385
396
|
- lib/sportradar/api/soccer.rb
|
386
397
|
- lib/sportradar/api/soccer/boxscore.rb
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
module Basketball
|
4
|
-
class Bio < Data
|
5
|
-
attr_accessor :player, :name
|
6
|
-
|
7
|
-
def initialize(player)
|
8
|
-
# @player = player
|
9
|
-
@id = player.id
|
10
|
-
@status = player.status
|
11
|
-
@full_name = player.full_name
|
12
|
-
@first_name = player.first_name
|
13
|
-
@last_name = player.last_name
|
14
|
-
@abbr_name = player.abbr_name
|
15
|
-
@height = player.height
|
16
|
-
@weight = player.weight
|
17
|
-
@position = player.position
|
18
|
-
@primary_position = player.primary_position
|
19
|
-
@jersey_number = player.jersey_number
|
20
|
-
@experience = player.experience
|
21
|
-
@college = player.college
|
22
|
-
@birth_place = player.birth_place
|
23
|
-
@birthdate = player.birthdate
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
__END__
|
32
|
-
|
33
|
-
sr = Sportradar::Api::Nba.new
|
@@ -1,64 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
module Basketball
|
4
|
-
class Nba
|
5
|
-
class Overview < Basketball::Overview
|
6
|
-
attr_accessor :response, :api, :id, :game, :home, :away
|
7
|
-
|
8
|
-
# def initialize(game: )
|
9
|
-
# @game = game
|
10
|
-
# end
|
11
|
-
|
12
|
-
# def points(team_id)
|
13
|
-
# team_id.is_a?(Symbol) ? @score[@team_ids[team_id]] : @score[team_id]
|
14
|
-
# end
|
15
|
-
# def set_score(score)
|
16
|
-
# @score.merge!(score)
|
17
|
-
# end
|
18
|
-
|
19
|
-
# def update(data, **opts)
|
20
|
-
|
21
|
-
# @score = { }
|
22
|
-
|
23
|
-
# @status = data['status'] if data['status']
|
24
|
-
# @coverage = data['coverage'] if data['coverage']
|
25
|
-
# @home_team = data['home_team'] if data['home_team'] # GUID
|
26
|
-
# @away_team = data['away_team'] if data['away_team'] # GUID
|
27
|
-
# @team_ids = { home: @home_team, away: @away_team}
|
28
|
-
# @scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
|
29
|
-
# @venue = data['venue'] if data['venue']
|
30
|
-
# # @home = Team.new(data['home'], api: api, game: self) if data['home']
|
31
|
-
# # @away = Team.new(data['away'], api: api, game: self) if data['away']
|
32
|
-
# @broadcast = data['broadcast']
|
33
|
-
# @duration = data['duration'] if data['duration']
|
34
|
-
# @clock = data['clock'] if data['clock']
|
35
|
-
# @attendance = data['attendance'] if data['attendance']
|
36
|
-
# @lead_changes = data['lead_changes'] if data['lead_changes']
|
37
|
-
# @times_tied = data['times_tied'] if data['times_tied']
|
38
|
-
# @scoring = data['scoring'] if data['scoring']
|
39
|
-
|
40
|
-
# end
|
41
|
-
|
42
|
-
# def path_base
|
43
|
-
# "games/#{ id }"
|
44
|
-
# end
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
__END__
|
53
|
-
|
54
|
-
ss = sr.schedule;
|
55
|
-
sr = Sportradar::Api::Basketball::Nba.new
|
56
|
-
sd = sr.daily_schedule;
|
57
|
-
g = sd.games.last;
|
58
|
-
box = g.get_box;
|
59
|
-
pbp = g.get_pbp;
|
60
|
-
g.quarters.size
|
61
|
-
g.plays.size
|
62
|
-
|
63
|
-
Sportradar::Api::Basketball::Nba::Team.all.size # => 32 - includes all star teams
|
64
|
-
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
module Basketball
|
4
|
-
class Nba
|
5
|
-
class Record < Data
|
6
|
-
attr_accessor :id, :team, :wins, :losses, :win_pct, :points_for, :points_against, :point_diff, :games_behind, :streak
|
7
|
-
|
8
|
-
def initialize(data, type: 'overall', **opts)
|
9
|
-
@team = opts[:team]
|
10
|
-
@type = type
|
11
|
-
|
12
|
-
update(data, **opts)
|
13
|
-
end
|
14
|
-
|
15
|
-
def profile
|
16
|
-
Profile.new(self)
|
17
|
-
end
|
18
|
-
|
19
|
-
def update(data, **opts)
|
20
|
-
@wins = data['wins'].to_i
|
21
|
-
@losses = data['losses'].to_i
|
22
|
-
@win_pct = data['win_pct'].to_f
|
23
|
-
@points_for = data['points_for']
|
24
|
-
@points_against = data['points_against']
|
25
|
-
@point_diff = data['point_diff']
|
26
|
-
@games_behind = data['games_behind']
|
27
|
-
@streak = data['streak']
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
module Basketball
|
4
|
-
class Overview < Data
|
5
|
-
attr_accessor :game, :home_id, :away_id, :clock, :quarter, :status, :home, :away, :scoring, :venue, :scheduled, :broadcast
|
6
|
-
|
7
|
-
def initialize(game)
|
8
|
-
# @game = game
|
9
|
-
@id = game.id
|
10
|
-
@score = game.score
|
11
|
-
@home_id = game.home_id
|
12
|
-
@away_id = game.away_id
|
13
|
-
@home_full = game.home.full_name
|
14
|
-
@away_full = game.away.full_name
|
15
|
-
@team_ids = game.instance_variable_get(:@team_ids)
|
16
|
-
@status = game.status
|
17
|
-
@clock = game.clock
|
18
|
-
@quarter = game.quarter.to_i
|
19
|
-
@broadcast = game.broadcast
|
20
|
-
@scheduled = game.scheduled
|
21
|
-
@timeouts = game.timeouts
|
22
|
-
@scoring = game.scoring
|
23
|
-
@duration = game.duration
|
24
|
-
@attendance = game.attendance
|
25
|
-
|
26
|
-
@venue = OpenStruct.new(name: game.venue.name, city: game.venue.city, location: game.venue.location)
|
27
|
-
@home = OpenStruct.new(id: game.home.id, alias: game.home.alias, name: game.home.name, full_name: game.home.full_name)
|
28
|
-
@away = OpenStruct.new(id: game.away.id, alias: game.away.alias, name: game.away.name, full_name: game.away.full_name)
|
29
|
-
rescue => e
|
30
|
-
binding.pry
|
31
|
-
end
|
32
|
-
|
33
|
-
def points(team_id)
|
34
|
-
team_id.is_a?(Symbol) ? @score[@team_ids[team_id]].to_i : @score[team_id].to_i
|
35
|
-
end
|
36
|
-
|
37
|
-
def scoring(quarter)
|
38
|
-
@scoring
|
39
|
-
end
|
40
|
-
|
41
|
-
# status helpers
|
42
|
-
def future?
|
43
|
-
['scheduled', 'delayed'].include? status
|
44
|
-
end
|
45
|
-
def started?
|
46
|
-
['inprogress', 'halftime', 'delayed'].include? status
|
47
|
-
end
|
48
|
-
def finished?
|
49
|
-
['completed', 'closed'].include? status
|
50
|
-
end
|
51
|
-
def closed?
|
52
|
-
'closed' == status
|
53
|
-
end
|
54
|
-
|
55
|
-
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
__END__
|
62
|
-
|
63
|
-
ss = sr.schedule;
|
64
|
-
sr = Sportradar::Api::Nba.new
|
65
|
-
sd = sr.daily_schedule;
|
66
|
-
g = sd.games.last;
|
67
|
-
g.overview
|
68
|
-
box = g.get_box;
|
69
|
-
pbp = g.get_pbp;
|
70
|
-
g.quarters.size
|
71
|
-
g.plays.size
|
72
|
-
|
73
|
-
Sportradar::Api::Nba::Team.all.size # => 32 - includes all star teams
|
74
|
-
|
@@ -1,48 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
module Basketball
|
4
|
-
class Profile < Data
|
5
|
-
attr_accessor :team, :name
|
6
|
-
|
7
|
-
def initialize(team)
|
8
|
-
# @team = team
|
9
|
-
@id = team.id
|
10
|
-
# @score = team.score
|
11
|
-
# @home_id = team.home_id
|
12
|
-
# @away_id = team.away_id
|
13
|
-
# @home_full = team.home.full_name
|
14
|
-
# @away_full = team.away.full_name
|
15
|
-
# @team_ids = team.instance_variable_get(:@team_ids)
|
16
|
-
# @status = team.status
|
17
|
-
# @clock = team.clock
|
18
|
-
# @quarter = team.quarter.to_i
|
19
|
-
# @broadcast = team.broadcast
|
20
|
-
# @scheduled = team.scheduled
|
21
|
-
# @venue_name = team.venue.name
|
22
|
-
# @venue_city = team.venue.city
|
23
|
-
# @location = team.venue.location
|
24
|
-
# @timeouts = team.timeouts
|
25
|
-
# @scoring = team.scoring
|
26
|
-
# @duration = team.duration
|
27
|
-
# @attendance = team.attendance
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
__END__
|
36
|
-
|
37
|
-
ss = sr.schedule;
|
38
|
-
sr = Sportradar::Api::Nba.new
|
39
|
-
sd = sr.daily_schedule;
|
40
|
-
g = sd.games.last;
|
41
|
-
g.overview
|
42
|
-
box = g.get_box;
|
43
|
-
pbp = g.get_pbp;
|
44
|
-
g.quarters.size
|
45
|
-
g.plays.size
|
46
|
-
|
47
|
-
Sportradar::Api::Nba::Team.all.size # => 32 - includes all star teams
|
48
|
-
|