sportradar-api 0.1.38 → 0.9.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 +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
@@ -7,18 +7,7 @@ module Sportradar
7
7
  @response = data
8
8
  @type = data["type"]
9
9
  @sport = data["sport"]
10
- set_assets
11
- end
12
-
13
- private
14
- def set_assets
15
- if response["asset"]
16
- if response["asset"].is_a?(Array)
17
- @assets = response["asset"].map {|x| Sportradar::Api::Images::Asset.new x }
18
- elsif response["asset"].is_a?(Hash)
19
- @assets = [ Sportradar::Api::Images::Asset.new(response["asset"]) ]
20
- end
21
- end
10
+ @assets = parse_into_array(selector: response["asset"], klass: Sportradar::Api::Images::Asset) if response["asset"]
22
11
  end
23
12
 
24
13
  end
@@ -12,7 +12,11 @@ module Sportradar
12
12
 
13
13
  def daily_manifest(date = Date.today )
14
14
  response = get request_url("#{image_type }/#{date.to_s}/manifests/all_assets")
15
- Sportradar::Api::Images::AssetList.new response["assetlist"] if response.success? && response["assetlist"]
15
+ if response.success? && response["assetlist"]
16
+ Sportradar::Api::Images::AssetList.new response["assetlist"]
17
+ else
18
+ response
19
+ end
16
20
  end
17
21
  alias_method :all_images, :daily_manifest
18
22
 
@@ -12,22 +12,38 @@ module Sportradar
12
12
  def schedule(year = Date.today.year, season = "reg")
13
13
  raise Sportradar::Api::Error::InvalidSeason unless allowed_seasons.include? season
14
14
  response = get request_url("games/#{ year }/#{ season }/schedule")
15
- Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
15
+ if response.success? && response["season"]
16
+ Sportradar::Api::Nfl::Season.new response["season"]
17
+ else
18
+ response
19
+ end
16
20
  end
17
21
 
18
22
  def weekly_schedule(week = 1, year = Date.today.year, season = "reg")
19
23
  response = get request_url("games/#{ week_path(year, season, week) }/schedule")
20
- Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
24
+ if response.success? && response["season"]
25
+ Sportradar::Api::Nfl::Season.new response["season"]
26
+ else
27
+ response
28
+ end
21
29
  end
22
30
 
23
31
  def weekly_depth_charts(week = 1, year = Date.today.year, season = "reg" )
24
32
  response = get request_url("seasontd/#{ week_path(year, season, week) }/depth_charts")
25
- Sportradar::Api::Nfl::LeagueDepthChart.new response
33
+ if response.success?
34
+ Sportradar::Api::Nfl::LeagueDepthChart.new response
35
+ else
36
+ response
37
+ end
26
38
  end
27
39
 
28
40
  def weekly_injuries(week = 1, year = Date.today.year, season = "reg")
29
41
  response = get request_url("seasontd/#{ week_path(year, season, week) }/injuries")
30
- Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
42
+ if response.success? && response["season"]
43
+ Sportradar::Api::Nfl::Season.new response["season"]
44
+ else
45
+ response
46
+ end
31
47
  end
32
48
 
33
49
  # past_game_id = "0141a0a5-13e5-4b28-b19f-0c3923aaef6e"
@@ -35,62 +51,102 @@ module Sportradar
35
51
  def game_boxscore(game_id)
36
52
  check_simulation(game_id)
37
53
  response = get request_url("games/#{ game_id }/boxscore")
38
- Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"] # mostly done, just missing play statistics
54
+ if response.success? && response["game"] # mostly done, just missing play statistics
55
+ Sportradar::Api::Nfl::Game.new response["game"]
56
+ else
57
+ response
58
+ end
39
59
  end
40
60
 
41
61
  def game_roster(game_id)
42
62
  check_simulation(game_id)
43
63
  response = get request_url("games/#{ game_id }/roster")
