sportradar-api 0.13.0 → 0.13.21

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -3
  3. data/lib/sportradar/api/baseball/game.rb +1 -1
  4. data/lib/sportradar/api/baseball/mlb/api.rb +1 -1
  5. data/lib/sportradar/api/basketball/game.rb +5 -4
  6. data/lib/sportradar/api/basketball/nba/game.rb +1 -1
  7. data/lib/sportradar/api/basketball/nba/quarter.rb +9 -2
  8. data/lib/sportradar/api/basketball/ncaamb/game.rb +5 -1
  9. data/lib/sportradar/api/basketball/ncaamb/half.rb +9 -0
  10. data/lib/sportradar/api/basketball/ncaamb.rb +2 -2
  11. data/lib/sportradar/api/basketball/play.rb +3 -1
  12. data/lib/sportradar/api/basketball/plays/base.rb +8 -1
  13. data/lib/sportradar/api/basketball/plays/jumpball_violation.rb +11 -0
  14. data/lib/sportradar/api/basketball/plays.rb +1 -0
  15. data/lib/sportradar/api/basketball/team.rb +1 -1
  16. data/lib/sportradar/api/football/ncaafb/game.rb +1 -1
  17. data/lib/sportradar/api/football/nfl/game.rb +1 -1
  18. data/lib/sportradar/api/images.rb +2 -4
  19. data/lib/sportradar/api/soccer/README.md +4 -0
  20. data/lib/sportradar/api/soccer/api.rb +1 -1
  21. data/lib/sportradar/api/soccer/event.rb +15 -14
  22. data/lib/sportradar/api/soccer/match.rb +161 -6
  23. data/lib/sportradar/api/soccer/player.rb +16 -4
  24. data/lib/sportradar/api/soccer/scoring.rb +71 -0
  25. data/lib/sportradar/api/soccer/team.rb +25 -12
  26. data/lib/sportradar/api/soccer/tournament.rb +26 -3
  27. data/lib/sportradar/api/soccer.rb +1 -0
  28. data/lib/sportradar/api/version.rb +1 -1
  29. metadata +5 -29
  30. data/lib/sportradar/api/soccer-old/boxscore.rb +0 -13
  31. data/lib/sportradar/api/soccer-old/category.rb +0 -17
  32. data/lib/sportradar/api/soccer-old/fact.rb +0 -61
  33. data/lib/sportradar/api/soccer-old/hierarchy.rb +0 -14
  34. data/lib/sportradar/api/soccer-old/match.rb +0 -55
  35. data/lib/sportradar/api/soccer-old/player.rb +0 -88
  36. data/lib/sportradar/api/soccer-old/ranking.rb +0 -13
  37. data/lib/sportradar/api/soccer-old/schedule.rb +0 -22
  38. data/lib/sportradar/api/soccer-old/season.rb +0 -14
  39. data/lib/sportradar/api/soccer-old/standing.rb +0 -13
  40. data/lib/sportradar/api/soccer-old/statistic.rb +0 -14
  41. data/lib/sportradar/api/soccer-old/summary.rb +0 -13
  42. data/lib/sportradar/api/soccer-old/team.rb +0 -63
  43. data/lib/sportradar/api/soccer-old/tournament.rb +0 -20
  44. data/lib/sportradar/api/soccer-old/tournament_group.rb +0 -35
  45. data/lib/sportradar/api/soccer-old/venue.rb +0 -21
  46. data/lib/sportradar/api/soccer-old.rb +0 -158
  47. data/soccer-old/boxscore_test.rb +0 -14
  48. data/soccer-old/hierarchy_test.rb +0 -14
  49. data/soccer-old/match_test.rb +0 -23
  50. data/soccer-old/player_test.rb +0 -40
  51. data/soccer-old/ranking_test.rb +0 -16
  52. data/soccer-old/schedule_test.rb +0 -24
  53. data/soccer-old/standing_test.rb +0 -14
  54. data/soccer-old/summary_test.rb +0 -14
  55. data/soccer-old/team_test.rb +0 -21
  56. data/soccer-old_test.rb +0 -184
