sportradar-api 0.1.38 → 0.9.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 +13 -10
  4. data/Guardfile +7 -0
  5. data/lib/sportradar/api/config.rb +4 -5
  6. data/lib/sportradar/api/content.rb +12 -4
  7. data/lib/sportradar/api/content/article.rb +1 -12
  8. data/lib/sportradar/api/content/article_list.rb +1 -12
  9. data/lib/sportradar/api/data.rb +16 -0
  10. data/lib/sportradar/api/error.rb +5 -2
  11. data/lib/sportradar/api/football/stat_pack.rb +4 -17
  12. data/lib/sportradar/api/football/stat_pack/defense.rb +1 -1
  13. data/lib/sportradar/api/football/stat_pack/extra_points.rb +4 -4
  14. data/lib/sportradar/api/football/stat_pack/passing.rb +1 -1
  15. data/lib/sportradar/api/football/stat_pack/penalties.rb +4 -3
  16. data/lib/sportradar/api/football/stat_pack/rushing.rb +1 -1
  17. data/lib/sportradar/api/images.rb +19 -6
  18. data/lib/sportradar/api/images/asset.rb +2 -26
  19. data/lib/sportradar/api/images/asset_list.rb +1 -12
  20. data/lib/sportradar/api/live_images.rb +5 -1
  21. data/lib/sportradar/api/nfl.rb +73 -17
  22. data/lib/sportradar/api/nfl/changelog.rb +2 -24
  23. data/lib/sportradar/api/nfl/conference.rb +1 -13
  24. data/lib/sportradar/api/nfl/depth_chart.rb +1 -0
  25. data/lib/sportradar/api/nfl/division.rb +1 -13
  26. data/lib/sportradar/api/nfl/drive.rb +2 -20
  27. data/lib/sportradar/api/nfl/franchise.rb +0 -1
  28. data/lib/sportradar/api/nfl/game.rb +14 -14
  29. data/lib/sportradar/api/nfl/game_statistic.rb +73 -15
  30. data/lib/sportradar/api/nfl/hierarchy.rb +3 -30
  31. data/lib/sportradar/api/nfl/league_depth_chart.rb +1 -4
  32. data/lib/sportradar/api/nfl/play.rb +11 -5
  33. data/lib/sportradar/api/nfl/player.rb +6 -10
  34. data/lib/sportradar/api/nfl/position.rb +1 -13
  35. data/lib/sportradar/api/nfl/quarter.rb +1 -6
  36. data/lib/sportradar/api/nfl/scoring.rb +4 -4
  37. data/lib/sportradar/api/nfl/season.rb +4 -44
  38. data/lib/sportradar/api/nfl/team.rb +6 -35
  39. data/lib/sportradar/api/nfl/team_depth_chart.rb +8 -7
  40. data/lib/sportradar/api/nfl/week.rb +1 -14
  41. data/lib/sportradar/api/request.rb +15 -18
  42. data/lib/sportradar/api/soccer.rb +55 -11
  43. data/lib/sportradar/api/soccer/boxscore.rb +1 -12
  44. data/lib/sportradar/api/soccer/category.rb +1 -12
  45. data/lib/sportradar/api/soccer/hierarchy.rb +2 -14
  46. data/lib/sportradar/api/soccer/match.rb +3 -3
  47. data/lib/sportradar/api/soccer/player.rb +4 -31
  48. data/lib/sportradar/api/soccer/ranking.rb +1 -14
  49. data/lib/sportradar/api/soccer/schedule.rb +1 -12
  50. data/lib/sportradar/api/soccer/season.rb +1 -14
  51. data/lib/sportradar/api/soccer/standing.rb +1 -12
  52. data/lib/sportradar/api/soccer/summary.rb +1 -13
  53. data/lib/sportradar/api/soccer/team.rb +4 -3
  54. data/lib/sportradar/api/soccer/tournament.rb +1 -14
  55. data/lib/sportradar/api/soccer/tournament_group.rb +1 -11
  56. data/lib/sportradar/api/version.rb +1 -1
  57. data/sportradar-api.gemspec +2 -0
  58. metadata +17 -3
  59. data/lib/sportradar/api/nfl/stat.rb +0 -7