44
- Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
64
+ if response.success? && response["game"]
65
+ Sportradar::Api::Nfl::Game.new response["game"]
66
+ else
67
+ response
68
+ end
45
69
  end
46
70
 
47
71
  def game_statistics(game_id)
48
72
  check_simulation(game_id)
49
73
  response = get request_url("games/#{ game_id }/statistics")
50
- Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
74
+ if response.success? && response["game"]
75
+ Sportradar::Api::Nfl::Game.new response["game"]
76
+ else
77
+ response
78
+ end
51
79
  ## Need to properly implement statistics
52
80
  end
53
81
 
54
82
  def play_by_play(game_id)
55
83
  check_simulation(game_id)
56
84
  response = get request_url("games/#{ game_id }/pbp")
57
- Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
85
+ if response.success? && response["game"]
86
+ Sportradar::Api::Nfl::Game.new response["game"]
87
+ else
88
+ response
89
+ end
58
90
  # need to get into quarters, drives, plays, stats more still
59
91
  end
60
92
 
61
93
  # player_id = "ede260be-5ae6-4a06-887b-e4a130932705"
62
94
  def player_profile(player_id)
63
95
  response = get request_url("players/#{ player_id }/profile")
64
- Sportradar::Api::Nfl::Player.new response["player"] if response.success? && response["player"]
96
+ if response.success? && response["player"]
97
+ Sportradar::Api::Nfl::Player.new response["player"]
98
+ else
99
+ response
100
+ end
65
101
  end
66
102
 
67
103
  # team_id = "97354895-8c77-4fd4-a860-32e62ea7382a"
68
104
  def seasonal_statistics(team_id, year = Date.today.year, season = "reg")
69
105
  raise Sportradar::Api::Error::InvalidLeague unless allowed_seasons.include? season
70
106
  response = get request_url("seasontd/#{ year }/#{ season }/teams/#{ team_id }/statistics")
71
- Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
107
+ if response.success? && response["season"]
108
+ Sportradar::Api::Nfl::Season.new response["season"]
109
+ else
110
+ response
111
+ end
72
112
  # TODO: Object map team & player records - statistics
73
113
  end
74
114
 
75
115
  def team_profile(team_id)
76
116
  response = get request_url("teams/#{ team_id }/profile")
77
- Sportradar::Api::Nfl::Team.new response["team"] if response.success? && response["team"]
117
+ if response.success? && response["team"]
118
+ Sportradar::Api::Nfl::Team.new response["team"]
119
+ else
120
+ response
121
+ end
78
122
  end
79
123
 
80
124
  def league_hierarchy
81
125
  response = get request_url("league/hierarchy")
82
- Sportradar::Api::Nfl::Hierarchy.new response["league"] if response.success? && response["league"]
126
+ if response.success? && response["league"]
127
+ Sportradar::Api::Nfl::Hierarchy.new response["league"]
128
+ else
129
+ response
130
+ end
83
131
  end
84
132
 
85
133
  def standings(year = Date.today.year)
86
134
  response = get request_url("seasontd/#{ year }/standings")
87
- Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
135
+ if response.success? && response["season"]
136
+ Sportradar::Api::Nfl::Season.new response["season"]
137
+ else
138
+ response
139
+ end
88
140
  # TODO Needs implement rankings/records/stats on team
89
141
  end
90
142
 
91
- def daily_change_log(date = Date.today)
143
+ def daily_changelog(date = Date.today)
92
144
  response = get request_url("league/#{date_path(date)}/changes")
93
- Sportradar::Api::Nfl::Changelog.new response["league"]["changelog"] if response.success? && response["league"] && response["league"]["changelog"]
145
+ if response.success? && response["league"] && response["league"]["changelog"]
146
+ Sportradar::Api::Nfl::Changelog.new response["league"]["changelog"]
147
+ else
148
+ response
149
+ end
94
150
  end
95
151
 
96
152
  def simulation_games