@@ -10,6 +10,8 @@ module Sportradar
10
10
  @response = data
11
11
  @id = data['id'] if data['id']
12
12
  @api = opts[:api]
13
+ @team = opts[:team]
14
+
13
15
  @league_group = league_group || data['league_group'] || @api&.league_group
14
16
 
15
17
  update(data, **opts)
@@ -34,16 +36,28 @@ module Sportradar
34
36
  @jersey_number = data['jersey_number'] if data['jersey_number']
35
37
  @preferred_foot = data['preferred_foot'] if data['preferred_foot']
36
38
  @matches_played = data['matches_played'] if data['matches_played']
37
-
38
39
  @stats = data['statistics'] if data['statistics']
39
-
40
40
  @date_of_birth = Date.parse(data['date_of_birth']) if data['date_of_birth']
41
+
42
+ @team.update_player_stats(self, data['statistics']) if data['statistics'] && @team
43
+ if opts[:match]
44
+ @team.update_player_stats(self, data, opts[:match])
45
+ end
46
+
41
47
  end
42
48
 
43
49
  def display_name
44
50
  @name || [@first_name, @last_name].join(' ')
45
51
  end
46
52
 
53
+ def first_name
54
+ @name.split()[1]
55
+ end
56
+
57
+ def last_name
58
+ @name.split()[0].delete(',')
59
+ end
60
+
47
61
  def api
48
62
  @api || Sportradar::Api::Soccer::Api.new(league_group: @league_group)
49
63
  end
@@ -67,9 +81,7 @@ module Sportradar
67
81
  url, headers, options, timeout = api.get_request_info(path_profile)
68
82
  {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_profile)}
69
83
  end
70
-
71
84
  end
72
-
73
85
  end
74
86
  end
75
87
  end
@@ -0,0 +1,71 @@
1
+ module Sportradar
2
+ module Api
3
+ module Soccer
4
+ class Scoring < Data
5
+ attr_accessor :response, :api, :id, :home, :away, :scores
6
+
7
+ def initialize(data, **opts)
8
+ @api = opts[:api]
9
+ @match = opts[:match]
10
+
11
+ @scores = {}
12
+ @id = data['id']
13
+
14
+ update(data, **opts)
15
+ end
16
+
17
+ def update(data, source: nil, **opts)
18
+ # new_scores = case source
19
+ # when :box
20
+ # parse_from_box(data)
21
+ # when :timeline
22
+ # parse_from_timeline(data)
23
+ # when :summary
24
+ # parse_from_box(data)
25
+ # else
26
+ # if data['period'] || data['half']
27
+ # parse_from_timeline(data)
28
+ # elsif data['team']
29
+ # parse_from_box(data)
30
+ # else # schedule requests
31
+ # {}
32
+ # end
33
+ # end
34
+ new_scores = parse_from_timeline(data)
35
+ # parse data structure
36
+ # handle data from team (all periods)
37
+ # handle data from period (both teams)
38
+ # handle data from match?
39
+ @scores.each { |k, v| v.merge!(new_scores.delete(k) || {} ) }
40
+ new_scores.each { |k, v| @scores.merge!(k => v) }
41
+ end
42
+
43
+ def goals(team_id)
44
+ @score[team_id].to_i
45
+ end
46
+
47
+
48
+ private
49
+
50
+ def parse_from_timeline(data)
51
+ if data['period_scores']
52
+ data['period_scores'].map do |hash|
53
+ [hash["number"], {"home"=>hash['home_score'], "away"=>hash['away_score']}]
54
+ end.to_h
55
+ else
56
+ {}
57
+ end
58
+ end
59
+
60
+ # def period_name
61
+ # 'period'
62
+ # end
63
+
64
+ def parse_from_summary(data)
65
+ #
66
+ end
67
+
68
+ end
69
+ end
70
+ end
71
+ end
@@ -2,10 +2,13 @@ module Sportradar
2
2
  module Api
3
3
  module Soccer
4
4
  class Team < Data