@@ -8,36 +8,9 @@ module Sportradar
8
8
  @id = data["id"]
9
9
  @name = data["name"]
10
10
  @alias = data["alias"]
11
- set_conferences
12
- set_divisions
13
- set_teams
14
- end
15
-
16
- private
17
-
18
- def set_conferences
19
- if response["conference"]
20
- if response["conference"].is_a?(Array)
21
- @conferences = response["conference"].map {|conference| Sportradar::Api::Nfl::Conference.new conference }
22
- elsif response["conference"].is_a?(Hash)
23
- @conferences = [ Sportradar::Api::Nfl::Conference.new(response["conference"]) ]
24
- end
25
- end
26
- end
27
-
28
- def set_divisions
29
- if conferences&.all? { |conference| conference.divisions }
30
- @divisions = conferences.flat_map(&:divisions)
31
- elsif response["division"]
32
- if response["division"].is_a?(Array)
33
- @divisions = response["division"].map {|division| Sportradar::Api::Nfl::Division.new division }
34
- elsif response["division"].is_a?(Hash)
35
- @divisions = [ Sportradar::Api::Nfl::Division.new(response["division"]) ]
36
- end
37
- end
38
- end
39
-
40
- def set_teams
11
+ @conferences = parse_into_array(selector: data["conference"], klass: Sportradar::Api::Nfl::Conference) if data["conference"]
12
+ @divisions = conferences.flat_map(&:divisions) if conferences&.all? { |conference| conference.divisions }
13
+ @divisions ||= parse_into_array(selector: data["division"], klass: Sportradar::Api::Nfl::Division) if data["division"]
41
14
  @teams = @divisions.flat_map(&:teams) if divisions&.all? {|division| division.teams }
42
15
  end
43
16
 
@@ -6,13 +6,10 @@ module Sportradar
6
6
 
7
7
  def initialize(data)
8
8
  @response = data
9
- depth_chart_data = data["season"].delete('depth_charts')
9
+ depth_chart_data = data["season"]['depth_charts']
10
10
  @season = Sportradar::Api::Nfl::Season.new data["season"] if data["season"]
11
11
  # @teams = depth_chart_data["team"].map {|team| Sportradar::Api::Nfl::Team.new team } if depth_chart_data["team"]
12
12
  @charts = depth_chart_data["team"].map {|team| Sportradar::Api::Nfl::TeamDepthChart.new(team, season) } if depth_chart_data["team"]
13
- rescue => e
14
- puts e.message
15
- # binding.pry
16
13
  end
17
14
 
18
15
  # id is preferred search, but we allow for team abbreviation too
@@ -19,15 +19,21 @@ module Sportradar
19
19
  @scoring_play = data["scoring_play"]
20
20
  @sequence = data["sequence"]
21
21
  @start_situation = Sportradar::Api::Nfl::Situation.new data["start_situation"] if data["start_situation"]
22
- @statistics = OpenStruct.new data["statistics"] if data["statistics"] # TODO Implement statistics?
23
- if @statistics
24
- play_stats = @statistics.penalty || @statistics.rush || @statistics.return || @statistics.receive
25
- @player_id = play_stats.dig('player', 'id') if play_stats
26
- end
22
+ @statistics = OpenStruct.new data["statistics"] if data["statistics"] # TODO Implement statistics!
23
+ parse_player if @statistics
27
24
  @type = data["type"]
28
25
  @wall_clock = data["wall_clock"]
29
26
  end
30
27
 
28
+ def parse_player
29
+ # TODO: Currently there is an issue where we are only mapping one player_id to a play, but there are plays with multiple players involved.
30
+ play_stats = @statistics.penalty || @statistics.rush || @statistics.return || @statistics.receive
31
+ if play_stats.is_a?(Array)
32
+ play_stats = play_stats.first
33
+ end
34
+ @player_id = play_stats.dig('player', 'id') if play_stats
35
+ end
36
+
31
37
  end
