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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +3 -3
  5. data/lib/sportradar/api/baseball/game.rb +6 -2
  6. data/lib/sportradar/api/baseball/mlb.rb +1 -1
  7. data/lib/sportradar/api/baseball/pitch.rb +5 -0
  8. data/lib/sportradar/api/basketball/game.rb +14 -2
  9. data/lib/sportradar/api/basketball/nba/player.rb +2 -2
  10. data/lib/sportradar/api/basketball/nba.rb +1 -1
  11. data/lib/sportradar/api/basketball/plays/base.rb +1 -1
  12. data/lib/sportradar/api/data.rb +2 -1
  13. data/lib/sportradar/api/error.rb +1 -1
  14. data/lib/sportradar/api/images.rb +1 -1
  15. data/lib/sportradar/api/request.rb +22 -1
  16. data/lib/sportradar/api/soccer/api.rb +66 -0
  17. data/lib/sportradar/api/soccer/event.rb +45 -0
  18. data/lib/sportradar/api/soccer/fact.rb +56 -53
  19. data/lib/sportradar/api/soccer/group.rb +70 -0
  20. data/lib/sportradar/api/soccer/lineup.rb +31 -0
  21. data/lib/sportradar/api/soccer/match.rb +224 -44
  22. data/lib/sportradar/api/soccer/player.rb +54 -67
  23. data/lib/sportradar/api/soccer/season.rb +58 -7
  24. data/lib/sportradar/api/soccer/standing.rb +43 -6
  25. data/lib/sportradar/api/soccer/team.rb +155 -53
  26. data/lib/sportradar/api/soccer/team_group.rb +57 -0
  27. data/lib/sportradar/api/soccer/tournament.rb +302 -14
  28. data/lib/sportradar/api/soccer/venue.rb +14 -13
  29. data/lib/sportradar/api/{soccer → soccer-old}/boxscore.rb +0 -0
  30. data/lib/sportradar/api/{soccer → soccer-old}/category.rb +0 -0
  31. data/lib/sportradar/api/soccer-old/fact.rb +61 -0
  32. data/lib/sportradar/api/{soccer → soccer-old}/hierarchy.rb +0 -0
  33. data/lib/sportradar/api/soccer-old/match.rb +55 -0
  34. data/lib/sportradar/api/soccer-old/player.rb +88 -0
  35. data/lib/sportradar/api/{soccer → soccer-old}/ranking.rb +0 -0
  36. data/lib/sportradar/api/{soccer → soccer-old}/schedule.rb +0 -0
  37. data/lib/sportradar/api/soccer-old/season.rb +14 -0
  38. data/lib/sportradar/api/soccer-old/standing.rb +13 -0
  39. data/lib/sportradar/api/{soccer → soccer-old}/statistic.rb +0 -0
  40. data/lib/sportradar/api/{soccer → soccer-old}/summary.rb +0 -0
  41. data/lib/sportradar/api/soccer-old/team.rb +63 -0
  42. data/lib/sportradar/api/soccer-old/tournament.rb +20 -0
  43. data/lib/sportradar/api/{soccer → soccer-old}/tournament_group.rb +0 -0
  44. data/lib/sportradar/api/soccer-old/venue.rb +21 -0
  45. data/lib/sportradar/api/soccer-old.rb +158 -0
  46. data/lib/sportradar/api/soccer.rb +18 -152
  47. data/lib/sportradar/api/version.rb +1 -1
  48. data/lib/sportradar/api.rb +17 -18
  49. data/soccer-old/boxscore_test.rb +14 -0
  50. data/soccer-old/hierarchy_test.rb +14 -0
  51. data/soccer-old/match_test.rb +23 -0
  52. data/soccer-old/player_test.rb +40 -0
  53. data/soccer-old/ranking_test.rb +16 -0
  54. data/soccer-old/schedule_test.rb +24 -0
  55. data/soccer-old/standing_test.rb +14 -0
  56. data/soccer-old/summary_test.rb +14 -0
  57. data/soccer-old/team_test.rb +21 -0
  58. data/soccer-old_test.rb +184 -0
  59. metadata +34 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01260a238e645408f519ae980033af6a440c7279
4
- data.tar.gz: b03cbcc37a6ad969169e740224794fd198eaa0ce
3
+ metadata.gz: 587f83481b5cb0170503a6da85810f7f9635d094
4
+ data.tar.gz: 00e7a832708e4a37ae8fe8738e5d4522e384c4f9
5
5
  SHA512:
6
- metadata.gz: 96a42316a082839e18aa00b4e8779ad455701f5151f07c1a877487f3aa56730c81966d7ad1934d12935bb7acc116b5eb978d79ce9f5d9ea6044f823cffa0e690
7
- data.tar.gz: 25267de1237712fca8a9c9beef644ea2f47c46d28032631b8751119d33eaf856a8e0f0b74108f8064fef1b570b32b1a5161375c70417d69ca782a4b0dadfa718
6
+ metadata.gz: c7fb85e9a377c6fd7f0e907306444ea2a7bda6275dbea4072fa50f56a38823dab471a3fc997cb08a51e018be89b467a3d5653432869a2226d459b098d43c739d
7
+ data.tar.gz: 265cd0efa942c1efde1ac51d714804b58f2a2a14adf98335113fa0a2fb00d9a173169fdc9722a9cee0a7284e0d4dd2d72c1a4c0286363baaf18c1cc4f7dcab73
data/.gitignore CHANGED
@@ -11,6 +11,7 @@
11
11
  *.swp
12
12
  *.o
13
13
  *.a
14
+ *.bin
14
15
  mkmf.log
15
16
  *.sublime-project
16
17
  *.sublime-workspace
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sportradar-api (0.12.3)
4
+ sportradar-api (0.13.0)
5
5
  activesupport
6
6
  httparty (>= 0.14.0)
7
7
 
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 | 1 | [📚](http://developer.sportradar.us/docs/NCAA_Football_API) | - | - |
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).ordinalize}"
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).ordinalize}"
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',
@@ -90,7 +90,7 @@ module Sportradar
90
90
 
91
91
  # api stuff
92
92
  def api
93
- @api || Sportradar::Api::Baseball::Mlb::Api.new
93
+ @api ||= Sportradar::Api::Baseball::Mlb::Api.new
94
94
  end
95
95
 
96
96
  def default_year
@@ -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
- # elsif halftime?
208
- # 'Halftime'
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.present?
88
+ if birth_date
89
89
  now = Time.now.utc.to_date
90
- dob = birth_date.to_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
@@ -100,7 +100,7 @@ module Sportradar
100
100
  end
101
101
 
102
102
  def api
103
- @api || Sportradar::Api::Basketball::Nba::Api.new
103
+ @api ||= Sportradar::Api::Basketball::Nba::Api.new
104
104
  end
105
105
 
106
106
  def default_year
@@ -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")
@@ -65,7 +65,8 @@ module Sportradar
65
65
  existing[current.id]
66
66
  end
67
67
  when Hash
68
- existing[data[identifier]] = klass.new(data, **opts)
68
+ existing[data[identifier]] ||= klass.new(data, **opts)
69
+ existing[data[identifier]].update(data, **opts)
69
70
  else
70
71
  # raise
71
72
  end
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Error
3
+ class Error < StandardError
4
4
  class AuthenticationError < StandardError; end
5
5
  class NoApiKey < AuthenticationError; end
6
6
  class InvalidResponseFormat < TypeError; end
@@ -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.present?
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 'Sportradar error'
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
- class Soccer::Fact < Data
3
+ module Soccer
4
+ class Fact < Data
4
5
 
5
- attr_accessor :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
+ 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
- def initialize(data)
8
- @response = data
9
- @id = data["id"]
10
- @type = data["type"]
11
- @time = data["time"]
12
- @updated_time = data["updated_time"]
13
- @scratch = data["scratch"]
14
- @reference_id = data["reference_id"]
15
- @clock = data["clock"]
16
- @team_id = data["team_id"]
17
- @description = data["description"]
18
- @period = data["period"]
19
- @x = data["x"]
20
- @y = data["y"]
21
- @player_id = data["player_id"]
22
- @card = data["card"]
23
- @injury_time = data["injury_time"]
24
- @home_score = data["home_score"]
25
- @away_score = data["away_score"]
26
- @player_out_id = data["player_out_id"]
27
- @player_in_id = data["player_in_id"]
28
- @penalty = data["penalty"]
29
- @owngoal = data["owngoal"]
30
- @header = data["header"]
31
- @assist1_id = data["assist1_id"]
32
- @winner_id = data["winner_id"]
33
- @draw = data["draw"]
34
- end
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
- ## Fact Types
37
- # card
38
- # corner_kick
39
- # free_kick
40
- # game_resumed
41
- # goal
42
- # goal_kick
43
- # injury
44
- # injury_return
45
- # injury_time
46
- # keeper_save
47
- # match_ended
48
- # match_started
49
- # offside
50
- # penalty_awarded
51
- # penalty_missed
52
- # period_over
53
- # period_started
54
- # shot_blocked
55
- # shot_off_target
56
- # shot_on_target
57
- # substitution
58
- # throwin
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