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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +13 -10
- data/Guardfile +7 -0
- data/lib/sportradar/api/config.rb +4 -5
- data/lib/sportradar/api/content.rb +12 -4
- data/lib/sportradar/api/content/article.rb +1 -12
- data/lib/sportradar/api/content/article_list.rb +1 -12
- data/lib/sportradar/api/data.rb +16 -0
- data/lib/sportradar/api/error.rb +5 -2
- data/lib/sportradar/api/football/stat_pack.rb +4 -17
- data/lib/sportradar/api/football/stat_pack/defense.rb +1 -1
- data/lib/sportradar/api/football/stat_pack/extra_points.rb +4 -4
- data/lib/sportradar/api/football/stat_pack/passing.rb +1 -1
- data/lib/sportradar/api/football/stat_pack/penalties.rb +4 -3
- data/lib/sportradar/api/football/stat_pack/rushing.rb +1 -1
- data/lib/sportradar/api/images.rb +19 -6
- data/lib/sportradar/api/images/asset.rb +2 -26
- data/lib/sportradar/api/images/asset_list.rb +1 -12
- data/lib/sportradar/api/live_images.rb +5 -1
- data/lib/sportradar/api/nfl.rb +73 -17
- data/lib/sportradar/api/nfl/changelog.rb +2 -24
- data/lib/sportradar/api/nfl/conference.rb +1 -13
- data/lib/sportradar/api/nfl/depth_chart.rb +1 -0
- data/lib/sportradar/api/nfl/division.rb +1 -13
- data/lib/sportradar/api/nfl/drive.rb +2 -20
- data/lib/sportradar/api/nfl/franchise.rb +0 -1
- data/lib/sportradar/api/nfl/game.rb +14 -14
- data/lib/sportradar/api/nfl/game_statistic.rb +73 -15
- data/lib/sportradar/api/nfl/hierarchy.rb +3 -30
- data/lib/sportradar/api/nfl/league_depth_chart.rb +1 -4
- data/lib/sportradar/api/nfl/play.rb +11 -5
- data/lib/sportradar/api/nfl/player.rb +6 -10
- data/lib/sportradar/api/nfl/position.rb +1 -13
- data/lib/sportradar/api/nfl/quarter.rb +1 -6
- data/lib/sportradar/api/nfl/scoring.rb +4 -4
- data/lib/sportradar/api/nfl/season.rb +4 -44
- data/lib/sportradar/api/nfl/team.rb +6 -35
- data/lib/sportradar/api/nfl/team_depth_chart.rb +8 -7
- data/lib/sportradar/api/nfl/week.rb +1 -14
- data/lib/sportradar/api/request.rb +15 -18
- data/lib/sportradar/api/soccer.rb +55 -11
- data/lib/sportradar/api/soccer/boxscore.rb +1 -12
- data/lib/sportradar/api/soccer/category.rb +1 -12
- data/lib/sportradar/api/soccer/hierarchy.rb +2 -14
- data/lib/sportradar/api/soccer/match.rb +3 -3
- data/lib/sportradar/api/soccer/player.rb +4 -31
- data/lib/sportradar/api/soccer/ranking.rb +1 -14
- data/lib/sportradar/api/soccer/schedule.rb +1 -12
- data/lib/sportradar/api/soccer/season.rb +1 -14
- data/lib/sportradar/api/soccer/standing.rb +1 -12
- data/lib/sportradar/api/soccer/summary.rb +1 -13
- data/lib/sportradar/api/soccer/team.rb +4 -3
- data/lib/sportradar/api/soccer/tournament.rb +1 -14
- data/lib/sportradar/api/soccer/tournament_group.rb +1 -11
- data/lib/sportradar/api/version.rb +1 -1
- data/sportradar-api.gemspec +2 -0
- metadata +17 -3
- 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
|
-
|
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
|
-
|
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
|
|
data/lib/sportradar/api/nfl.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
143
|
+
def daily_changelog(date = Date.today)
|
92
144
|
response = get request_url("league/#{date_path(date)}/changes")
|
93
|
-
|
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{ |
|
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
|
-
|
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
|
-
|
11
|
-
|
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
|
-
|
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
|
@@ -8,19 +8,7 @@ module Sportradar
|
|
8
8
|
@id = data["id"]
|
9
9
|
@name = data["name"]
|
10
10
|
@alias = data["alias"]
|
11
|
-
|
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
|
-
|
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
|
@@ -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
|
-
|
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 { |
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|