@@ -102,12 +158,12 @@ module Sportradar
102
158
  end
103
159
 
104
160
  def active_simulation
105
- game = simulation_games.lazy.map {|game_id| game_boxscore game_id }.find{ |game| game.status == 'inprogress'}
161
+ game = simulation_games.lazy.map {|game_id| game_boxscore game_id }.find{ |g| g.status == 'inprogress' if g.is_a?(Sportradar::Api::Nfl::Game) }
106
162
  if game
107
163
  puts "Live Game: #{game.summary.home.full_name} vs #{game.summary.away.full_name}. Q#{game.quarter} #{game.clock}. game_id='#{game.id}'"
108
164
  game
109
165
  else
110
- puts "No active simulation"
166
+ "No active simulation"
111
167
  end
112
168
  end
113
169
 
@@ -7,32 +7,10 @@ module Sportradar
7
7
  @response = data
8
8
  @start_time = data["start_time"]
9
9
  @end_time = data["end_time"]
10
- set_players
11
- set_games
10
+ @games = parse_into_array(selector: response["game"], klass: Sportradar::Api::Nfl::Game) if response["game"]
11
+ @players = parse_into_array(selector: response["profiles"]["players"]["player"], klass: Sportradar::Api::Nfl::Player) if response["profiles"] && response["profiles"]["players"] && response["profiles"]["players"]["player"]
12
12
  end
13
13
 
14
- private
15
-
16
- def set_games
17
- if response["game"]
18
- if response["game"].is_a?(Array)
19
- @games = response["game"].map {|game| Sportradar::Api::Nfl::Game.new game }
20
- elsif response["game"].is_a?(Hash)
21
- @games = [ Sportradar::Api::Nfl::Game.new(response["game"]) ]
22
- end
23
- end
24
- end
25
-
26
-
27
- def set_players
28
- if response["profiles"] && response["profiles"]["players"] && response["profiles"]["players"]["player"]
29
- if response["profiles"]["players"]["player"].is_a?(Array)
30
- @players = response["profiles"]["players"]["player"].map {|player| Sportradar::Api::Nfl::Player.new player }
31
- elsif response["profiles"]["players"]["player"].is_a?(Hash)
32
- @players = [ Sportradar::Api::Nfl::Player.new(response["profiles"]["players"]["player"]) ]
33
- end
34
- end
35
- end
36
14
 
37
15
  end
38
16
  end
@@ -8,19 +8,7 @@ module Sportradar
8
8
  @id = data["id"]
9
9
  @name = data["name"]
10
10
  @alias = data["alias"]
11
- set_divisions
12
- end
13
-
14
- private
15
-
16
- def set_divisions
17
- if response["division"]
18
- if response["division"].is_a?(Array)
19
- @divisions = response["division"].map {|division| Sportradar::Api::Nfl::Division.new division }
20
- elsif response["division"].is_a?(Hash)
21
- @divisions = [ Sportradar::Api::Nfl::Division.new(response["division"]) ]
22
- end
23
- end
11
+ @divisions = parse_into_array(selector: response["division"], klass: Sportradar::Api::Nfl::Division) if response["division"]
24
12
  end
25
13
 
26
14
  end
@@ -11,6 +11,7 @@ module Sportradar
11
11
  def team(number)
12
12
  teams[number]
13
13
  end
14
+
14
15
  def each
15
16
  populate_teams
16
17
  teams.each { |team| yield team }
@@ -8,19 +8,7 @@ module Sportradar
8
8
  @id = data["id"]
9
9
  @name = data["name"]
10
10
  @alias = data["alias"]
11
- set_teams
12
- end
13
-
14
- private
15
-
16
- def set_teams
17
- if response["team"]
18
- if response["team"].is_a?(Array)
19
- @teams = response["team"].map {|team| Sportradar::Api::Nfl::Team.new team }
20
- elsif response["team"].is_a?(Hash)
21
- @teams = [ Sportradar::Api::Nfl::Team.new(response["team"]) ]
22
- end
23
- end
11
+ @teams = parse_into_array(selector: response["team"], klass: Sportradar::Api::Nfl::Team) if response["team"]
24
12
  end