32
38
  end
33
39
  end
@@ -33,18 +33,14 @@ module Sportradar
33
33
  @team = Sportradar::Api::Nfl::Team.new data["team"] if data["team"]
34
34
  @injury = Sportradar::Api::Nfl::Injury.new data["injury"] if data["injury"]
35
35
  @draft = Sportradar::Api::Nfl::Draft.new data["draft"] if data["draft"]
36
- set_seasons
36
+ @seasons = parse_into_array(selector: response["season"], klass: Sportradar::Api::Nfl::Season) if response["season"]
37
37
  end
38
38
 
39
- private
40
-
41
- def set_seasons
42
- if response["season"]
43
- if response["season"].is_a?(Array)
44
- @seasons = response["season"].map {|season| Sportradar::Api::Nfl::Season.new season }
45
- elsif response["season"].is_a?(Hash)
46
- @seasons = [ Sportradar::Api::Nfl::Season.new(response["season"]) ]
47
- end
39
+ def age
40
+ if birth_date.present?
41
+ now = Time.now.utc.to_date
42
+ dob = birth_date.to_date
43
+ now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
48
44
  end
49
45
  end
50
46
 
@@ -6,19 +6,7 @@ module Sportradar
6
6
  def initialize(data)
7
7
  @response = data
8
8
  @name = data["name"]
9
- set_players
10
- end
11
-
12
- private
13
-
14
- def set_players
15
- if response["player"]
16
- if response["player"].is_a?(Array)
17
- @players = response["player"].map {|player| Sportradar::Api::Nfl::Player.new player }
18
- elsif response["player"].is_a?(Hash)
19
- @players = [ Sportradar::Api::Nfl::Player.new(response["player"]) ]
20
- end
21
- end
9
+ @players = parse_into_array(selector: response["player"], klass: Sportradar::Api::Nfl::Player) if response["player"]
22
10
  end
23
11
 
24
12
  end
@@ -12,12 +12,7 @@ module Sportradar
12
12
  # @home_points = response['scoring']['home']['points'] # from play_by_play
13
13
  @away_points = data["away_points"]
14
14
  # @away_points = response['scoring']['away']['points'] # from play_by_play
15
- @drives = if (raw_drives = data.dig("play_by_play", 'drive'))
16
- raw_drives = raw_drives.is_a?(Hash) ? [ raw_drives ] : raw_drives
17
- raw_drives.map{ |drive| Sportradar::Api::Nfl::Drive.new drive }
18
- else
19
- []
20
- end
15
+ @drives = parse_into_array(selector: response["play_by_play"]["drive"], klass: Sportradar::Api::Nfl::Drive) if response["play_by_play"] && response["play_by_play"]["drive"]
21
16
  end
22
17
 
23
18
  end
@@ -5,8 +5,8 @@ module Sportradar
5
5
 
6
6
  def initialize(data)
7
7
  @response = data
8
- # @quarters = data['quarter'].map { |quarter| Sportradar::Api::Nfl::Quarter.new quarter} if data['quarter']
9
- # this is causing a problem in some scenarios, receiving ['1', 'id-hash']
8
+ response['quarter'] = response['quarter'].select {|x| x.is_a? Hash } if response['quarter'].is_a?(Array) && response['quarter'].map(&:class).uniq.count > 1
9
+ @quarters = parse_into_array(selector: response["quarter"], klass: Sportradar::Api::Nfl::Quarter) if response["quarter"]
10
10
  end
11
11
 
12
12
  def final
@@ -14,11 +14,11 @@ module Sportradar
14
14
  end
15
15
 
16
16
  def home
17
- quarters.map {|quarter| quarter['home_points'].to_i }.reduce(:+)
17
+ quarters.map {|quarter| quarter.home_points.to_i }.reduce(:+)
18
18
  end
