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