sportradar-api 0.12.3 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +3 -3
- data/lib/sportradar/api/baseball/game.rb +6 -2
- data/lib/sportradar/api/baseball/mlb.rb +1 -1
- data/lib/sportradar/api/baseball/pitch.rb +5 -0
- data/lib/sportradar/api/basketball/game.rb +14 -2
- data/lib/sportradar/api/basketball/nba/player.rb +2 -2
- data/lib/sportradar/api/basketball/nba.rb +1 -1
- data/lib/sportradar/api/basketball/plays/base.rb +1 -1
- data/lib/sportradar/api/data.rb +2 -1
- data/lib/sportradar/api/error.rb +1 -1
- data/lib/sportradar/api/images.rb +1 -1
- data/lib/sportradar/api/request.rb +22 -1
- data/lib/sportradar/api/soccer/api.rb +66 -0
- data/lib/sportradar/api/soccer/event.rb +45 -0
- data/lib/sportradar/api/soccer/fact.rb +56 -53
- data/lib/sportradar/api/soccer/group.rb +70 -0
- data/lib/sportradar/api/soccer/lineup.rb +31 -0
- data/lib/sportradar/api/soccer/match.rb +224 -44
- data/lib/sportradar/api/soccer/player.rb +54 -67
- data/lib/sportradar/api/soccer/season.rb +58 -7
- data/lib/sportradar/api/soccer/standing.rb +43 -6
- data/lib/sportradar/api/soccer/team.rb +155 -53
- data/lib/sportradar/api/soccer/team_group.rb +57 -0
- data/lib/sportradar/api/soccer/tournament.rb +302 -14
- data/lib/sportradar/api/soccer/venue.rb +14 -13
- data/lib/sportradar/api/{soccer → soccer-old}/boxscore.rb +0 -0
- data/lib/sportradar/api/{soccer → soccer-old}/category.rb +0 -0
- data/lib/sportradar/api/soccer-old/fact.rb +61 -0
- data/lib/sportradar/api/{soccer → soccer-old}/hierarchy.rb +0 -0
- data/lib/sportradar/api/soccer-old/match.rb +55 -0
- data/lib/sportradar/api/soccer-old/player.rb +88 -0
- data/lib/sportradar/api/{soccer → soccer-old}/ranking.rb +0 -0
- data/lib/sportradar/api/{soccer → soccer-old}/schedule.rb +0 -0
- data/lib/sportradar/api/soccer-old/season.rb +14 -0
- data/lib/sportradar/api/soccer-old/standing.rb +13 -0
- data/lib/sportradar/api/{soccer → soccer-old}/statistic.rb +0 -0
- data/lib/sportradar/api/{soccer → soccer-old}/summary.rb +0 -0
- data/lib/sportradar/api/soccer-old/team.rb +63 -0
- data/lib/sportradar/api/soccer-old/tournament.rb +20 -0
- data/lib/sportradar/api/{soccer → soccer-old}/tournament_group.rb +0 -0
- data/lib/sportradar/api/soccer-old/venue.rb +21 -0
- data/lib/sportradar/api/soccer-old.rb +158 -0
- data/lib/sportradar/api/soccer.rb +18 -152
- data/lib/sportradar/api/version.rb +1 -1
- data/lib/sportradar/api.rb +17 -18
- data/soccer-old/boxscore_test.rb +14 -0
- data/soccer-old/hierarchy_test.rb +14 -0
- data/soccer-old/match_test.rb +23 -0
- data/soccer-old/player_test.rb +40 -0
- data/soccer-old/ranking_test.rb +16 -0
- data/soccer-old/schedule_test.rb +24 -0
- data/soccer-old/standing_test.rb +14 -0
- data/soccer-old/summary_test.rb +14 -0
- data/soccer-old/team_test.rb +21 -0
- data/soccer-old_test.rb +184 -0
- metadata +34 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 587f83481b5cb0170503a6da85810f7f9635d094
|
4
|
+
data.tar.gz: 00e7a832708e4a37ae8fe8738e5d4522e384c4f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7fb85e9a377c6fd7f0e907306444ea2a7bda6275dbea4072fa50f56a38823dab471a3fc997cb08a51e018be89b467a3d5653432869a2226d459b098d43c739d
|
7
|
+
data.tar.gz: 265cd0efa942c1efde1ac51d714804b58f2a2a14adf98335113fa0a2fb00d9a173169fdc9722a9cee0a7284e0d4dd2d72c1a4c0286363baaf18c1cc4f7dcab73
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -26,9 +26,9 @@ Our goal is to incrementally integrate with them. **Contributions are welcome**
|
|
26
26
|
| NFL | 1 | [📚](http://developer.sportradar.us/page/NFL_Official) | ✅ | 👍 |
|
27
27
|
| MLB | 6 | [📚](https://developer.sportradar.com/files/indexBaseball.html#major-league-baseball-api-v6) | ✅ | 👍 |
|
28
28
|
| NHL | 3 | [📚](http://developer.sportradar.us/docs/NHL_API) | - | - |
|
29
|
-
| NBA | 3 | [📚](http://developer.sportradar.us/docs/NBA_API) | ✅ |
|
30
|
-
| NCAAMB | 3 | [📚](http://developer.sportradar.us/docs/NCAA_Mens_Basketball) | ✅ |
|
31
|
-
| NCAAFB |
|
29
|
+
| NBA | 3 | [📚](http://developer.sportradar.us/docs/NBA_API) | ✅ | 👍 |
|
30
|
+
| NCAAMB | 3 | [📚](http://developer.sportradar.us/docs/NCAA_Mens_Basketball) | ✅ | 👍 |
|
31
|
+
| NCAAFB | 3 | [📚](http://developer.sportradar.us/docs/NCAA_Football_API) | ✅ | 👍 |
|
32
32
|
| Golf | 2 | [📚](http://developer.sportradar.us/docs/Golf_API) | - | - |
|
33
33
|
| NASCAR | 3 | [📚](http://developer.sportradar.us/page/NASCAR_Official) | - | - |
|
34
34
|
| Odds | 1 | [📚](http://developer.sportradar.us/docs/Odds_API) | 🙋 | 👍 |
|
@@ -316,7 +316,7 @@ module Sportradar
|
|
316
316
|
if !count.empty?
|
317
317
|
inning_half = self.count['inning_half']
|
318
318
|
inning = self.count['inning']
|
319
|
-
"#{half_short} #{(inning || 1)
|
319
|
+
"#{half_short} #{ordinalize_inning(inning || 1)}" # TODO remove AS dependency
|
320
320
|
end
|
321
321
|
end
|
322
322
|
|
@@ -324,10 +324,14 @@ module Sportradar
|
|
324
324
|
if !count.empty?
|
325
325
|
inning_half = self.count['inning_half']
|
326
326
|
inning = self.count['inning']
|
327
|
-
"#{half_word} #{(inning || 1)
|
327
|
+
"#{half_word} #{ordinalize_inning(inning || 1)}"
|
328
328
|
end
|
329
329
|
end
|
330
330
|
|
331
|
+
def ordinalize_inning(i)
|
332
|
+
Sportradar.ordinalize_period(i)
|
333
|
+
end
|
334
|
+
|
331
335
|
def half_word
|
332
336
|
{
|
333
337
|
'B' => 'Bottom',
|
@@ -25,6 +25,7 @@ module Sportradar
|
|
25
25
|
end
|
26
26
|
@description = data['description'] if data['description']
|
27
27
|
@status = data['status'] if data['status']
|
28
|
+
@created_at = data['created_at'] if data['created_at']
|
28
29
|
|
29
30
|
parse_hit(data)
|
30
31
|
parse_runners(data['runners']) if data['runners']
|
@@ -36,6 +37,10 @@ module Sportradar
|
|
36
37
|
parse_errors(data['errors']) if data['errors']
|
37
38
|
end
|
38
39
|
|
40
|
+
def updated
|
41
|
+
@created_at
|
42
|
+
end
|
43
|
+
|
39
44
|
def pitches
|
40
45
|
@pitches_hash.values
|
41
46
|
end
|
@@ -204,18 +204,30 @@ module Sportradar
|
|
204
204
|
'Final'
|
205
205
|
elsif postponed?
|
206
206
|
'Postponed'
|
207
|
-
|
208
|
-
|
207
|
+
elsif halftime?
|
208
|
+
'Halftime'
|
209
209
|
else
|
210
210
|
clock_display
|
211
211
|
end
|
212
212
|
end
|
213
213
|
|
214
|
+
def halftime?
|
215
|
+
clock == '0:00' && quarter == 2
|
216
|
+
end
|
214
217
|
def clock_display
|
215
218
|
if clock && period
|
216
219
|
"#{clock} #{period_display}"
|
217
220
|
end
|
218
221
|
end
|
222
|
+
def period_display_long
|
223
|
+
if period > 5
|
224
|
+
"Overtime #{period - 4}"
|
225
|
+
elsif period == 5
|
226
|
+
'Overtime'
|
227
|
+
else
|
228
|
+
"#{Sportradar.ordinalize_period(period)} Quarter"
|
229
|
+
end
|
230
|
+
end
|
219
231
|
def period_display
|
220
232
|
if period > 5
|
221
233
|
"#{period - 4}OT"
|
@@ -85,9 +85,9 @@ module Sportradar
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def age
|
88
|
-
if birth_date
|
88
|
+
if birth_date
|
89
89
|
now = Time.now.utc.to_date
|
90
|
-
dob = birth_date
|
90
|
+
dob = Date.parse(birth_date)
|
91
91
|
now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
|
92
92
|
end
|
93
93
|
end
|
@@ -80,7 +80,7 @@ module Sportradar
|
|
80
80
|
def update(data, **opts)
|
81
81
|
@event_type = data['event_type'] # "lineupchange",
|
82
82
|
@clock = data['clock'] # "12:00",
|
83
|
-
@updated = data['updated'] # "2016-10-26T00:07:52+00:00",
|
83
|
+
@updated = Time.parse(data['updated']) if data['updated'] # "2016-10-26T00:07:52+00:00",
|
84
84
|
@description = data['description'] # "Cavaliers lineup change (Richard Jefferson, Kyrie Irving, Mike Dunleavy, Channing Frye, LeBron James)",
|
85
85
|
@attribution = data['attribution'] # {"name"=>"Cavaliers", "market"=>"Cleveland", "id"=>"583ec773-fb46-11e1-82cb-f4ce4684ea4c", "team_basket"=>"left"},
|
86
86
|
@team_id = data.dig('attribution', "id")
|
data/lib/sportradar/api/data.rb
CHANGED
data/lib/sportradar/api/error.rb
CHANGED
@@ -11,7 +11,7 @@ module Sportradar
|
|
11
11
|
@nfl_premium = nfl_premium
|
12
12
|
@usat_premium = usat_premium
|
13
13
|
@event_id = event_id
|
14
|
-
@date = date.strftime("%Y/%m/%d") if date
|
14
|
+
@date = date.strftime("%Y/%m/%d") if date
|
15
15
|
raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
|
16
16
|
@access_level = access_level
|
17
17
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Sportradar
|
2
2
|
module Api
|
3
3
|
class Request
|
4
|
+
attr_reader :qps_allotted, :qps_current, :quota_allotted, :quota_current
|
4
5
|
|
5
6
|
include HTTParty
|
6
7
|
|
@@ -17,11 +18,28 @@ module Sportradar
|
|
17
18
|
puts request_url(url)
|
18
19
|
puts
|
19
20
|
puts data.inspect
|
20
|
-
raise
|
21
|
+
raise data
|
21
22
|
end
|
23
|
+
parse_usage(data.headers)
|
22
24
|
data
|
23
25
|
end
|
24
26
|
|
27
|
+
def usage
|
28
|
+
{
|
29
|
+
qps_allotted: @qps_allotted,
|
30
|
+
qps_current: @qps_current,
|
31
|
+
quota_allotted: @quota_allotted,
|
32
|
+
quota_current: @quota_current,
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def parse_usage(headers)
|
37
|
+
@qps_allotted = (headers['x-plan-qps-allotted'] || headers['x-packagekey-qps-allotted']).to_i
|
38
|
+
@qps_current = (headers['x-plan-qps-current'] || headers['x-packagekey-qps-current']).to_i
|
39
|
+
@quota_allotted = (headers['x-plan-quota-allotted'] || headers['x-packagekey-quota-allotted']).to_i
|
40
|
+
@quota_current = (headers['x-plan-quota-current'] || headers['x-packagekey-quota-current']).to_i
|
41
|
+
end
|
42
|
+
|
25
43
|
def get(path, options={})
|
26
44
|
url, headers, options, timeout = base_setup(path, options)
|
27
45
|
begin
|
@@ -62,6 +80,9 @@ module Sportradar
|
|
62
80
|
url += path
|
63
81
|
end
|
64
82
|
|
83
|
+
def default_date
|
84
|
+
Date.today
|
85
|
+
end
|
65
86
|
|
66
87
|
def date_path(date)
|
67
88
|
"#{date.year}/#{date.month}/#{date.day}"
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Soccer
|
4
|
+
class Api < Request
|
5
|
+
attr_accessor :league_group, :access_level, :language_code, :error
|
6
|
+
|
7
|
+
def initialize(access_level: default_access_level, league_group:, language_code: 'en')
|
8
|
+
@league_group = league_group
|
9
|
+
@language_code = language_code
|
10
|
+
@access_level = access_level
|
11
|
+
raise Sportradar::Api::Error::InvalidLeague unless allowed_leagues.include? @league_group
|
12
|
+
raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? @access_level
|
13
|
+
end
|
14
|
+
|
15
|
+
def default_year
|
16
|
+
(Date.today - 210).year # TODO
|
17
|
+
end
|
18
|
+
def default_season
|
19
|
+
'reg'
|
20
|
+
end
|
21
|
+
def default_access_level
|
22
|
+
if (ENV['SPORTRADAR_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
|
23
|
+
'x'
|
24
|
+
else
|
25
|
+
'xt'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def content_format
|
30
|
+
'json'
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def request_url(path)
|
36
|
+
"/soccer-#{access_level}#{version}/#{league_group}/#{language_code}/#{path}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def api_key
|
40
|
+
if !['xt', 'sim'].include?(access_level) || (access_level == 'sim' && default_access_level == 'x')
|
41
|
+
Sportradar::Api.api_key_params("soccer-#{@league_group}", 'production')
|
42
|
+
else
|
43
|
+
Sportradar::Api.api_key_params("soccer-#{@league_group}")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def version
|
48
|
+
Sportradar::Api.version('soccer')
|
49
|
+
end
|
50
|
+
|
51
|
+
def allowed_access_levels
|
52
|
+
%w[x xt sim]
|
53
|
+
end
|
54
|
+
|
55
|
+
def allowed_leagues
|
56
|
+
["eu", "am", "as", "intl", "other", "global"]
|
57
|
+
end
|
58
|
+
|
59
|
+
# def allowed_seasons
|
60
|
+
# ["pre", "reg", "pst"]
|
61
|
+
# end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Soccer
|
4
|
+
class Event < Data
|
5
|
+
attr_reader :id, :type, :time, :period, :period_type, :period_name, :match_time, :team, :x, :y, :outcome, :home_score, :away_score, :goal_scorer, :stoppage_time, :player_out, :player_in, :player
|
6
|
+
|
7
|
+
def initialize(data, **opts)
|
8
|
+
@response = data
|
9
|
+
@id = data["id"]
|
10
|
+
|
11
|
+
update(data, **opts)
|
12
|
+
end
|
13
|
+
|
14
|
+
def update(data, **opts)
|
15
|
+
@type = data['type']
|
16
|
+
@time = Time.parse(data['time']) if data['time']
|
17
|
+
@period = data['period']
|
18
|
+
@period_type = data['period_type']
|
19
|
+
@period_name = data['period_name']
|
20
|
+
@match_time = data['match_time']
|
21
|
+
@team = data['team'] # home/away
|
22
|
+
@x = data['x']
|
23
|
+
@y = data['y']
|
24
|
+
@outcome = data['outcome']
|
25
|
+
@home_score = data['home_score']
|
26
|
+
@away_score = data['away_score']
|
27
|
+
@goal_scorer = OpenStruct.new(data['goal_scorer']) if data['goal_scorer']
|
28
|
+
@stoppage_time = data['stoppage_time'].to_i if data['stoppage_time']
|
29
|
+
@player_out = OpenStruct.new(data['player_out']) if data['player_out']
|
30
|
+
@player_in = OpenStruct.new(data['player_in']) if data['player_in']
|
31
|
+
@player = OpenStruct.new(data['player']) if data['player'] # red/yellow cards
|
32
|
+
end
|
33
|
+
|
34
|
+
def updated_at
|
35
|
+
@time
|
36
|
+
end
|
37
|
+
|
38
|
+
def minute
|
39
|
+
@match_time
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,61 +1,64 @@
|
|
1
1
|
module Sportradar
|
2
2
|
module Api
|
3
|
-
|
3
|
+
module Soccer
|
4
|
+
class Fact < Data
|
4
5
|
|
5
|
-
|
6
|
+
attr_reader :id, :type, :time, :updated_time, :scratch, :reference_id, :clock, :team_id, :description, :period, :x, :y, :player_id, :card, :injury_time, :home_score, :away_score, :player_out_id, :player_in_id, :penalty, :owngoal, :header, :assist1_id, :winner_id, :draw, :response
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
8
|
+
def initialize(data)
|
9
|
+
@response = data
|
10
|
+
@id = data["id"]
|
11
|
+
@type = data["type"]
|
12
|
+
@time = data["time"]
|
13
|
+
@updated_time = data["updated_time"]
|
14
|
+
@scratch = data["scratch"]
|
15
|
+
@reference_id = data["reference_id"]
|
16
|
+
@clock = data["clock"]
|
17
|
+
@team_id = data["team_id"]
|
18
|
+
@description = data["description"]
|
19
|
+
@period = data["period"]
|
20
|
+
@x = data["x"]
|
21
|
+
@y = data["y"]
|
22
|
+
@player_id = data["player_id"]
|
23
|
+
@card = data["card"]
|
24
|
+
@injury_time = data["injury_time"]
|
25
|
+
@home_score = data["home_score"]
|
26
|
+
@away_score = data["away_score"]
|
27
|
+
@player_out_id = data["player_out_id"]
|
28
|
+
@player_in_id = data["player_in_id"]
|
29
|
+
@penalty = data["penalty"]
|
30
|
+
@owngoal = data["owngoal"]
|
31
|
+
@header = data["header"]
|
32
|
+
@assist1_id = data["assist1_id"]
|
33
|
+
@winner_id = data["winner_id"]
|
34
|
+
@draw = data["draw"]
|
35
|
+
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
37
|
+
## Fact Types
|
38
|
+
# card
|
39
|
+
# corner_kick
|
40
|
+
# free_kick
|
41
|
+
# game_resumed
|
42
|
+
# goal
|
43
|
+
# goal_kick
|
44
|
+
# injury
|
45
|
+
# injury_return
|
46
|
+
# injury_time
|
47
|
+
# keeper_save
|
48
|
+
# match_ended
|
49
|
+
# match_started
|
50
|
+
# offside
|
51
|
+
# penalty_awarded
|
52
|
+
# penalty_missed
|
53
|
+
# period_over
|
54
|
+
# period_started
|
55
|
+
# shot_blocked
|
56
|
+
# shot_off_target
|
57
|
+
# shot_on_target
|
58
|
+
# substitution
|
59
|
+
# throwin
|
60
|
+
end
|
59
61
|
end
|
62
|
+
|
60
63
|
end
|
61
64
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Soccer
|
4
|
+
class Group < Data
|
5
|
+
attr_reader :league_group
|
6
|
+
|
7
|
+
def initialize(data = {}, league_group: nil, **opts)
|
8
|
+
@id = data['id']
|
9
|
+
|
10
|
+
@league_group = league_group || data['league_group']
|
11
|
+
|
12
|
+
@tournaments_hash = {}
|
13
|
+
# @daily_schedule = {}
|
14
|
+
|
15
|
+
update(data, **opts)
|
16
|
+
end
|
17
|
+
|
18
|
+
def update(data, **opts)
|
19
|
+
create_data(@tournaments_hash, data['tournaments'], klass: Tournament, api: api, league_group: @league_group) if data['tournaments']
|
20
|
+
end
|
21
|
+
|
22
|
+
def tournaments
|
23
|
+
@tournaments_hash.values
|
24
|
+
end
|
25
|
+
|
26
|
+
def tournament(id)
|
27
|
+
@tournaments_hash[id]
|
28
|
+
end
|
29
|
+
|
30
|
+
def api
|
31
|
+
@api ||= Sportradar::Api::Soccer::Api.new(league_group: @league_group)
|
32
|
+
end
|
33
|
+
|
34
|
+
def get_tournaments
|
35
|
+
data = api.get_data(path_tournaments).to_h
|
36
|
+
ingest_tournaments(data)
|
37
|
+
end
|
38
|
+
|
39
|
+
def ingest_tournaments(data)
|
40
|
+
update(data, source: :tournaments)
|
41
|
+
data
|
42
|
+
end
|
43
|
+
|
44
|
+
def queue_tournaments
|
45
|
+
url, headers, options, timeout = api.get_request_info(path_tournaments)
|
46
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_tournaments)}
|
47
|
+
end
|
48
|
+
|
49
|
+
def path_tournaments
|
50
|
+
'tournaments'
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.europe
|
54
|
+
self.new(league_group: 'eu')
|
55
|
+
end
|
56
|
+
def self.americas
|
57
|
+
self.new(league_group: 'am')
|
58
|
+
end
|
59
|
+
def self.north_america
|
60
|
+
self.new(league_group: 'na')
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.international
|
64
|
+
self.new(league_group: 'intl')
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Soccer
|
4
|
+
class Lineup < Data
|
5
|
+
attr_reader :id, :team, :manager, :jersey, :starting_lineup, :substitutes
|
6
|
+
|
7
|
+
def initialize(data, **opts)
|
8
|
+
@response = data
|
9
|
+
@id = data["team"]
|
10
|
+
|
11
|
+
@starting_hash = {}
|
12
|
+
@subs_hash = {}
|
13
|
+
|
14
|
+
update(data, **opts)
|
15
|
+
end
|
16
|
+
def update(data, **opts)
|
17
|
+
@team = data['team'] if data['team']
|
18
|
+
@manager = OpenStruct.new(data['manager']) if data['manager']
|
19
|
+
@jersey = OpenStruct.new(data['jersey']) if data['jersey']
|
20
|
+
# @starting_lineup = data['starting_lineup'] if data['starting_lineup']
|
21
|
+
# @substitutes = data['substitutes'] if data['substitutes']
|
22
|
+
|
23
|
+
create_data(@starting_hash, data['starting_lineup'], klass: Player, api: opts[:api], lineup: self) if data['starting_lineup']
|
24
|
+
create_data(@subs_hash, data['substitutes'], klass: Player, api: opts[:api], lineup: self) if data['substitutes']
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|