25
13
 
26
14
  end
@@ -17,26 +17,8 @@ module Sportradar
17
17
  @scoring_drive = data["scoring_drive"]
18
18
  @quarter = Sportradar::Api::Nfl::Quarter.new data["quarter"] if data["quarter"]
19
19
  @team = Sportradar::Api::Nfl::Team.new data["team"] if data["team"]
20
- set_plays
21
-
22
- end
23
-
24
- private
25
-
26
- def set_plays
27
- if response["plays"] && response["plays"]["play"]
28
- if response["plays"]["play"].is_a?(Array)
29
- @plays = response["plays"]["play"].map {|play| Sportradar::Api::Nfl::Play.new play }
30
- elsif response["plays"]["play"].is_a?(Hash)
31
- @plays = [ Sportradar::Api::Nfl::Play.new(response["plays"]["play"]) ]
32
- end
33
- elsif response["play"]
34
- if response["play"].is_a?(Array)
35
- @plays = response["play"].map {|play| Sportradar::Api::Nfl::Play.new play }
36
- elsif response["play"].is_a?(Hash)
37
- @plays = [ Sportradar::Api::Nfl::Play.new(response["play"]) ]
38
- end
39
- end
20
+ @plays = parse_into_array(selector: response["play"], klass: Sportradar::Api::Nfl::Play) if response["play"]
21
+ @plays ||= parse_into_array(selector: response["plays"]["play"], klass: Sportradar::Api::Nfl::Play) if response["plays"] && response["plays"]["play"]
40
22
  end
41
23
 
42
24
  end
@@ -3,7 +3,6 @@ module Sportradar
3
3
  class Nfl::Franchise < Data
4
4
  attr_accessor :response, :name, :alias
5
5
 
6
-
7
6
  def initialize(data)
8
7
  @response = data
9
8
  @name = data["name"]
@@ -21,51 +21,51 @@ module Sportradar
21
21
  @utc_offset = data["utc_offset"]
22
22
  @weather = data["weather"]
23
23
  @clock = data["clock"]
24
+
24
25
  if data["quarter"]
25
26
  @quarter = data["quarter"][0]
26
27
  quarter_data = data["quarter"][1].is_a?(Hash) ? [ data["quarter"][1] ] : data["quarter"][1]
27
28
  @quarters = quarter_data&.map { |hash| Sportradar::Api::Nfl::Quarter.new(hash) }
28
29
  end
30
+
29
31
  @summary = Sportradar::Api::Nfl::Summary.new data["summary"] if data["summary"]
30
32
  @situation = Sportradar::Api::Nfl::Situation.new data["situation"] if data["situation"]
31
33
  @last_event = Sportradar::Api::Nfl::Event.new data["last_event"]["event"] if data["last_event"] && data["last_event"]["event"]
32
34
  @scoring = Sportradar::Api::Nfl::Scoring.new data["scoring"] if data["scoring"]
33
- set_scoring_drives
35
+
36
+ @scoring_drives = parse_into_array(selector: response["scoring_drives"]["drive"], klass: Sportradar::Api::Nfl::Drive) if response["scoring_drives"] && response["scoring_drives"]["drive"]
34
37
 
35
38
  location = data["summary"] || data
36
39
  @venue = Sportradar::Api::Nfl::Venue.new data["venue"] || location["venue"] if data["venue"] || location["venue"]
37
40
  @home = Sportradar::Api::Nfl::Team.new data["home"] || location["home"] if data["home"] || location["home"]
38
41
  @away = Sportradar::Api::Nfl::Team.new data["away"] || location["away"] if data["away"] || location["away"]
