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