5
- attr_accessor :tournament_id
6
- attr_reader :id, :league_group, :name, :country, :country_code, :abbreviation, :qualifier, :venue
5
+ attr_accessor :tournament_id, :venue, :player_stats
6
+ attr_reader :id, :league_group, :name, :country, :country_code, :abbreviation, :qualifier
7
7
  alias :alias :abbreviation
8
- attr_reader :team_statistics, :jerseys, :manager, :statistics
8
+ alias :market :name
9
+ alias :display_name :name
10
+ alias :full_name :name
11
+ attr_reader :team_stats, :jerseys, :manager, :statistics
9
12
 
10
13
  def initialize(data = {}, league_group: nil, **opts)
11
14
  @response = data
@@ -14,6 +17,7 @@ module Sportradar
14
17
  @league_group = league_group || data['league_group'] || @api&.league_group
15
18
 
16
19
  @players_hash = {}
20
+ @player_stats = {}
17
21
  @matches_hash = {}
18
22
 
19
23
  update(data, **opts)
@@ -28,7 +32,6 @@ module Sportradar
28
32
  update(data["team"])
29
33
  end
30
34
 
31
-
32
35
  @name = data['name'] if data['name']
33
36
  @country = data['country'] if data['country']
34
37
  @country_code = data['country_code'] if data['country_code']
@@ -36,11 +39,15 @@ module Sportradar
36
39
  @qualifier = data['qualifier'] if data['qualifier']
37
40
  @venue = Venue.new(data['venue']) if data['venue']
38
41
 
39
- create_data(@players_hash, data['players'], klass: Player, api: api, team: self) if data['players']
40
- create_data(@players_hash, data['player_statistics'], klass: Player, api: api, team: self) if data['player_statistics']
42
+ create_data(@players_hash, data['players'], klass: Player, api: api, team: self, **opts) if data['players']
43
+ create_data(@players_hash, data['player_statistics'], klass: Player, api: api, team: self, **opts) if data['player_statistics']
44
+
45
+ @team_stats = data['team_statistics'] if data['team_statistics']
41
46
 
42
- # TODO team statistics
43
- @team_statistics = data['team_statistics'] if data['team_statistics']
47
+ # parse_players(data.dig('players'), opts[:match]) if data.dig('players')
48
+ if opts[:match]
49
+ opts[:match].update_stats(self, data['statistics']) if data['statistics']
50
+ end
44
51
 
45
52
  create_data(@matches_hash, Soccer.parse_results(data['results']), klass: Match, api: api, team: self) if data['results']
46
53
  create_data(@matches_hash, data['schedule'], klass: Match, api: api, team: self) if data['schedule']
@@ -54,10 +61,12 @@ module Sportradar
54
61
  def get_tournament_id(data, **opts)
55
62
  @tournament_id ||= if opts[:tournament]
56
63
  opts[:tournament].id
57
- elsif opts[:season]
58
- opts[:season].tournament_id
59
- elsif opts[:match]
60
- opts[:match].tournament_id
64
+ elsif opts[:season]&.tournament_id
65
+ opts[:season]&.tournament_id
66
+ elsif opts[:match]&.tournament_id
67
+ opts[:match]&.tournament_id
68
+ elsif data['tournament_id']
69
+ data['tournament_id']
61
70
  elsif data['tournament']
62
71
  data.dig('tournament', 'id')
63
72
  elsif data['season']
@@ -65,6 +74,10 @@ module Sportradar
65
74
  end
66
75
  end
67
76
 
77
+ def update_player_stats(player, stats, game = nil)
78
+ game ? game.update_player_stats(player, stats) : @player_stats.merge(player.id => stats.to_h.merge(player: player))
79
+ end
80
+
68
81
  def players
69
82
  @players_hash.values
70
83
  end
@@ -2,7 +2,9 @@ module Sportradar
2
2
  module Api
3
3
  module Soccer
4
4
  class Tournament < Data
5
- attr_reader :id, :league_group, :name, :category
5
+ attr_reader :id, :league_group, :name, :category, :coverage_info, :live_coverage, :season_coverage_info
6
+ alias :display_name :name
7
+ alias :alias :name
6
8
 