42
+
39
43
  @broadcast = Sportradar::Api::Nfl::Broadcast.new data["broadcast"] if data["broadcast"]
44
+
40
45
  if data["team"]
41
- @stats = data["team"].map { |hash| [hash["id"], Sportradar::Api::Nfl::GameStatistic.new(hash)] }.to_h
46
+ @stats = data["team"].map { |team_stat| [team_stat["id"], Sportradar::Api::Nfl::GameStatistic.new(team_stat)] }.to_h
42
47
  @home.stats = @stats[@home.id]
43
48
  @away.stats = @stats[@away.id]
44
49
  end
50
+
51
+ end
52
+
53
+ def sport_league
54
+ 'NFL'.freeze
45
55
  end
46
56
 
47
57
  def current_score
48
58
  "#{summary.home.points}-#{summary.away.points}" if summary
49
59
  end
60
+
50
61
  def drives
51
62
  quarters&.flat_map(&:drives)
52
63
  end
64
+
53
65
  def plays
54
66
  drives&.flat_map(&:plays)
55
67
  end
56
68
 
57
- private
58
-
59
- def set_scoring_drives
60
- if response["scoring_drives"] && response["scoring_drives"]["drive"]
61
- if response["scoring_drives"]["drive"].is_a?(Array)
62
- @scoring_drives = response["scoring_drives"]["drive"].map {|scoring_drive| Sportradar::Api::Nfl::Drive.new scoring_drive }
63
- elsif response["scoring_drives"]["drive"].is_a?(Hash)
64
- @scoring_drives = [ Sportradar::Api::Nfl::Drive.new(response["scoring_drives"]["drive"]) ]
65
- end
66
- end
67
- end
68
-
69
69
  end
70
70
  end
71
71
  end
@@ -27,49 +27,107 @@ module Sportradar
27
27
  @penalty_yards = data["penalty_yards"]
28
28
  @return_yards = data["return_yards"]
29
29
  end
30
+
31
+ # :skip_test_coverage:
32
+ # These are in methods rather than attributes to use them lazily. Each one is tested in it's respective class
30
33
  def rushing
31
- @rushing ||= Sportradar::Api::Football::StatPack::Rushing.new(response["rushing"])
34
+ if response["rushing"]
35
+ response["rushing"] = parse_out_hashes response["rushing"]
36
+ @rushing ||= Sportradar::Api::Football::StatPack::Rushing.new(response["rushing"])
37
+ end
32
38
  end
39
+
33
40
  def receiving
34
- @receiving ||= Sportradar::Api::Football::StatPack::Receiving.new(response["receiving"])
41
+ if response["receiving"]
42
+ response["receiving"] = parse_out_hashes response["receiving"]
43
+ @receiving ||= Sportradar::Api::Football::StatPack::Receiving.new(response["receiving"])
44
+ end
35
45
  end
46
+
36
47
  def punts
37
- @punts ||= Sportradar::Api::Football::StatPack::Punts.new(response["punts"])
48
+ if response["punts"]
49
+ response["punts"] = parse_out_hashes response["punts"]
50
+ @punts ||= Sportradar::Api::Football::StatPack::Punts.new(response["punts"])
51
+ end
38
52
  end
53
+
39
54
  def punt_returns
40
- @punt_returns ||= Sportradar::Api::Football::StatPack::PuntReturns.new(response["punt_returns"])
55
+ if response["punt_returns"]
56
+ response["punt_returns"] = parse_out_hashes response["punt_returns"]
57
+ @punt_returns ||= Sportradar::Api::Football::StatPack::PuntReturns.new(response["punt_returns"])
58
+ end
41
59
  end
60
+
42
61
  def penalties
43
- @penalties ||= Sportradar::Api::Football::StatPack::Penalties.new(response["penalties"])
62
+ if response["penalties"]
63
+ response["penalties"] = parse_out_hashes response["penalties"]
64
+ @penalties ||= Sportradar::Api::Football::StatPack::Penalties.new(response["penalties"])
65
+ end
44
66
  end
