nba 0.1.1 → 0.2.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 +5 -5
- data/AGENTS.md +362 -0
- data/CHANGELOG.md +169 -0
- data/CLAUDE.md +1 -0
- data/LICENSE +21 -0
- data/README.md +501 -101
- data/bin/console +10 -0
- data/bin/setup +6 -0
- data/exe/nba +8 -0
- data/lib/nba/all_time_leader.rb +77 -0
- data/lib/nba/all_time_leaders.rb +185 -0
- data/lib/nba/assist_leader.rb +92 -0
- data/lib/nba/assist_leaders.rb +64 -0
- data/lib/nba/assist_tracker.rb +108 -0
- data/lib/nba/assist_tracker_entry.rb +206 -0
- data/lib/nba/award.rb +128 -0
- data/lib/nba/box_score.rb +2 -0
- data/lib/nba/box_score_advanced.rb +114 -0
- data/lib/nba/box_score_advanced_player_stat.rb +297 -0
- data/lib/nba/box_score_advanced_team_stat.rb +237 -0
- data/lib/nba/box_score_advanced_v3.rb +124 -0
- data/lib/nba/box_score_defensive_player_stat.rb +281 -0
- data/lib/nba/box_score_defensive_team_stat.rb +85 -0
- data/lib/nba/box_score_defensive_v2.rb +190 -0
- data/lib/nba/box_score_four_factors.rb +91 -0
- data/lib/nba/box_score_four_factors_player_stat.rb +185 -0
- data/lib/nba/box_score_four_factors_team_stat.rb +141 -0
- data/lib/nba/box_score_four_factors_v3.rb +133 -0
- data/lib/nba/box_score_hustle.rb +226 -0
- data/lib/nba/box_score_hustle_player_stat.rb +233 -0
- data/lib/nba/box_score_hustle_team_stat.rb +189 -0
- data/lib/nba/box_score_matchup_stat.rb +417 -0
- data/lib/nba/box_score_matchups_v3.rb +184 -0
- data/lib/nba/box_score_misc.rb +100 -0
- data/lib/nba/box_score_misc_player_stat.rb +217 -0
- data/lib/nba/box_score_misc_team_stat.rb +173 -0
- data/lib/nba/box_score_misc_v3.rb +163 -0
- data/lib/nba/box_score_player_stat.rb +273 -0
- data/lib/nba/box_score_player_track.rb +223 -0
- data/lib/nba/box_score_player_track_stat.rb +273 -0
- data/lib/nba/box_score_player_track_team_stat.rb +229 -0
- data/lib/nba/box_score_scoring.rb +103 -0
- data/lib/nba/box_score_scoring_player_stat.rb +241 -0
- data/lib/nba/box_score_scoring_team_stat.rb +197 -0
- data/lib/nba/box_score_scoring_v3.rb +170 -0
- data/lib/nba/box_score_similarity_score.rb +119 -0
- data/lib/nba/box_score_similarity_stat.rb +76 -0
- data/lib/nba/box_score_starter_bench_stat.rb +257 -0
- data/lib/nba/box_score_summary.rb +285 -0
- data/lib/nba/box_score_summary_v2.rb +202 -0
- data/lib/nba/box_score_summary_v3.rb +120 -0
- data/lib/nba/box_score_summary_v3_data.rb +419 -0
- data/lib/nba/box_score_team_stat.rb +229 -0
- data/lib/nba/box_score_traditional.rb +101 -0
- data/lib/nba/box_score_traditional_v3.rb +195 -0
- data/lib/nba/box_score_usage.rb +102 -0
- data/lib/nba/box_score_usage_player_stat.rb +265 -0
- data/lib/nba/box_score_usage_team_stat.rb +221 -0
- data/lib/nba/box_score_usage_v3.rb +169 -0
- data/lib/nba/box_score_v3_helpers.rb +144 -0
- data/lib/nba/career_stats.rb +217 -0
- data/lib/nba/cli/display/player_display.rb +98 -0
- data/lib/nba/cli/display.rb +178 -0
- data/lib/nba/cli/formatters/game_formatters.rb +86 -0
- data/lib/nba/cli/formatters/leaders_formatters.rb +26 -0
- data/lib/nba/cli/formatters/player_formatters.rb +52 -0
- data/lib/nba/cli/formatters/standings_formatters.rb +26 -0
- data/lib/nba/cli/formatters/team_formatters.rb +67 -0
- data/lib/nba/cli/formatters/time_formatters.rb +82 -0
- data/lib/nba/cli/formatters.rb +56 -0
- data/lib/nba/cli/helpers.rb +135 -0
- data/lib/nba/cli.rb +171 -20
- data/lib/nba/client.rb +35 -0
- data/lib/nba/collection.rb +89 -0
- data/lib/nba/college_player_stat.rb +200 -0
- data/lib/nba/common_player_info.rb +142 -0
- data/lib/nba/common_playoff_series.rb +90 -0
- data/lib/nba/common_team_years.rb +113 -0
- data/lib/nba/conference.rb +39 -0
- data/lib/nba/connection.rb +84 -0
- data/lib/nba/cume_stats_player.rb +358 -0
- data/lib/nba/cume_stats_player_game.rb +217 -0
- data/lib/nba/cume_stats_player_games.rb +99 -0
- data/lib/nba/cume_stats_player_games_entry.rb +25 -0
- data/lib/nba/cume_stats_player_total.rb +481 -0
- data/lib/nba/cume_stats_team.rb +349 -0
- data/lib/nba/cume_stats_team_games.rb +145 -0
- data/lib/nba/cume_stats_team_games_entry.rb +25 -0
- data/lib/nba/cume_stats_team_player.rb +485 -0
- data/lib/nba/cume_stats_team_total.rb +267 -0
- data/lib/nba/data.rb +73 -0
- data/lib/nba/defense_hub.rb +109 -0
- data/lib/nba/defense_hub_stat.rb +57 -0
- data/lib/nba/defensive_shot_stat.rb +102 -0
- data/lib/nba/division.rb +49 -0
- data/lib/nba/draft_board.rb +126 -0
- data/lib/nba/draft_board_pick.rb +173 -0
- data/lib/nba/draft_combine_anthro_measurement.rb +163 -0
- data/lib/nba/draft_combine_drill_result.rb +115 -0
- data/lib/nba/draft_combine_drill_results.rb +112 -0
- data/lib/nba/draft_combine_non_stationary_shooting.rb +268 -0
- data/lib/nba/draft_combine_non_stationary_shooting_result.rb +355 -0
- data/lib/nba/draft_combine_player_anthro.rb +133 -0
- data/lib/nba/draft_combine_spot_shooting.rb +243 -0
- data/lib/nba/draft_combine_spot_shooting_result.rb +419 -0
- data/lib/nba/draft_combine_stat.rb +211 -0
- data/lib/nba/draft_combine_stats.rb +160 -0
- data/lib/nba/draft_history.rb +142 -0
- data/lib/nba/draft_pick.rb +154 -0
- data/lib/nba/dunk_score_leader.rb +93 -0
- data/lib/nba/dunk_score_leaders.rb +77 -0
- data/lib/nba/estimated_metrics_stat.rb +152 -0
- data/lib/nba/fantasy_profile_stat.rb +142 -0
- data/lib/nba/fantasy_widget.rb +72 -0
- data/lib/nba/fantasy_widget_player.rb +98 -0
- data/lib/nba/found_game.rb +260 -0
- data/lib/nba/franchise.rb +136 -0
- data/lib/nba/franchise_history.rb +142 -0
- data/lib/nba/franchise_leader.rb +147 -0
- data/lib/nba/franchise_leaders.rb +162 -0
- data/lib/nba/franchise_player.rb +224 -0
- data/lib/nba/franchise_players.rb +147 -0
- data/lib/nba/game.rb +80 -64
- data/lib/nba/game_log.rb +349 -0
- data/lib/nba/game_rotation.rb +152 -0
- data/lib/nba/game_streak.rb +102 -0
- data/lib/nba/games.rb +46 -0
- data/lib/nba/home_page_leader.rb +99 -0
- data/lib/nba/home_page_leaders.rb +75 -0
- data/lib/nba/home_page_stat.rb +57 -0
- data/lib/nba/home_page_v2.rb +110 -0
- data/lib/nba/hustle_stats_box_score.rb +182 -0
- data/lib/nba/infographic_fan_duel_player.rb +139 -0
- data/lib/nba/infographic_fan_duel_player_stat.rb +311 -0
- data/lib/nba/ist_standing.rb +167 -0
- data/lib/nba/ist_standings.rb +81 -0
- data/lib/nba/leader.rb +103 -0
- data/lib/nba/leaders.rb +110 -0
- data/lib/nba/leaders_tile.rb +57 -0
- data/lib/nba/leaders_tiles.rb +90 -0
- data/lib/nba/league.rb +37 -0
- data/lib/nba/league_dash_lineup_stat.rb +270 -0
- data/lib/nba/league_dash_lineups.rb +177 -0
- data/lib/nba/league_dash_opp_pt_shot.rb +150 -0
- data/lib/nba/league_dash_player_bio_stat.rb +217 -0
- data/lib/nba/league_dash_player_bio_stats.rb +164 -0
- data/lib/nba/league_dash_player_clutch.rb +212 -0
- data/lib/nba/league_dash_player_clutch_stat.rb +271 -0
- data/lib/nba/league_dash_player_pt_shot.rb +152 -0
- data/lib/nba/league_dash_player_pt_shot_stat.rb +193 -0
- data/lib/nba/league_dash_player_shot_location_stat.rb +265 -0
- data/lib/nba/league_dash_player_shot_locations.rb +210 -0
- data/lib/nba/league_dash_player_stat.rb +306 -0
- data/lib/nba/league_dash_player_stats.rb +176 -0
- data/lib/nba/league_dash_pt_defend.rb +160 -0
- data/lib/nba/league_dash_pt_defend_stat.rb +145 -0
- data/lib/nba/league_dash_pt_stats.rb +152 -0
- data/lib/nba/league_dash_pt_stats_stat.rb +169 -0
- data/lib/nba/league_dash_pt_team_defend.rb +158 -0
- data/lib/nba/league_dash_pt_team_defend_stat.rb +110 -0
- data/lib/nba/league_dash_team_clutch.rb +211 -0
- data/lib/nba/league_dash_team_clutch_stat.rb +237 -0
- data/lib/nba/league_dash_team_pt_shot.rb +150 -0
- data/lib/nba/league_dash_team_pt_shot_stat.rb +166 -0
- data/lib/nba/league_dash_team_shot_location_stat.rb +230 -0
- data/lib/nba/league_dash_team_shot_locations.rb +208 -0
- data/lib/nba/league_dash_team_stat.rb +275 -0
- data/lib/nba/league_dash_team_stats.rb +172 -0
- data/lib/nba/league_game_finder.rb +170 -0
- data/lib/nba/league_game_log.rb +224 -0
- data/lib/nba/league_hustle_stats_player.rb +161 -0
- data/lib/nba/league_hustle_stats_player_stat.rb +253 -0
- data/lib/nba/league_hustle_stats_team.rb +157 -0
- data/lib/nba/league_hustle_stats_team_stat.rb +179 -0
- data/lib/nba/league_lineup_viz.rb +184 -0
- data/lib/nba/league_lineup_viz_stat.rb +214 -0
- data/lib/nba/league_player_on_details.rb +175 -0
- data/lib/nba/league_player_on_details_stat.rb +313 -0
- data/lib/nba/league_season_matchup_stat.rb +241 -0
- data/lib/nba/league_season_matchups.rb +181 -0
- data/lib/nba/league_standing.rb +284 -0
- data/lib/nba/league_standings.rb +159 -0
- data/lib/nba/league_wide_shot_stat.rb +62 -0
- data/lib/nba/live_action.rb +240 -0
- data/lib/nba/live_box_score.rb +143 -0
- data/lib/nba/live_connection.rb +84 -0
- data/lib/nba/live_game.rb +230 -0
- data/lib/nba/live_play_by_play.rb +120 -0
- data/lib/nba/live_player_stat.rb +276 -0
- data/lib/nba/live_scoreboard.rb +102 -0
- data/lib/nba/matchup_rollup.rb +98 -0
- data/lib/nba/matchups_rollup.rb +81 -0
- data/lib/nba/pass_stat.rb +209 -0
- data/lib/nba/play.rb +258 -0
- data/lib/nba/play_by_play.rb +85 -0
- data/lib/nba/play_by_play_v3.rb +91 -0
- data/lib/nba/play_type_stat.rb +206 -0
- data/lib/nba/player.rb +242 -24
- data/lib/nba/player_awards.rb +110 -0
- data/lib/nba/player_career_by_college.rb +86 -0
- data/lib/nba/player_career_by_college_rollup.rb +143 -0
- data/lib/nba/player_career_stats.rb +77 -0
- data/lib/nba/player_compare.rb +156 -0
- data/lib/nba/player_comparison_stat.rb +242 -0
- data/lib/nba/player_dash_pt_pass.rb +164 -0
- data/lib/nba/player_dash_pt_reb.rb +235 -0
- data/lib/nba/player_dash_pt_shot_defend.rb +119 -0
- data/lib/nba/player_dash_pt_shots.rb +279 -0
- data/lib/nba/player_dashboard.rb +259 -0
- data/lib/nba/player_dashboard_stat.rb +248 -0
- data/lib/nba/player_estimated_metrics.rb +84 -0
- data/lib/nba/player_fantasy_profile_bar_graph.rb +147 -0
- data/lib/nba/player_game_log.rb +72 -0
- data/lib/nba/player_game_logs.rb +117 -0
- data/lib/nba/player_game_streak_finder.rb +108 -0
- data/lib/nba/player_index.rb +135 -0
- data/lib/nba/player_index_entry.rb +266 -0
- data/lib/nba/player_info.rb +225 -0
- data/lib/nba/player_next_n_games.rb +64 -0
- data/lib/nba/player_profile_v2.rb +169 -0
- data/lib/nba/player_vs_player.rb +153 -0
- data/lib/nba/players.rb +107 -0
- data/lib/nba/playoff_matchup.rb +84 -0
- data/lib/nba/playoff_picture.rb +98 -0
- data/lib/nba/playoff_series.rb +76 -0
- data/lib/nba/position.rb +48 -0
- data/lib/nba/rebound_stat.rb +189 -0
- data/lib/nba/response_parser.rb +116 -0
- data/lib/nba/roster.rb +74 -0
- data/lib/nba/rotation_entry.rb +154 -0
- data/lib/nba/schedule.rb +183 -0
- data/lib/nba/schedule_international.rb +182 -0
- data/lib/nba/scheduled_game.rb +240 -0
- data/lib/nba/scoreboard.rb +183 -0
- data/lib/nba/scoreboard_v3.rb +104 -0
- data/lib/nba/shot.rb +208 -0
- data/lib/nba/shot_chart.rb +75 -0
- data/lib/nba/shot_chart_league_wide.rb +102 -0
- data/lib/nba/shot_chart_lineup_detail.rb +109 -0
- data/lib/nba/shot_stat.rb +174 -0
- data/lib/nba/standing.rb +129 -0
- data/lib/nba/standings.rb +75 -0
- data/lib/nba/static.rb +107 -0
- data/lib/nba/synergy_play_types.rb +211 -0
- data/lib/nba/team.rb +203 -127
- data/lib/nba/team_and_players_vs_players.rb +227 -0
- data/lib/nba/team_and_players_vs_players_stat.rb +155 -0
- data/lib/nba/team_dash_pt_pass.rb +157 -0
- data/lib/nba/team_dash_pt_reb.rb +216 -0
- data/lib/nba/team_dash_pt_shots.rb +244 -0
- data/lib/nba/team_dashboard.rb +275 -0
- data/lib/nba/team_dashboard_stat.rb +248 -0
- data/lib/nba/team_detail.rb +117 -0
- data/lib/nba/team_details.rb +173 -0
- data/lib/nba/team_estimated_metrics.rb +91 -0
- data/lib/nba/team_estimated_metrics_stat.rb +146 -0
- data/lib/nba/team_game_log.rb +143 -0
- data/lib/nba/team_game_log_entry.rb +246 -0
- data/lib/nba/team_game_log_stat.rb +275 -0
- data/lib/nba/team_game_logs.rb +163 -0
- data/lib/nba/team_game_streak.rb +111 -0
- data/lib/nba/team_game_streak_finder.rb +109 -0
- data/lib/nba/team_historical_leader.rb +207 -0
- data/lib/nba/team_historical_leaders.rb +98 -0
- data/lib/nba/team_historical_record.rb +139 -0
- data/lib/nba/team_info.rb +150 -0
- data/lib/nba/team_info_common.rb +177 -0
- data/lib/nba/team_on_off_overall_stat.rb +477 -0
- data/lib/nba/team_on_off_player_stat.rb +523 -0
- data/lib/nba/team_on_off_player_summary.rb +135 -0
- data/lib/nba/team_pass_stat.rb +183 -0
- data/lib/nba/team_player_dashboard.rb +212 -0
- data/lib/nba/team_player_on_off_details.rb +218 -0
- data/lib/nba/team_player_on_off_summary.rb +214 -0
- data/lib/nba/team_player_stat.rb +275 -0
- data/lib/nba/team_rebound_stat.rb +189 -0
- data/lib/nba/team_season_rank.rb +110 -0
- data/lib/nba/team_shot_stat.rb +173 -0
- data/lib/nba/team_vs_player.rb +151 -0
- data/lib/nba/team_vs_player_stat.rb +157 -0
- data/lib/nba/team_year.rb +55 -0
- data/lib/nba/team_year_by_year_stats.rb +152 -0
- data/lib/nba/team_year_stat.rb +282 -0
- data/lib/nba/teams.rb +33 -0
- data/lib/nba/upcoming_game.rb +115 -0
- data/lib/nba/utils.rb +94 -0
- data/lib/nba/version.rb +5 -2
- data/lib/nba/video_detail.rb +103 -0
- data/lib/nba/video_details.rb +118 -0
- data/lib/nba/video_details_asset.rb +115 -0
- data/lib/nba/video_details_asset_entry.rb +91 -0
- data/lib/nba/video_event.rb +83 -0
- data/lib/nba/video_event_asset.rb +91 -0
- data/lib/nba/video_events.rb +106 -0
- data/lib/nba/video_events_asset.rb +107 -0
- data/lib/nba/video_status.rb +129 -0
- data/lib/nba/video_status_entry.rb +161 -0
- data/lib/nba/vs_player_stat.rb +156 -0
- data/lib/nba/win_probability.rb +117 -0
- data/lib/nba/win_probability_point.rb +140 -0
- data/lib/nba.rb +249 -5
- data/sig/equalizer.rbs +3 -0
- data/sig/nba.rbs +7297 -0
- data/sig/shale.rbs +24 -0
- data/sig/thor.rbs +19 -0
- metadata +324 -95
- data/.gitignore +0 -18
- data/.travis.yml +0 -22
- data/Gemfile +0 -23
- data/LICENSE.md +0 -22
- data/Rakefile +0 -18
- data/bin/nba +0 -7
- data/cache/teams.json +0 -16529
- data/lib/faraday_middleware/scrape_game.rb +0 -41
- data/lib/nba/request.rb +0 -37
- data/nba.gemspec +0 -28
- data/spec/fixtures/games.html +0 -785
- data/spec/fixtures/teams.json +0 -16529
- data/spec/game_spec.rb +0 -40
- data/spec/spec_helper.rb +0 -25
- data/spec/team_spec.rb +0 -93
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
require_relative "client"
|
|
3
|
+
require_relative "collection"
|
|
4
|
+
require_relative "utils"
|
|
5
|
+
|
|
6
|
+
module NBA
|
|
7
|
+
# Provides methods to retrieve team on/off court summary statistics
|
|
8
|
+
#
|
|
9
|
+
# @api public
|
|
10
|
+
module TeamPlayerOnOffSummary
|
|
11
|
+
# Result set name for overall summary
|
|
12
|
+
# @return [String] the result set name
|
|
13
|
+
OVERALL = "OverallTeamPlayerOnOffSummary".freeze
|
|
14
|
+
# Result set name for players on court summary
|
|
15
|
+
# @return [String] the result set name
|
|
16
|
+
PLAYERS_ON = "PlayersOnCourtTeamPlayerOnOffSummary".freeze
|
|
17
|
+
# Result set name for players off court summary
|
|
18
|
+
# @return [String] the result set name
|
|
19
|
+
PLAYERS_OFF = "PlayersOffCourtTeamPlayerOnOffSummary".freeze
|
|
20
|
+
|
|
21
|
+
# Retrieves overall team on/off court summary statistics
|
|
22
|
+
#
|
|
23
|
+
# @api public
|
|
24
|
+
# @example stats = NBA::TeamPlayerOnOffSummary.overall(team: NBA::Team::GSW)
|
|
25
|
+
# @param team [Integer, Team] the team ID or Team object
|
|
26
|
+
# @param season [Integer] the season year
|
|
27
|
+
# @param season_type [String] the season type
|
|
28
|
+
# @param per_mode [String] the per mode
|
|
29
|
+
# @param client [Client] the API client to use
|
|
30
|
+
# @return [Collection] a collection of overall stats
|
|
31
|
+
def self.overall(team:, season: Utils.current_season, season_type: "Regular Season", per_mode: "PerGame", client: CLIENT)
|
|
32
|
+
fetch_stats(team, season, season_type, per_mode, OVERALL, client:)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Retrieves summary statistics when opponent players are on the court
|
|
36
|
+
#
|
|
37
|
+
# @api public
|
|
38
|
+
# @example stats = NBA::TeamPlayerOnOffSummary.players_on_court(team: NBA::Team::GSW)
|
|
39
|
+
# @param team [Integer, Team] the team ID or Team object
|
|
40
|
+
# @param season [Integer] the season year
|
|
41
|
+
# @param season_type [String] the season type
|
|
42
|
+
# @param per_mode [String] the per mode
|
|
43
|
+
# @param client [Client] the API client to use
|
|
44
|
+
# @return [Collection] a collection of player on court stats
|
|
45
|
+
def self.players_on_court(team:, season: Utils.current_season, season_type: "Regular Season", per_mode: "PerGame", client: CLIENT)
|
|
46
|
+
fetch_stats(team, season, season_type, per_mode, PLAYERS_ON, client:)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Retrieves summary statistics when opponent players are off the court
|
|
50
|
+
#
|
|
51
|
+
# @api public
|
|
52
|
+
# @example stats = NBA::TeamPlayerOnOffSummary.players_off_court(team: NBA::Team::GSW)
|
|
53
|
+
# @param team [Integer, Team] the team ID or Team object
|
|
54
|
+
# @param season [Integer] the season year
|
|
55
|
+
# @param season_type [String] the season type
|
|
56
|
+
# @param per_mode [String] the per mode
|
|
57
|
+
# @param client [Client] the API client to use
|
|
58
|
+
# @return [Collection] a collection of player off court stats
|
|
59
|
+
def self.players_off_court(team:, season: Utils.current_season, season_type: "Regular Season", per_mode: "PerGame", client: CLIENT)
|
|
60
|
+
fetch_stats(team, season, season_type, per_mode, PLAYERS_OFF, client:)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Fetches team player on/off summary from the API
|
|
64
|
+
#
|
|
65
|
+
# @api private
|
|
66
|
+
# @return [Collection] the collection of statistics
|
|
67
|
+
def self.fetch_stats(team, season, season_type, per_mode, result_set_name, client:)
|
|
68
|
+
parse_response(client.get(build_path(Utils.extract_id(team), season, season_type, per_mode)), result_set_name)
|
|
69
|
+
end
|
|
70
|
+
private_class_method :fetch_stats
|
|
71
|
+
|
|
72
|
+
# Builds the API request path with all parameters
|
|
73
|
+
#
|
|
74
|
+
# @api private
|
|
75
|
+
# @return [String] the API request path
|
|
76
|
+
def self.build_path(team_id, season, season_type, per_mode)
|
|
77
|
+
season_str = Utils.format_season(season)
|
|
78
|
+
"teamplayeronoffsummary?TeamID=#{team_id}&Season=#{season_str}&SeasonType=#{season_type}&PerMode=#{per_mode}&LeagueID=00"
|
|
79
|
+
end
|
|
80
|
+
private_class_method :build_path
|
|
81
|
+
|
|
82
|
+
# Parses the API response into stat objects
|
|
83
|
+
# @api private
|
|
84
|
+
# @return [Collection] collection of stat objects
|
|
85
|
+
def self.parse_response(response, result_set_name)
|
|
86
|
+
return Collection.new unless response
|
|
87
|
+
|
|
88
|
+
result_set = find_result_set(JSON.parse(response), result_set_name)
|
|
89
|
+
build_collection(result_set, result_set_name)
|
|
90
|
+
end
|
|
91
|
+
private_class_method :parse_response
|
|
92
|
+
|
|
93
|
+
# Finds a result set by name in the parsed response data
|
|
94
|
+
# @api private
|
|
95
|
+
# @return [Hash, nil] the matching result set or nil
|
|
96
|
+
def self.find_result_set(data, name)
|
|
97
|
+
data["resultSets"]&.find { |rs| rs["name"].eql?(name) }
|
|
98
|
+
end
|
|
99
|
+
private_class_method :find_result_set
|
|
100
|
+
|
|
101
|
+
# Builds a collection of stat objects from a result set
|
|
102
|
+
# @api private
|
|
103
|
+
# @return [Collection] collection of stat objects
|
|
104
|
+
def self.build_collection(result_set, result_set_name)
|
|
105
|
+
return Collection.new unless result_set
|
|
106
|
+
|
|
107
|
+
headers = result_set["headers"]
|
|
108
|
+
rows = result_set["rowSet"]
|
|
109
|
+
return Collection.new unless headers && rows
|
|
110
|
+
|
|
111
|
+
Collection.new(rows.map { |row| build_stat(headers.zip(row).to_h, result_set_name) })
|
|
112
|
+
end
|
|
113
|
+
private_class_method :build_collection
|
|
114
|
+
|
|
115
|
+
# Builds a stat object from row data
|
|
116
|
+
# @api private
|
|
117
|
+
# @return [TeamOnOffOverallStat, TeamOnOffPlayerSummary] the stat object
|
|
118
|
+
def self.build_stat(data, result_set_name)
|
|
119
|
+
attrs = result_set_name.eql?(OVERALL) ? overall_attrs(data) : player_attrs(data)
|
|
120
|
+
result_set_name.eql?(OVERALL) ? TeamOnOffOverallStat.new(**attrs) : TeamOnOffPlayerSummary.new(**attrs)
|
|
121
|
+
end
|
|
122
|
+
private_class_method :build_stat
|
|
123
|
+
|
|
124
|
+
# Extracts overall stat attributes from row data
|
|
125
|
+
# @api private
|
|
126
|
+
# @return [Hash] overall stat attributes
|
|
127
|
+
def self.overall_attrs(data)
|
|
128
|
+
{group_set: data["GROUP_SET"], group_value: data["GROUP_VALUE"], team_id: data["TEAM_ID"],
|
|
129
|
+
team_abbreviation: data["TEAM_ABBREVIATION"], team_name: data["TEAM_NAME"]}.merge(stat_attrs(data))
|
|
130
|
+
end
|
|
131
|
+
private_class_method :overall_attrs
|
|
132
|
+
|
|
133
|
+
# Extracts player stat attributes from row data
|
|
134
|
+
# @api private
|
|
135
|
+
# @return [Hash] player stat attributes
|
|
136
|
+
def self.player_attrs(data)
|
|
137
|
+
{group_set: data["GROUP_SET"], team_id: data["TEAM_ID"], team_abbreviation: data["TEAM_ABBREVIATION"],
|
|
138
|
+
team_name: data["TEAM_NAME"], vs_player_id: data["VS_PLAYER_ID"], vs_player_name: data["VS_PLAYER_NAME"],
|
|
139
|
+
court_status: data["COURT_STATUS"], gp: data["GP"], min: data["MIN"], plus_minus: data["PLUS_MINUS"],
|
|
140
|
+
off_rating: data["OFF_RATING"], def_rating: data["DEF_RATING"], net_rating: data["NET_RATING"]}
|
|
141
|
+
end
|
|
142
|
+
private_class_method :player_attrs
|
|
143
|
+
|
|
144
|
+
# Extracts common stat attributes from row data
|
|
145
|
+
# @api private
|
|
146
|
+
# @return [Hash] common stat attributes
|
|
147
|
+
def self.stat_attrs(data)
|
|
148
|
+
record_attrs(data).merge(shooting_attrs(data), counting_attrs(data), rank_attrs(data))
|
|
149
|
+
end
|
|
150
|
+
private_class_method :stat_attrs
|
|
151
|
+
|
|
152
|
+
# Extracts record attributes from row data
|
|
153
|
+
# @api private
|
|
154
|
+
# @return [Hash] record attributes
|
|
155
|
+
def self.record_attrs(data)
|
|
156
|
+
{gp: data["GP"], w: data["W"], l: data["L"], w_pct: data["W_PCT"], min: data["MIN"]}
|
|
157
|
+
end
|
|
158
|
+
private_class_method :record_attrs
|
|
159
|
+
|
|
160
|
+
# Extracts shooting stat attributes from row data
|
|
161
|
+
# @api private
|
|
162
|
+
# @return [Hash] shooting stat attributes
|
|
163
|
+
def self.shooting_attrs(data)
|
|
164
|
+
{fgm: data["FGM"], fga: data["FGA"], fg_pct: data["FG_PCT"], fg3m: data["FG3M"], fg3a: data["FG3A"],
|
|
165
|
+
fg3_pct: data["FG3_PCT"], ftm: data["FTM"], fta: data["FTA"], ft_pct: data["FT_PCT"]}
|
|
166
|
+
end
|
|
167
|
+
private_class_method :shooting_attrs
|
|
168
|
+
|
|
169
|
+
# Extracts counting stat attributes from row data
|
|
170
|
+
# @api private
|
|
171
|
+
# @return [Hash] counting stat attributes
|
|
172
|
+
def self.counting_attrs(data)
|
|
173
|
+
{oreb: data["OREB"], dreb: data["DREB"], reb: data["REB"], ast: data["AST"], tov: data["TOV"], stl: data["STL"],
|
|
174
|
+
blk: data["BLK"], blka: data["BLKA"], pf: data["PF"], pfd: data["PFD"], pts: data["PTS"], plus_minus: data["PLUS_MINUS"]}
|
|
175
|
+
end
|
|
176
|
+
private_class_method :counting_attrs
|
|
177
|
+
|
|
178
|
+
# Extracts rank attributes from row data
|
|
179
|
+
# @api private
|
|
180
|
+
# @return [Hash] rank attributes
|
|
181
|
+
def self.rank_attrs(data)
|
|
182
|
+
record_rank_attrs(data).merge(shooting_rank_attrs(data), counting_rank_attrs(data))
|
|
183
|
+
end
|
|
184
|
+
private_class_method :rank_attrs
|
|
185
|
+
|
|
186
|
+
# Extracts record rank attributes from row data
|
|
187
|
+
# @api private
|
|
188
|
+
# @return [Hash] record rank attributes
|
|
189
|
+
def self.record_rank_attrs(data)
|
|
190
|
+
{gp_rank: data["GP_RANK"], w_rank: data["W_RANK"], l_rank: data["L_RANK"], w_pct_rank: data["W_PCT_RANK"], min_rank: data["MIN_RANK"]}
|
|
191
|
+
end
|
|
192
|
+
private_class_method :record_rank_attrs
|
|
193
|
+
|
|
194
|
+
# Extracts shooting rank attributes from row data
|
|
195
|
+
# @api private
|
|
196
|
+
# @return [Hash] shooting rank attributes
|
|
197
|
+
def self.shooting_rank_attrs(data)
|
|
198
|
+
{fgm_rank: data["FGM_RANK"], fga_rank: data["FGA_RANK"], fg_pct_rank: data["FG_PCT_RANK"], fg3m_rank: data["FG3M_RANK"],
|
|
199
|
+
fg3a_rank: data["FG3A_RANK"], fg3_pct_rank: data["FG3_PCT_RANK"], ftm_rank: data["FTM_RANK"], fta_rank: data["FTA_RANK"],
|
|
200
|
+
ft_pct_rank: data["FT_PCT_RANK"]}
|
|
201
|
+
end
|
|
202
|
+
private_class_method :shooting_rank_attrs
|
|
203
|
+
|
|
204
|
+
# Extracts counting rank attributes from row data
|
|
205
|
+
# @api private
|
|
206
|
+
# @return [Hash] counting rank attributes
|
|
207
|
+
def self.counting_rank_attrs(data)
|
|
208
|
+
{oreb_rank: data["OREB_RANK"], dreb_rank: data["DREB_RANK"], reb_rank: data["REB_RANK"], ast_rank: data["AST_RANK"],
|
|
209
|
+
tov_rank: data["TOV_RANK"], stl_rank: data["STL_RANK"], blk_rank: data["BLK_RANK"], blka_rank: data["BLKA_RANK"],
|
|
210
|
+
pf_rank: data["PF_RANK"], pfd_rank: data["PFD_RANK"], pts_rank: data["PTS_RANK"], plus_minus_rank: data["PLUS_MINUS_RANK"]}
|
|
211
|
+
end
|
|
212
|
+
private_class_method :counting_rank_attrs
|
|
213
|
+
end
|
|
214
|
+
end
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
|
|
4
|
+
module NBA
|
|
5
|
+
# Represents a player's statistics for a specific team
|
|
6
|
+
class TeamPlayerStat < Shale::Mapper
|
|
7
|
+
include Equalizer.new(:player_id, :gp)
|
|
8
|
+
|
|
9
|
+
# @!attribute [rw] group_set
|
|
10
|
+
# Returns the group set name
|
|
11
|
+
# @api public
|
|
12
|
+
# @example
|
|
13
|
+
# stat.group_set #=> "PlayersSeasonTotals"
|
|
14
|
+
# @return [String, nil] the group set
|
|
15
|
+
attribute :group_set, Shale::Type::String
|
|
16
|
+
|
|
17
|
+
# @!attribute [rw] player_id
|
|
18
|
+
# Returns the player ID
|
|
19
|
+
# @api public
|
|
20
|
+
# @example
|
|
21
|
+
# stat.player_id #=> 201939
|
|
22
|
+
# @return [Integer, nil] the player ID
|
|
23
|
+
attribute :player_id, Shale::Type::Integer
|
|
24
|
+
|
|
25
|
+
# @!attribute [rw] player_name
|
|
26
|
+
# Returns the player name
|
|
27
|
+
# @api public
|
|
28
|
+
# @example
|
|
29
|
+
# stat.player_name #=> "Stephen Curry"
|
|
30
|
+
# @return [String, nil] the player name
|
|
31
|
+
attribute :player_name, Shale::Type::String
|
|
32
|
+
|
|
33
|
+
# @!attribute [rw] gp
|
|
34
|
+
# Returns games played
|
|
35
|
+
# @api public
|
|
36
|
+
# @example
|
|
37
|
+
# stat.gp #=> 74
|
|
38
|
+
# @return [Integer, nil] games played
|
|
39
|
+
attribute :gp, Shale::Type::Integer
|
|
40
|
+
|
|
41
|
+
# @!attribute [rw] w
|
|
42
|
+
# Returns wins
|
|
43
|
+
# @api public
|
|
44
|
+
# @example
|
|
45
|
+
# stat.w #=> 46
|
|
46
|
+
# @return [Integer, nil] wins
|
|
47
|
+
attribute :w, Shale::Type::Integer
|
|
48
|
+
|
|
49
|
+
# @!attribute [rw] l
|
|
50
|
+
# Returns losses
|
|
51
|
+
# @api public
|
|
52
|
+
# @example
|
|
53
|
+
# stat.l #=> 28
|
|
54
|
+
# @return [Integer, nil] losses
|
|
55
|
+
attribute :l, Shale::Type::Integer
|
|
56
|
+
|
|
57
|
+
# @!attribute [rw] w_pct
|
|
58
|
+
# Returns win percentage
|
|
59
|
+
# @api public
|
|
60
|
+
# @example
|
|
61
|
+
# stat.w_pct #=> 0.622
|
|
62
|
+
# @return [Float, nil] win percentage
|
|
63
|
+
attribute :w_pct, Shale::Type::Float
|
|
64
|
+
|
|
65
|
+
# @!attribute [rw] min
|
|
66
|
+
# Returns minutes per game
|
|
67
|
+
# @api public
|
|
68
|
+
# @example
|
|
69
|
+
# stat.min #=> 32.7
|
|
70
|
+
# @return [Float, nil] minutes
|
|
71
|
+
attribute :min, Shale::Type::Float
|
|
72
|
+
|
|
73
|
+
# @!attribute [rw] fgm
|
|
74
|
+
# Returns field goals made per game
|
|
75
|
+
# @api public
|
|
76
|
+
# @example
|
|
77
|
+
# stat.fgm #=> 10.0
|
|
78
|
+
# @return [Float, nil] field goals made
|
|
79
|
+
attribute :fgm, Shale::Type::Float
|
|
80
|
+
|
|
81
|
+
# @!attribute [rw] fga
|
|
82
|
+
# Returns field goals attempted per game
|
|
83
|
+
# @api public
|
|
84
|
+
# @example
|
|
85
|
+
# stat.fga #=> 19.6
|
|
86
|
+
# @return [Float, nil] field goals attempted
|
|
87
|
+
attribute :fga, Shale::Type::Float
|
|
88
|
+
|
|
89
|
+
# @!attribute [rw] fg_pct
|
|
90
|
+
# Returns field goal percentage
|
|
91
|
+
# @api public
|
|
92
|
+
# @example
|
|
93
|
+
# stat.fg_pct #=> 0.451
|
|
94
|
+
# @return [Float, nil] field goal percentage
|
|
95
|
+
attribute :fg_pct, Shale::Type::Float
|
|
96
|
+
|
|
97
|
+
# @!attribute [rw] fg3m
|
|
98
|
+
# Returns three-pointers made per game
|
|
99
|
+
# @api public
|
|
100
|
+
# @example
|
|
101
|
+
# stat.fg3m #=> 4.8
|
|
102
|
+
# @return [Float, nil] three-pointers made
|
|
103
|
+
attribute :fg3m, Shale::Type::Float
|
|
104
|
+
|
|
105
|
+
# @!attribute [rw] fg3a
|
|
106
|
+
# Returns three-pointers attempted per game
|
|
107
|
+
# @api public
|
|
108
|
+
# @example
|
|
109
|
+
# stat.fg3a #=> 11.7
|
|
110
|
+
# @return [Float, nil] three-pointers attempted
|
|
111
|
+
attribute :fg3a, Shale::Type::Float
|
|
112
|
+
|
|
113
|
+
# @!attribute [rw] fg3_pct
|
|
114
|
+
# Returns three-point percentage
|
|
115
|
+
# @api public
|
|
116
|
+
# @example
|
|
117
|
+
# stat.fg3_pct #=> 0.408
|
|
118
|
+
# @return [Float, nil] three-point percentage
|
|
119
|
+
attribute :fg3_pct, Shale::Type::Float
|
|
120
|
+
|
|
121
|
+
# @!attribute [rw] ftm
|
|
122
|
+
# Returns free throws made per game
|
|
123
|
+
# @api public
|
|
124
|
+
# @example
|
|
125
|
+
# stat.ftm #=> 4.8
|
|
126
|
+
# @return [Float, nil] free throws made
|
|
127
|
+
attribute :ftm, Shale::Type::Float
|
|
128
|
+
|
|
129
|
+
# @!attribute [rw] fta
|
|
130
|
+
# Returns free throws attempted per game
|
|
131
|
+
# @api public
|
|
132
|
+
# @example
|
|
133
|
+
# stat.fta #=> 5.1
|
|
134
|
+
# @return [Float, nil] free throws attempted
|
|
135
|
+
attribute :fta, Shale::Type::Float
|
|
136
|
+
|
|
137
|
+
# @!attribute [rw] ft_pct
|
|
138
|
+
# Returns free throw percentage
|
|
139
|
+
# @api public
|
|
140
|
+
# @example
|
|
141
|
+
# stat.ft_pct #=> 0.921
|
|
142
|
+
# @return [Float, nil] free throw percentage
|
|
143
|
+
attribute :ft_pct, Shale::Type::Float
|
|
144
|
+
|
|
145
|
+
# @!attribute [rw] oreb
|
|
146
|
+
# Returns offensive rebounds per game
|
|
147
|
+
# @api public
|
|
148
|
+
# @example
|
|
149
|
+
# stat.oreb #=> 0.7
|
|
150
|
+
# @return [Float, nil] offensive rebounds
|
|
151
|
+
attribute :oreb, Shale::Type::Float
|
|
152
|
+
|
|
153
|
+
# @!attribute [rw] dreb
|
|
154
|
+
# Returns defensive rebounds per game
|
|
155
|
+
# @api public
|
|
156
|
+
# @example
|
|
157
|
+
# stat.dreb #=> 4.5
|
|
158
|
+
# @return [Float, nil] defensive rebounds
|
|
159
|
+
attribute :dreb, Shale::Type::Float
|
|
160
|
+
|
|
161
|
+
# @!attribute [rw] reb
|
|
162
|
+
# Returns total rebounds per game
|
|
163
|
+
# @api public
|
|
164
|
+
# @example
|
|
165
|
+
# stat.reb #=> 5.1
|
|
166
|
+
# @return [Float, nil] total rebounds
|
|
167
|
+
attribute :reb, Shale::Type::Float
|
|
168
|
+
|
|
169
|
+
# @!attribute [rw] ast
|
|
170
|
+
# Returns assists per game
|
|
171
|
+
# @api public
|
|
172
|
+
# @example
|
|
173
|
+
# stat.ast #=> 5.1
|
|
174
|
+
# @return [Float, nil] assists
|
|
175
|
+
attribute :ast, Shale::Type::Float
|
|
176
|
+
|
|
177
|
+
# @!attribute [rw] tov
|
|
178
|
+
# Returns turnovers per game
|
|
179
|
+
# @api public
|
|
180
|
+
# @example
|
|
181
|
+
# stat.tov #=> 2.8
|
|
182
|
+
# @return [Float, nil] turnovers
|
|
183
|
+
attribute :tov, Shale::Type::Float
|
|
184
|
+
|
|
185
|
+
# @!attribute [rw] stl
|
|
186
|
+
# Returns steals per game
|
|
187
|
+
# @api public
|
|
188
|
+
# @example
|
|
189
|
+
# stat.stl #=> 0.7
|
|
190
|
+
# @return [Float, nil] steals
|
|
191
|
+
attribute :stl, Shale::Type::Float
|
|
192
|
+
|
|
193
|
+
# @!attribute [rw] blk
|
|
194
|
+
# Returns blocks per game
|
|
195
|
+
# @api public
|
|
196
|
+
# @example
|
|
197
|
+
# stat.blk #=> 0.4
|
|
198
|
+
# @return [Float, nil] blocks
|
|
199
|
+
attribute :blk, Shale::Type::Float
|
|
200
|
+
|
|
201
|
+
# @!attribute [rw] blka
|
|
202
|
+
# Returns blocked attempts per game
|
|
203
|
+
# @api public
|
|
204
|
+
# @example
|
|
205
|
+
# stat.blka #=> 0.3
|
|
206
|
+
# @return [Float, nil] blocked attempts
|
|
207
|
+
attribute :blka, Shale::Type::Float
|
|
208
|
+
|
|
209
|
+
# @!attribute [rw] pf
|
|
210
|
+
# Returns personal fouls per game
|
|
211
|
+
# @api public
|
|
212
|
+
# @example
|
|
213
|
+
# stat.pf #=> 1.6
|
|
214
|
+
# @return [Float, nil] personal fouls
|
|
215
|
+
attribute :pf, Shale::Type::Float
|
|
216
|
+
|
|
217
|
+
# @!attribute [rw] pfd
|
|
218
|
+
# Returns personal fouls drawn per game
|
|
219
|
+
# @api public
|
|
220
|
+
# @example
|
|
221
|
+
# stat.pfd #=> 1.9
|
|
222
|
+
# @return [Float, nil] personal fouls drawn
|
|
223
|
+
attribute :pfd, Shale::Type::Float
|
|
224
|
+
|
|
225
|
+
# @!attribute [rw] pts
|
|
226
|
+
# Returns points per game
|
|
227
|
+
# @api public
|
|
228
|
+
# @example
|
|
229
|
+
# stat.pts #=> 26.4
|
|
230
|
+
# @return [Float, nil] points
|
|
231
|
+
attribute :pts, Shale::Type::Float
|
|
232
|
+
|
|
233
|
+
# @!attribute [rw] plus_minus
|
|
234
|
+
# Returns plus/minus per game
|
|
235
|
+
# @api public
|
|
236
|
+
# @example
|
|
237
|
+
# stat.plus_minus #=> 7.8
|
|
238
|
+
# @return [Float, nil] plus/minus
|
|
239
|
+
attribute :plus_minus, Shale::Type::Float
|
|
240
|
+
|
|
241
|
+
# @!attribute [rw] nba_fantasy_pts
|
|
242
|
+
# Returns NBA fantasy points per game
|
|
243
|
+
# @api public
|
|
244
|
+
# @example
|
|
245
|
+
# stat.nba_fantasy_pts #=> 45.2
|
|
246
|
+
# @return [Float, nil] fantasy points
|
|
247
|
+
attribute :nba_fantasy_pts, Shale::Type::Float
|
|
248
|
+
|
|
249
|
+
# @!attribute [rw] dd2
|
|
250
|
+
# Returns double-double count
|
|
251
|
+
# @api public
|
|
252
|
+
# @example
|
|
253
|
+
# stat.dd2 #=> 10
|
|
254
|
+
# @return [Integer, nil] double-doubles
|
|
255
|
+
attribute :dd2, Shale::Type::Integer
|
|
256
|
+
|
|
257
|
+
# @!attribute [rw] td3
|
|
258
|
+
# Returns triple-double count
|
|
259
|
+
# @api public
|
|
260
|
+
# @example
|
|
261
|
+
# stat.td3 #=> 2
|
|
262
|
+
# @return [Integer, nil] triple-doubles
|
|
263
|
+
attribute :td3, Shale::Type::Integer
|
|
264
|
+
|
|
265
|
+
# Returns the player object
|
|
266
|
+
#
|
|
267
|
+
# @api public
|
|
268
|
+
# @example
|
|
269
|
+
# stat.player #=> #<NBA::Player>
|
|
270
|
+
# @return [Player, nil] the player object
|
|
271
|
+
def player
|
|
272
|
+
Players.find(player_id)
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
end
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
|
|
4
|
+
module NBA
|
|
5
|
+
# Represents team tracking rebound statistics
|
|
6
|
+
#
|
|
7
|
+
# @api public
|
|
8
|
+
class TeamReboundStat < Shale::Mapper
|
|
9
|
+
include Equalizer.new(:team_id, :g, :reb)
|
|
10
|
+
|
|
11
|
+
# @!attribute [rw] team_id
|
|
12
|
+
# Returns the team ID
|
|
13
|
+
# @api public
|
|
14
|
+
# @example
|
|
15
|
+
# stat.team_id #=> 1610612744
|
|
16
|
+
# @return [Integer, nil] the team's ID
|
|
17
|
+
attribute :team_id, Shale::Type::Integer
|
|
18
|
+
|
|
19
|
+
# @!attribute [rw] team_name
|
|
20
|
+
# Returns the team name
|
|
21
|
+
# @api public
|
|
22
|
+
# @example
|
|
23
|
+
# stat.team_name #=> "Golden State Warriors"
|
|
24
|
+
# @return [String, nil] the team's name
|
|
25
|
+
attribute :team_name, Shale::Type::String
|
|
26
|
+
|
|
27
|
+
# @!attribute [rw] sort_order
|
|
28
|
+
# Returns the sort order for the row
|
|
29
|
+
# @api public
|
|
30
|
+
# @example
|
|
31
|
+
# stat.sort_order #=> 1
|
|
32
|
+
# @return [Integer, nil] the sort order for the row
|
|
33
|
+
attribute :sort_order, Shale::Type::Integer
|
|
34
|
+
|
|
35
|
+
# @!attribute [rw] g
|
|
36
|
+
# Returns the number of games
|
|
37
|
+
# @api public
|
|
38
|
+
# @example
|
|
39
|
+
# stat.g #=> 74
|
|
40
|
+
# @return [Integer, nil] the number of games
|
|
41
|
+
attribute :g, Shale::Type::Integer
|
|
42
|
+
|
|
43
|
+
# @!attribute [rw] reb_num_contesting_range
|
|
44
|
+
# Returns the number of contesting players range
|
|
45
|
+
# @api public
|
|
46
|
+
# @example
|
|
47
|
+
# stat.reb_num_contesting_range #=> "0 Contests"
|
|
48
|
+
# @return [String, nil] the number of contesting players range
|
|
49
|
+
attribute :reb_num_contesting_range, Shale::Type::String
|
|
50
|
+
|
|
51
|
+
# @!attribute [rw] overall
|
|
52
|
+
# Returns the overall category
|
|
53
|
+
# @api public
|
|
54
|
+
# @example
|
|
55
|
+
# stat.overall #=> "Overall"
|
|
56
|
+
# @return [String, nil] the overall category
|
|
57
|
+
attribute :overall, Shale::Type::String
|
|
58
|
+
|
|
59
|
+
# @!attribute [rw] reb_dist_range
|
|
60
|
+
# Returns the rebound distance range
|
|
61
|
+
# @api public
|
|
62
|
+
# @example
|
|
63
|
+
# stat.reb_dist_range #=> "0-6 Feet"
|
|
64
|
+
# @return [String, nil] the rebound distance range
|
|
65
|
+
attribute :reb_dist_range, Shale::Type::String
|
|
66
|
+
|
|
67
|
+
# @!attribute [rw] shot_dist_range
|
|
68
|
+
# Returns the shot distance range
|
|
69
|
+
# @api public
|
|
70
|
+
# @example
|
|
71
|
+
# stat.shot_dist_range #=> "0-6 Feet"
|
|
72
|
+
# @return [String, nil] the shot distance range
|
|
73
|
+
attribute :shot_dist_range, Shale::Type::String
|
|
74
|
+
|
|
75
|
+
# @!attribute [rw] shot_type_range
|
|
76
|
+
# Returns the shot type range
|
|
77
|
+
# @api public
|
|
78
|
+
# @example
|
|
79
|
+
# stat.shot_type_range #=> "2PT FGs"
|
|
80
|
+
# @return [String, nil] the shot type range
|
|
81
|
+
attribute :shot_type_range, Shale::Type::String
|
|
82
|
+
|
|
83
|
+
# @!attribute [rw] reb_frequency
|
|
84
|
+
# Returns the rebound frequency
|
|
85
|
+
# @api public
|
|
86
|
+
# @example
|
|
87
|
+
# stat.reb_frequency #=> 0.25
|
|
88
|
+
# @return [Float, nil] the rebound frequency
|
|
89
|
+
attribute :reb_frequency, Shale::Type::Float
|
|
90
|
+
|
|
91
|
+
# @!attribute [rw] oreb
|
|
92
|
+
# Returns offensive rebounds per game
|
|
93
|
+
# @api public
|
|
94
|
+
# @example
|
|
95
|
+
# stat.oreb #=> 1.2
|
|
96
|
+
# @return [Float, nil] offensive rebounds per game
|
|
97
|
+
attribute :oreb, Shale::Type::Float
|
|
98
|
+
|
|
99
|
+
# @!attribute [rw] dreb
|
|
100
|
+
# Returns defensive rebounds per game
|
|
101
|
+
# @api public
|
|
102
|
+
# @example
|
|
103
|
+
# stat.dreb #=> 4.5
|
|
104
|
+
# @return [Float, nil] defensive rebounds per game
|
|
105
|
+
attribute :dreb, Shale::Type::Float
|
|
106
|
+
|
|
107
|
+
# @!attribute [rw] reb
|
|
108
|
+
# Returns total rebounds per game
|
|
109
|
+
# @api public
|
|
110
|
+
# @example
|
|
111
|
+
# stat.reb #=> 5.7
|
|
112
|
+
# @return [Float, nil] total rebounds per game
|
|
113
|
+
attribute :reb, Shale::Type::Float
|
|
114
|
+
|
|
115
|
+
# @!attribute [rw] c_oreb
|
|
116
|
+
# Returns contested offensive rebounds per game
|
|
117
|
+
# @api public
|
|
118
|
+
# @example
|
|
119
|
+
# stat.c_oreb #=> 0.8
|
|
120
|
+
# @return [Float, nil] contested offensive rebounds per game
|
|
121
|
+
attribute :c_oreb, Shale::Type::Float
|
|
122
|
+
|
|
123
|
+
# @!attribute [rw] c_dreb
|
|
124
|
+
# Returns contested defensive rebounds per game
|
|
125
|
+
# @api public
|
|
126
|
+
# @example
|
|
127
|
+
# stat.c_dreb #=> 2.1
|
|
128
|
+
# @return [Float, nil] contested defensive rebounds per game
|
|
129
|
+
attribute :c_dreb, Shale::Type::Float
|
|
130
|
+
|
|
131
|
+
# @!attribute [rw] c_reb
|
|
132
|
+
# Returns contested total rebounds per game
|
|
133
|
+
# @api public
|
|
134
|
+
# @example
|
|
135
|
+
# stat.c_reb #=> 2.9
|
|
136
|
+
# @return [Float, nil] contested total rebounds per game
|
|
137
|
+
attribute :c_reb, Shale::Type::Float
|
|
138
|
+
|
|
139
|
+
# @!attribute [rw] c_reb_pct
|
|
140
|
+
# Returns contested rebound percentage
|
|
141
|
+
# @api public
|
|
142
|
+
# @example
|
|
143
|
+
# stat.c_reb_pct #=> 0.509
|
|
144
|
+
# @return [Float, nil] contested rebound percentage
|
|
145
|
+
attribute :c_reb_pct, Shale::Type::Float
|
|
146
|
+
|
|
147
|
+
# @!attribute [rw] uc_oreb
|
|
148
|
+
# Returns uncontested offensive rebounds per game
|
|
149
|
+
# @api public
|
|
150
|
+
# @example
|
|
151
|
+
# stat.uc_oreb #=> 0.4
|
|
152
|
+
# @return [Float, nil] uncontested offensive rebounds per game
|
|
153
|
+
attribute :uc_oreb, Shale::Type::Float
|
|
154
|
+
|
|
155
|
+
# @!attribute [rw] uc_dreb
|
|
156
|
+
# Returns uncontested defensive rebounds per game
|
|
157
|
+
# @api public
|
|
158
|
+
# @example
|
|
159
|
+
# stat.uc_dreb #=> 2.4
|
|
160
|
+
# @return [Float, nil] uncontested defensive rebounds per game
|
|
161
|
+
attribute :uc_dreb, Shale::Type::Float
|
|
162
|
+
|
|
163
|
+
# @!attribute [rw] uc_reb
|
|
164
|
+
# Returns uncontested total rebounds per game
|
|
165
|
+
# @api public
|
|
166
|
+
# @example
|
|
167
|
+
# stat.uc_reb #=> 2.8
|
|
168
|
+
# @return [Float, nil] uncontested total rebounds per game
|
|
169
|
+
attribute :uc_reb, Shale::Type::Float
|
|
170
|
+
|
|
171
|
+
# @!attribute [rw] uc_reb_pct
|
|
172
|
+
# Returns uncontested rebound percentage
|
|
173
|
+
# @api public
|
|
174
|
+
# @example
|
|
175
|
+
# stat.uc_reb_pct #=> 0.491
|
|
176
|
+
# @return [Float, nil] uncontested rebound percentage
|
|
177
|
+
attribute :uc_reb_pct, Shale::Type::Float
|
|
178
|
+
|
|
179
|
+
# Returns the team associated with this stat
|
|
180
|
+
#
|
|
181
|
+
# @api public
|
|
182
|
+
# @example
|
|
183
|
+
# stat.team #=> #<NBA::Team ...>
|
|
184
|
+
# @return [Team, nil] the Team object
|
|
185
|
+
def team
|
|
186
|
+
Teams.find(team_id)
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|