19
19
 
20
20
  def away
21
- quarters.map {|quarter| quarter['away_points'].to_i }.reduce(:+)
21
+ quarters.map {|quarter| quarter.away_points.to_i }.reduce(:+)
22
22
  end
23
23
  end
24
24
  end
@@ -11,50 +11,10 @@ module Sportradar
11
11
  @name = data["name"]
12
12
  @team = Sportradar::Api::Nfl::Team.new(data["team"]) if data["team"].is_a?(Hash)
13
13
  @injuries = data["injuries"]["team"].map {|team| Sportradar::Api::Nfl::Team.new team } if data["injuries"] && data["injuries"]["team"]
14
- set_weeks
15
- set_conferences
16
- set_divisions
17
- set_teams
18
- end
19
-
20
- private
21
-
22
- def set_weeks
23
- if response["week"]
24
- if response["week"].is_a?(Array)
25
- @weeks = response["week"].map {|week| Sportradar::Api::Nfl::Week.new week }
26
- elsif response["week"].is_a?(Hash)
27
- @weeks = [ Sportradar::Api::Nfl::Week.new(response["week"]) ]
28
- end
29
- end
30
- end
31
-
32
- # set_(conferences|divisions|teams) are all identical to the same methods in Hierarchy
33
- # There is likely more overlap between Sportradar's NFL standings and NFL hierarchy APIs
34
- # Eventually, these should be shared between classes
35
- def set_conferences
36
- if response["conference"]
37
- if response["conference"].is_a?(Array)
38
- @conferences = response["conference"].map {|conference| Sportradar::Api::Nfl::Conference.new conference }
39
- elsif response["conference"].is_a?(Hash)
40
- @conferences = [ Sportradar::Api::Nfl::Conference.new(response["conference"]) ]
41
- end
42
- end
43
- end
44
-
45
- def set_divisions
46
- if conferences&.all? { |conference| conference.divisions }
47
- @divisions = conferences.flat_map(&:divisions)
48
- elsif response["division"]
49
- if response["division"].is_a?(Array)
50
- @divisions = response["division"].map {|division| Sportradar::Api::Nfl::Division.new division }
51
- elsif response["division"].is_a?(Hash)
52
- @divisions = [ Sportradar::Api::Nfl::Division.new(response["division"]) ]
53
- end
54
- end
55
- end
56
-
57
- def set_teams
14
+ @weeks = parse_into_array(selector: response["week"], klass: Sportradar::Api::Nfl::Week) if response["week"]
15
+ @conferences = parse_into_array(selector: response["conference"], klass: Sportradar::Api::Nfl::Conference) if response["conference"]
16
+ @divisions = conferences.flat_map(&:divisions) if conferences&.all? { |conference| conference.divisions }
17
+ @divisions ||= parse_into_array(selector: response["division"], klass: Sportradar::Api::Nfl::Division) if response["division"]
58
18
  @teams = @divisions.flat_map(&:teams) if divisions&.all? {|division| division.teams }
59
19
  end
60
20
 
@@ -29,15 +29,16 @@ module Sportradar
29
29
  @win_pct = data["win_pct"].to_f if data["win_pct"]
30
30
  @rank = data["rank"]
31
31
 
32
- @defense = data["defense"]["position"].map {|position| Sportradar::Api::Nfl::Position.new position } if data["defense"] && data["defense"]["position"]
33
- @offense = data["offense"]["position"].map {|position| Sportradar::Api::Nfl::Position.new position } if data["offense"] && data["offense"]["position"]
34
- @special_teams = data["special_teams"]["position"].map {|position| Sportradar::Api::Nfl::Position.new position } if data["special_teams"] && data["special_teams"]["position"]
35
32
  @statistics = OpenStruct.new data["statistics"] if data["statistics"] # TODO Implement better?
36
33
  @team_records = OpenStruct.new data["team_records"] if data["team_records"] # TODO Implement better?
37
34
  @player_records = OpenStruct.new data["player_records"] if data["player_records"] # TODO Implement better?