7
9
  def initialize(data = {}, league_group: nil, **opts)
8
10
  @response = data
@@ -24,8 +26,10 @@ module Sportradar
24
26
  update(data['tournament'])
25
27
  end
26
28
 
27
- @name = data["name"]
28
- @category = data['category'] || @category
29
+ @name = data["name"] || @name
30
+ @category = data['category'] || @category
31
+ @coverage_info = data['coverage_info'] || @coverage_info
32
+ @live_coverage = data.dig('coverage_info', 'live_coverage') || @live_coverage
29
33
 
30
34
  parse_info(data)
31
35
  parse_season(data)
@@ -38,6 +42,22 @@ module Sportradar
38
42
  @seasons_hash.values
39
43
  end
40
44
 
45
+ def schedule
46
+ return self if @schedule_retrieved
47
+ get_schedule
48
+ self
49
+ end
50
+
51
+ def year
52
+ if current_season&.year&.split('/')&.last
53
+ 2000 + current_season.year.split('/').last.to_i
54
+ end
55
+ end
56
+
57
+ def current_season
58
+ seasons.detect(&:current?)
59
+ end
60
+
41
61
  def standings(type = nil)
42
62
  if type
43
63
  @standings_hash[type]
@@ -68,6 +88,7 @@ module Sportradar
68
88
 
69
89
  def parse_season(data)
70
90
  if data['season_coverage_info']
91
+ @season_coverage_info = data['season_coverage_info'] if data['season_coverage_info']
71
92
  data['season_coverage_info']['id'] ||= data['season_coverage_info'].delete('season_id')
72
93
  create_data(@seasons_hash, data['season_coverage_info'], klass: Season, api: api, tournament: self)
73
94
  end
@@ -150,6 +171,7 @@ module Sportradar
150
171
  ingest_schedule(data)
151
172
  end
152
173
  def ingest_schedule(data)
174
+ @schedule_retrieved = true
153
175
  update(data)
154
176
  # TODO parse the rest of the data. keys: ["tournament", "sport_events"]
155
177
  data
@@ -216,6 +238,7 @@ module Sportradar
216
238
  'eu.uefa_champions_league' => "sr:tournament:7",
217
239
  'eu.la_liga' => "sr:tournament:8",
218
240
  'eu.eng_premier_league' => "sr:tournament:17",
241
+ 'eu.premier_league' => "sr:tournament:17",
219
242
  'eu.serie_a' => "sr:tournament:23",
220
243
  'eu.ligue_1' => "sr:tournament:34",
221
244
  'eu.bundesliga' => "sr:tournament:35",
@@ -11,6 +11,7 @@ require_relative 'soccer/team'
11
11
  require_relative 'soccer/player'
12
12
  require_relative 'soccer/venue'
13
13
  require_relative 'soccer/fact'
14
+ require_relative 'soccer/scoring'
14
15
 
15
16
  module Sportradar
16
17
  module Api
@@ -1,5 +1,5 @@
1
1
  module Sportradar
2
2
  module Api
3
- VERSION = "0.13.0"
3
+ VERSION = "0.13.21"
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.13.0
4
+ version: 0.13.21
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-10-30 00:00:00.000000000 Z
11
+ date: 2018-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -314,6 +314,7 @@ files:
314
314
  - lib/sportradar/api/basketball/plays/free_throw_made.rb
315
315
  - lib/sportradar/api/basketball/plays/free_throw_miss.rb
316
316
  - lib/sportradar/api/basketball/plays/jumpball.rb
317
+ - lib/sportradar/api/basketball/plays/jumpball_violation.rb
317
318
  - lib/sportradar/api/basketball/plays/kickball.rb
318
319
  - lib/sportradar/api/basketball/plays/lane.rb
319
320
  - lib/sportradar/api/basketball/plays/lineup_change.rb
@@ -432,24 +433,8 @@ files:
432
433
  - lib/sportradar/api/odds.rb
433
434
  - lib/sportradar/api/poll.rb
