sportradar-api 0.12.3 → 0.13.0

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.
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