38
35
 
39
- set_players
40
- set_coaches
36
+ @defense = parse_into_array(selector: data["defense"]["position"], klass: Sportradar::Api::Nfl::Position) if data["defense"] && data["defense"]["position"]
37
+ @offense = parse_into_array(selector: data["offense"]["position"], klass: Sportradar::Api::Nfl::Position) if data["offense"] && data["offense"]["position"]
38
+ @special_teams = parse_into_array(selector: data["special_teams"]["position"], klass: Sportradar::Api::Nfl::Position) if data["special_teams"] && data["special_teams"]["position"]
39
+ @coaches = parse_into_array(selector: response["coaches"]["coach"], klass: Sportradar::Api::Nfl::Coach) if response["coaches"] && response["coaches"]["coach"]
40
+ @players = parse_into_array(selector: response["player"], klass: Sportradar::Api::Nfl::Player) if response["player"]
41
+ @players ||= parse_into_array(selector: response["players"]["player"], klass: Sportradar::Api::Nfl::Player) if response["players"] && response["players"]["player"]
41
42
  end
42
43
 
43
44
  def full_name
@@ -50,36 +51,6 @@ module Sportradar
50
51
  end
51
52
  end
52
53
 
53
- private
54
-
55
- def set_players
56
- if response["player"]
57
- if response["player"].is_a?(Array)
58
- @players = response["player"].map {|player| Sportradar::Api::Nfl::Player.new player }
59
- elsif response["player"].is_a?(Hash)
60
- @players = [ Sportradar::Api::Nfl::Player.new(response["player"]) ]
61
- end
62
- elsif response["players"] && response["players"]["player"]
63
- if response["players"]["player"].is_a?(Array)
64
- @players = response["players"]["player"].map {|player| Sportradar::Api::Nfl::Player.new player }
65
- elsif response["players"]["player"].is_a?(Hash)
66
- @players = [ Sportradar::Api::Nfl::Player.new(response["players"]["player"]) ]
67
- end
68
- else
69
- @players = []
70
- end
71
- end
72
-
73
- def set_coaches
74
- if response["coaches"] && response["coaches"]["coach"]
75
- if response["coaches"]["coach"].is_a?(Array)
76
- @coaches = response["coaches"]["coach"].map {|coach| Sportradar::Api::Nfl::Coach.new coach }
77
- elsif response["coaches"]["coach"].is_a?(Hash)
78
- @coaches = [ Sportradar::Api::Nfl::Coach.new(response["coaches"]["coach"]) ]
79
- end
80
- end
81
- end
82
-
83
54
  end
84
55
  end
85
56
  end
@@ -13,15 +13,15 @@ module Sportradar
13
13
  end
14
14
 
15
15
  def offense
16
- @offense ||= Sportradar::Api::Nfl::DepthChart.new(response['offense'])
16
+ @offense ||= Sportradar::Api::Nfl::DepthChart.new(response['offense']) if response['offense']
17
17
  end
18
18
 
19
19
  def defense
20
- @defense ||= Sportradar::Api::Nfl::DepthChart.new(response['defense'])
20
+ @defense ||= Sportradar::Api::Nfl::DepthChart.new(response['defense']) if response['defense']
21
21
  end
22
22
 
23
23
  def special_teams
24
- @special_teams ||= Sportradar::Api::Nfl::DepthChart.new(response['special_teams'])
24
+ @special_teams ||= Sportradar::Api::Nfl::DepthChart.new(response['special_teams']) if response['special_teams']
25
25
  end
26
26
 
27
27
  def team
@@ -32,11 +32,12 @@ module Sportradar
32
32
  [:offense, :defense, :special_teams].each { |type| yield type, send(type) }
33
33
  end
34
34
 
35
- private
35
+ # These aren't ever used, but handy if you need to invoke for testing
36
+ # private
36
37
 