434
435
  - lib/sportradar/api/request.rb
435
- - lib/sportradar/api/soccer-old.rb
436
- - lib/sportradar/api/soccer-old/boxscore.rb
437
- - lib/sportradar/api/soccer-old/category.rb
438
- - lib/sportradar/api/soccer-old/fact.rb
439
- - lib/sportradar/api/soccer-old/hierarchy.rb
440
- - lib/sportradar/api/soccer-old/match.rb
441
- - lib/sportradar/api/soccer-old/player.rb
442
- - lib/sportradar/api/soccer-old/ranking.rb
443
- - lib/sportradar/api/soccer-old/schedule.rb
444
- - lib/sportradar/api/soccer-old/season.rb
445
- - lib/sportradar/api/soccer-old/standing.rb
446
- - lib/sportradar/api/soccer-old/statistic.rb
447
- - lib/sportradar/api/soccer-old/summary.rb
448
- - lib/sportradar/api/soccer-old/team.rb
449
- - lib/sportradar/api/soccer-old/tournament.rb
450
- - lib/sportradar/api/soccer-old/tournament_group.rb
451
- - lib/sportradar/api/soccer-old/venue.rb
452
436
  - lib/sportradar/api/soccer.rb
437
+ - lib/sportradar/api/soccer/README.md
453
438
  - lib/sportradar/api/soccer/api.rb
454
439
  - lib/sportradar/api/soccer/event.rb
455
440
  - lib/sportradar/api/soccer/fact.rb
@@ -457,6 +442,7 @@ files:
457
442
  - lib/sportradar/api/soccer/lineup.rb
458
443
  - lib/sportradar/api/soccer/match.rb
459
444
  - lib/sportradar/api/soccer/player.rb
445
+ - lib/sportradar/api/soccer/scoring.rb
460
446
  - lib/sportradar/api/soccer/season.rb
461
447
  - lib/sportradar/api/soccer/standing.rb
462
448
  - lib/sportradar/api/soccer/team.rb
@@ -464,16 +450,6 @@ files:
464
450
  - lib/sportradar/api/soccer/tournament.rb
465
451
  - lib/sportradar/api/soccer/venue.rb
466
452
  - lib/sportradar/api/version.rb
467
- - soccer-old/boxscore_test.rb
468
- - soccer-old/hierarchy_test.rb
469
- - soccer-old/match_test.rb
470
- - soccer-old/player_test.rb
471
- - soccer-old/ranking_test.rb
472
- - soccer-old/schedule_test.rb
473
- - soccer-old/standing_test.rb
474
- - soccer-old/summary_test.rb
475
- - soccer-old/team_test.rb
476
- - soccer-old_test.rb
477
453
  - sportradar-api.gemspec
478
454
  homepage: https://github.com/beneggett/sportradar-api
479
455
  licenses: []