67
+
45
68
  def passing
46
- @passing ||= Sportradar::Api::Football::StatPack::Passing.new(response["passing"])
69
+ if response["passing"]
70
+ response["passing"] = parse_out_hashes response["passing"]
71
+ @passing ||= Sportradar::Api::Football::StatPack::Passing.new(response["passing"])
72
+ end
47
73
  end
74
+
48
75
  def misc_returns
49
- @misc_returns ||= Sportradar::Api::Football::StatPack::MiscReturns.new(response["misc_returns"])
76
+ if response["misc_returns"]
77
+ response["misc_returns"] = parse_out_hashes response["misc_returns"]
78
+ @misc_returns ||= Sportradar::Api::Football::StatPack::MiscReturns.new(response["misc_returns"])
79
+ end
50
80
  end
81
+
51
82
  def kickoffs
52
- @kickoffs ||= Sportradar::Api::Football::StatPack::Kickoffs.new(response["kickoffs"])
83
+ if response["kickoffs"]
84
+ response["kickoffs"] = parse_out_hashes response["kickoffs"]
85
+ @kickoffs ||= Sportradar::Api::Football::StatPack::Kickoffs.new(response["kickoffs"])
86
+ end
53
87
  end
88
+
54
89
  def kick_returns
55
- @kick_returns ||= Sportradar::Api::Football::StatPack::KickReturns.new(response["kick_returns"])
90
+ if response["kick_returns"]
91
+ response["kick_returns"] = parse_out_hashes response["kick_returns"]
92
+ @kick_returns ||= Sportradar::Api::Football::StatPack::KickReturns.new(response["kick_returns"])
93
+ end
56
94
  end
95
+
57
96
  def int_returns
58
- @int_returns ||= Sportradar::Api::Football::StatPack::IntReturns.new(response["int_returns"])
97
+ if response["int_returns"]
98
+ response["int_returns"] = parse_out_hashes response["int_returns"]
99
+ @int_returns ||= Sportradar::Api::Football::StatPack::IntReturns.new(response["int_returns"])
100
+ end
59
101
  end
102
+
60
103
  def fumbles
61
- @fumbles ||= Sportradar::Api::Football::StatPack::Fumbles.new(response["fumbles"])
104
+ if response["fumbles"]
105
+ response["fumbles"] = parse_out_hashes response["fumbles"]
106
+ @fumbles ||= Sportradar::Api::Football::StatPack::Fumbles.new(response["fumbles"])
107
+ end
62
108
  end
109
+
63
110
  def field_goals
64
- @field_goals ||= Sportradar::Api::Football::StatPack::FieldGoals.new(response["field_goals"])
111
+ if response["field_goals"]
112
+ response["field_goals"] = parse_out_hashes response["field_goals"]
113
+ @field_goals ||= Sportradar::Api::Football::StatPack::FieldGoals.new(response["field_goals"])
114
+ end
65
115
  end
116
+
66
117
  def extra_points
67
- @extra_points ||= Sportradar::Api::Football::StatPack::ExtraPoints.new(response["extra_points"])
118
+ if response["extra_points"]
119
+ response["extra_points"] = parse_out_hashes response["extra_points"]
120
+ @extra_points ||= Sportradar::Api::Football::StatPack::ExtraPoints.new(response["extra_points"])
121
+ end
68
122
  end
123
+
69
124
  def defense
70
- @defense ||= Sportradar::Api::Football::StatPack::Defense.new(response["defense"])
125
+ if response["defense"]
126
+ response["defense"] = parse_out_hashes response["defense"]
127
+ @defense ||= Sportradar::Api::Football::StatPack::Defense.new(response["defense"])
128
+ end
71
129
  end
72
-
130
+ # :skip_test_coverage:
73
131
  end
74
132
  end
75
133
  end