37
- def set_charts
38
- [offense, defense, special_teams]
39
- end
38
+ # def set_charts
39
+ # [offense, defense, special_teams]
40
+ # end
40
41
 
41
42
  end
42
43
  end
@@ -3,25 +3,12 @@ module Sportradar
3
3
  class Nfl::Week < Data
4
4
  attr_accessor :response, :id, :sequence, :title, :games
5
5
 
6
-
7
6
  def initialize(data)
8
7
  @response = data
9
8
  @id = data["id"]
10
9
  @sequence = data["sequence"]
11
10
  @title = data["title"]
12
- set_games
13
- end
14
-
15
- private
16
-
17
- def set_games
18
- if response["game"]
19
- if response["game"].is_a?(Array)
20
- @games = response["game"].map {|game| Sportradar::Api::Nfl::Game.new game }
21
- elsif response["game"].is_a?(Hash)
22
- @games = [ Sportradar::Api::Nfl::Game.new(response["game"]) ]
23
- end
24
- end
11
+ @games = parse_into_array(selector: response["game"], klass: Sportradar::Api::Nfl::Game) if response["game"]
25
12
  end
26
13
 
27
14
  end
@@ -6,31 +6,28 @@ module Sportradar
6
6
 
7
7
  attr_reader :url, :headers, :timeout, :api_key
8
8
 
9
- def base_setup(path, options={})
10
- @url = set_base(path)
11
- @url += format unless options[:format] == 'none'
12
- @headers = set_headers unless options[:format] == 'none'
13
- @api_key = options[:api_key]
14
- @timeout = options.delete(:api_timeout) || Sportradar::Api.config.api_timeout
15
- end
16
-
17
9
  def get(path, options={})
18
10
  base_setup(path, options)
19
- puts url
20
- response = self.class.get(url, headers: headers, query: options.merge(api_key), timeout: timeout)
21
- rescue Net::ReadTimeout, Net::OpenTimeout
22
- raise Sportradar::Api::Error::Timeout
23
- rescue EOFError
24
- raise Sportradar::Api::Error::NoData
25
- if response.success?
26
- response
27
- else
28
- Sportradar::Api::Error.new(response.code, response.message, response)
11
+ begin
12
+ response = self.class.get(url, headers: headers, query: options.merge(api_key), timeout: timeout)
13
+ rescue Net::ReadTimeout, Net::OpenTimeout
14
+ raise Sportradar::Api::Error::Timeout
15
+ rescue EOFError
16
+ raise Sportradar::Api::Error::NoData
29
17
  end
18
+ return Sportradar::Api::Error.new(response.code, response.message, response) unless response.success?
19
+ response
30
20
  end
31
21
 
32
22
  private
33
23
 
24
+ def base_setup(path, options={})
25
+ @url = set_base(path)
26
+ @url += format unless options[:format] == 'none'
27
+ @headers = set_headers unless options[:format] == 'none'
28
+ @timeout = options.delete(:api_timeout) || Sportradar::Api.config.api_timeout
29
+ end
30
+
34
31
  def set_base(path)
35
32
  protocol = !!Sportradar::Api.config.use_ssl ? "https://" : "http://"
36
33
  url = "#{protocol}api.sportradar.us"
@@ -11,65 +11,109 @@ module Sportradar
11
11
 
12
12
  def schedule
13
13
  response = get request_url("matches/schedule")
14
- Sportradar::Api::Soccer::Schedule.new response
14
+ if response.success?
15
+ Sportradar::Api::Soccer::Schedule.new response
16
+ else
17
+ response
18
+ end
15
19
  end
16
20
 
17
21
  # date = Date.parse('2016-07-17')
18
22
  def daily_schedule(date = Date.today)
19
23
  response = get request_url("matches/#{date_path(date)}/schedule")
20
- Sportradar::Api::Soccer::Schedule.new response
24
+ if response.success?
25
+ Sportradar::Api::Soccer::Schedule.new response
26
+ else
27
+ response
28
+ end
21
29
  end
22
30
 
23
31
 
24
32
  def daily_summary(date = Date.today)