@@ -1,13 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Soccer::Boxscore < Data
4
- attr_accessor :response, :matches
5
-
6
- def initialize(data)
7
- @response = data
8
- @matches = parse_into_array(selector: response["boxscore"]["matches"]["match"], klass: Sportradar::Api::Soccer::Match) if response['boxscore'] && response['boxscore']['matches'] && response["boxscore"]["matches"]["match"]
9
- end
10
-
11
- end
12
- end
13
- end
@@ -1,17 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Soccer::Category < Data
4
- attr_accessor :response, :id, :name, :country_code, :country, :tournament_groups
5
-
6
- def initialize(data)
7
- @response = data
8
- @id = data["id"]
9
- @name = data["name"]
10
- @country_code = data["country_code"]
11
- @country = data["country"]
12
- @tournament_groups = parse_into_array(selector: response["tournament_group"], klass: Sportradar::Api::Soccer::TournamentGroup) if response["tournament_group"]
13
- end
14
-
15
- end
16
- end
17
- end
@@ -1,61 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Soccer::Fact < Data
4
-
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
-
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
35
-
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
59
- end
60
- end
61
- end
@@ -1,14 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Soccer::Hierarchy < Data
4
- attr_accessor :response, :categories
5
-
6
- def initialize(data)
7
- @response = data
8
- @categories = parse_into_array(selector: response["category"], klass: Sportradar::Api::Soccer::Category) if response["category"]
9
- end
10
-
11
- end
12
- end
13
- end
14
-
@@ -1,55 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Soccer::Match < Data
4
-
5
- attr_accessor :id, :status, :scheduled, :scratched, :season_id, :reference_id, :category, :tournament_group, :tournament, :home, :away, :venue, :round, :coverage, :period, :clock, :referee, :facts, :response, :future_game, :winner
6
-
7
- def initialize(data)
8
- @response = data
9
- @id = data["id"]
10
- @reference_id = data["reference_id"]
11
- @scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
12
- @scratched = data["scratched"] == "true"
13
- @season_id = data["season_id"]
14
- @status = data["status"]
15
- @category = Sportradar::Api::Soccer::Category.new data["category"] if data["category"]
16
- @coverage = OpenStruct.new data["coverage"]
17
- @round = OpenStruct.new data["round"]
18
- @tournament = Sportradar::Api::Soccer::Tournament.new data["tournament"] if data["tournament"]
19
- @tournament_group = Sportradar::Api::Soccer::TournamentGroup.new data["tournament_group"] if data["tournament_group"]
20
-
21
- @away = Sportradar::Api::Soccer::Team.new data["away"] if data["away"]
22
- @home = Sportradar::Api::Soccer::Team.new data["home"] if data["home"]
23
- @venue = Sportradar::Api::Soccer::Venue.new data["venue"] if data["venue"]
24
-
25
- @future_game = @scheduled > Time.now.utc
26
- @winner = find_winner if @home && @away && !future_game
27
-
28
- # Actual stats from match summary
29
- @period = data["period"]
30
- @clock = data["clock"]
31
- @referee = OpenStruct.new data["referee"] if data["referee"]
32
- @facts = data["facts"]["fact"].map {|fact| Sportradar::Api::Soccer::Fact.new fact } if data["facts"]
33
- end
34
-
35
- def find_winner
36
- if @home.winner == 'draw'
37
- 'draw'
38
- else
39
- [@home, @away].find {|team| team.winner == "true" }
40
- end
41
-
42
- end
43
-
44
- def period_name
45
- period_names = {"P1" => "Period one", "H" => "Halftime", "P2" => "Period two", "PX1" => "Pre-extra time one", "X1" => "Extra time one", "PX2" => "Pre-extra time two", "X2" => "Extra time two", "PP" => "Pre-penalty", "P" => "Penalty"}
46
- period_names[period] if period
47
- end
48
-
49
- def status_description
50
- status_descriptions = {"scheduled" => "The match is scheduled to be played", "inprogress" => "The match is currently in progress", "postponed" => "The match has been postponed to a future date", "delayed" => "The match has been temporarily delayed and will be continued", "canceled" => "The match has been canceled and will not be played", "closed" => "The match is over"}
51
- status_descriptions[status] if status
52
- end
53
- end
54
- end
55
- end
@@ -1,88 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Soccer::Player < Data
4
-
5
- attr_accessor :id, :first_name, :last_name, :country_code, :country, :reference_id, :full_first_name, :full_last_name, :position, :started, :jersey_number, :tactical_position, :tactical_order, :statistics, :preferred_foot, :birthdate, :height_in, :weight_lb, :height_cm, :weight_kg, :teams, :response, :rank, :total, :statistics, :last_modified
6
-
7
- def initialize(data)
8
- @response = data
9
- @teams = parse_into_array(selector: response["team"], klass: Sportradar::Api::Soccer::Team) if response["team"]
10
- @teams = parse_into_array(selector: response["teams"]["team"], klass: Sportradar::Api::Soccer::Team) if response["teams"] && response["teams"]["team"]
11
- @id = data["id"]
12
- @first_name = data["first_name"]
13
- @last_name = data["last_name"]
14
- @country_code = data["country_code"]
15
- @country = data["country"]
16
- @reference_id = data["reference_id"]
17
- @full_first_name = data["full_first_name"]
18
- @full_last_name = data["full_last_name"]
19
- @position = data["position"] || primary_team.try(:position)
20
- @started = data["started"]
21
- @jersey_number = data["jersey_number"] || primary_team.try(:jersey_number)
22
- @tactical_position = data["tactical_position"]
23
- @tactical_order = data["tactical_order"]
24
- @last_modified = data["last_modified"]
25
-
26
- # profile
27
- @preferred_foot = data["preferred_foot"]
28
- @birthdate = data["birthdate"]
29
- @height_in = data["height_in"]
30
- @weight_lb = data["weight_lb"]
31
- @height_cm = data["height_cm"]
32
- @weight_kg = data["weight_kg"]
33
- @rank = data["rank"]
34
- @total = OpenStruct.new data["total"] if data["total"]
35
- @statistics = parse_into_array(selector:response["statistics"]["season"], klass: Sportradar::Api::Soccer::Season) if response["statistics"] && response["statistics"]["season"]
36
-
37
- end
38
-
39
- def name
40
- [first_name, last_name].join(' ')
41
- end
42
-
43
- def full_name
44
- full = [full_first_name, full_last_name].join(' ')
45
- full == " " ? name : full
46
- end
47
-
48
- def position_name
49
- positions = {"G" => "Goalie", "D" => "Defender", "M" => "Midfielder", "F" => "Forward", "" => "N/A"}
50
- if position
51
- positions[position]
52
- elsif primary_team.present?
53
- positions[primary_team.position]
54
- end
55
- end
56
-
57
- def primary_team
58
- if teams.count == 1
59
- teams.first
60
- else
61
- teams.find {|team| team.name != team.country_code}
62
- end if teams
63
- end
64
-
65
-
66
- def tactical_position_name
67
- tactical_positions = { "0" => "Unknown", "1" => "Goalkeeper", "2" => "Right Back", "3" => "Central Defender", "4" => "Left Back", "5" => "Right winger", "6" => "Central Midfielder", "7" => "Left Winger", "8" => "Forward" }
68
- tactical_positions[tactical_position] if tactical_position
69
- end
70
-
71
- def age
72
- if birthdate.present?
73
- now = Time.now.utc.to_date
74
- dob = birthdate.to_date
75
- now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
76
- end
77
- end
78
-
79
- def height_ft
80
- if height_in.present?
81
- feet, inches = height_in.to_i.divmod(12)
82
- "#{feet}' #{inches}\""
83
- end
84
- end
85
-
86
- end
87
- end
88
- end
@@ -1,13 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Soccer::Ranking < Data
4
- attr_accessor :response, :categories
5
-
6
- def initialize(data)
7
- @response = data
8
- @categories = parse_into_array(selector: response["category"], klass: Sportradar::Api::Soccer::Category) if response["category"]
9
- end
10
-
11
- end
12
- end
13
- end
@@ -1,22 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Soccer::Schedule < Data
4
- attr_accessor :response, :matches
5
-
6
- def initialize(data)
7
- @response = data
8
- @matches = parse_into_array(selector: response["schedule"]["matches"]["match"], klass: Sportradar::Api::Soccer::Match) if response['schedule'] && response['schedule']['matches'] && response["schedule"]["matches"]["match"]
9
- end
10
-
11
- def league(league_name)
12
- # ActiveSupport
13
- matches.select{ |match| match.tournament_group.name.parameterize == league_name.parameterize}
14
- end
15
-
16
- def available_leagues
17
- matches.map {|match| match.tournament_group.name}.uniq
18
- end
19
-
20
- end
21
- end
22
- end
@@ -1,14 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Soccer::Season < Data
4
- attr_accessor :response, :year, :statistics
5
-
6
- def initialize(data)
7
- @response = data
8
- @year = data["year"]
9
- @statistics = parse_into_array(selector: response["statistic"], klass: Sportradar::Api::Soccer::Statistic) if response["statistic"]
10
- end
11
-
12
- end
13
- end
14
- end