25
33
  response = get request_url("matches/#{date_path(date)}/summary")
26
- Sportradar::Api::Soccer::Summary.new response
34
+ if response.success?
35
+ Sportradar::Api::Soccer::Summary.new response
36
+ else
37
+ response
38
+ end
27
39
  end
28
40
 
29
41
  def daily_boxscore(date = Date.today)
30
42
  response = get request_url("matches/#{date_path(date)}/boxscore")
31
- Sportradar::Api::Soccer::Boxscore.new response
43
+ if response.success?
44
+ Sportradar::Api::Soccer::Boxscore.new response
45
+ else
46
+ response
47
+ end
32
48
  end
33
49
 
34
50
  # match_id = "357607e9-87cd-4848-b53e-0485d9c1a3bc"
35
51
  def match_summary(match_id)
36
52
  check_simulation(match_id)
37
53
  response = get request_url("matches/#{match_id}/summary")
38
- Sportradar::Api::Soccer::Summary.new response
54
+ if response.success?
55
+ Sportradar::Api::Soccer::Summary.new response
56
+ else
57
+ response
58
+ end
39
59
  end
40
60
 
41
61
  # match_id = "357607e9-87cd-4848-b53e-0485d9c1a3bc"
42
62
  def match_boxscore(match_id)
43
63
  check_simulation(match_id)
44
64
  response = get request_url("matches/#{match_id}/boxscore")
45
- Sportradar::Api::Soccer::Boxscore.new response
65
+ if response.success?
66
+ Sportradar::Api::Soccer::Boxscore.new response
67
+ else
68
+ response
69
+ end
46
70
  end
47
71
 
48
72
  # team_id = "b78b9f61-0697-4347-a1b6-b7685a130eb1"
49
73
  def team_profile(team_id)
50
74
  response = get request_url("teams/#{team_id}/profile")
51
- Sportradar::Api::Soccer::Team.new response["profile"]["team"] if response.success?
75
+ if response.success? && response["profile"] && response["profile"]["team"]
76
+ Sportradar::Api::Soccer::Team.new response["profile"]["team"]
77
+ else
78
+ response
79
+ end
52
80
  end
53
81
 
54
82
  # player_id = "2aeacd39-3f9c-42af-957e-9df8573973c4"
55
83
  def player_profile(player_id)
56
84
  response = get request_url("players/#{player_id}/profile")
57
- Sportradar::Api::Soccer::Player.new response["profile"]["player"] if response.success? && response["profile"] && response["profile"]["player"]
85
+ if response.success? && response["profile"] && response["profile"]["player"]
86
+ Sportradar::Api::Soccer::Player.new response["profile"]["player"]
87
+ else
88
+ response
89
+ end
58
90
  end
59
91
 
60
92
  def player_rankings
61
93
  response = get request_url("players/leader")
62
- Sportradar::Api::Soccer::Ranking.new response["leaders"] if response.success? && response["leaders"]
94
+ if response.success? && response["leaders"]
95
+ Sportradar::Api::Soccer::Ranking.new response["leaders"]
96
+ else
97
+ response
98
+ end
63
99
  end
64
100
 
65
101
  def team_hierarchy
66
102
  response = get request_url("teams/hierarchy")
67
- Sportradar::Api::Soccer::Hierarchy.new response["hierarchy"] if response.success? && response["hierarchy"]
103
+ if response.success? && response["hierarchy"]
104
+ Sportradar::Api::Soccer::Hierarchy.new response["hierarchy"]
105
+ else
106
+ response
107
+ end
68
108
  end
69
109
 
70
110
  def team_standings
71
111
  response = get request_url("teams/standing")
72
- Sportradar::Api::Soccer::Standing.new response["standings"] if response.success? && response["standings"]
112
+ if response.success?
113
+ Sportradar::Api::Soccer::Standing.new response["standings"]
114
+ else
115
+ response
116
+ end
73
117
  end
74
118
 
75
119
  def simulation_match