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,273 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
|
|
4
|
+
module NBA
|
|
5
|
+
# Represents player tracking statistics for a player in a game
|
|
6
|
+
class BoxScorePlayerTrackStat < Shale::Mapper
|
|
7
|
+
include Equalizer.new(:game_id, :player_id)
|
|
8
|
+
|
|
9
|
+
# @!attribute [rw] game_id
|
|
10
|
+
# Returns the game ID
|
|
11
|
+
# @api public
|
|
12
|
+
# @example
|
|
13
|
+
# stat.game_id #=> "0022400001"
|
|
14
|
+
# @return [String] the game ID
|
|
15
|
+
attribute :game_id, Shale::Type::String
|
|
16
|
+
|
|
17
|
+
# @!attribute [rw] team_id
|
|
18
|
+
# Returns the team ID
|
|
19
|
+
# @api public
|
|
20
|
+
# @example
|
|
21
|
+
# stat.team_id #=> 1610612744
|
|
22
|
+
# @return [Integer] the team ID
|
|
23
|
+
attribute :team_id, Shale::Type::Integer
|
|
24
|
+
|
|
25
|
+
# @!attribute [rw] team_abbreviation
|
|
26
|
+
# Returns the team abbreviation
|
|
27
|
+
# @api public
|
|
28
|
+
# @example
|
|
29
|
+
# stat.team_abbreviation #=> "GSW"
|
|
30
|
+
# @return [String] the team abbreviation
|
|
31
|
+
attribute :team_abbreviation, Shale::Type::String
|
|
32
|
+
|
|
33
|
+
# @!attribute [rw] team_city
|
|
34
|
+
# Returns the team city
|
|
35
|
+
# @api public
|
|
36
|
+
# @example
|
|
37
|
+
# stat.team_city #=> "Golden State"
|
|
38
|
+
# @return [String] the team city
|
|
39
|
+
attribute :team_city, Shale::Type::String
|
|
40
|
+
|
|
41
|
+
# @!attribute [rw] player_id
|
|
42
|
+
# Returns the player ID
|
|
43
|
+
# @api public
|
|
44
|
+
# @example
|
|
45
|
+
# stat.player_id #=> 201939
|
|
46
|
+
# @return [Integer] the player ID
|
|
47
|
+
attribute :player_id, Shale::Type::Integer
|
|
48
|
+
|
|
49
|
+
# @!attribute [rw] player_name
|
|
50
|
+
# Returns the player name
|
|
51
|
+
# @api public
|
|
52
|
+
# @example
|
|
53
|
+
# stat.player_name #=> "Stephen Curry"
|
|
54
|
+
# @return [String] the player name
|
|
55
|
+
attribute :player_name, Shale::Type::String
|
|
56
|
+
|
|
57
|
+
# @!attribute [rw] start_position
|
|
58
|
+
# Returns the starting position
|
|
59
|
+
# @api public
|
|
60
|
+
# @example
|
|
61
|
+
# stat.start_position #=> "G"
|
|
62
|
+
# @return [String] the starting position
|
|
63
|
+
attribute :start_position, Shale::Type::String
|
|
64
|
+
|
|
65
|
+
# @!attribute [rw] comment
|
|
66
|
+
# Returns any comment about the player
|
|
67
|
+
# @api public
|
|
68
|
+
# @example
|
|
69
|
+
# stat.comment #=> "DNP - Rest"
|
|
70
|
+
# @return [String] the comment
|
|
71
|
+
attribute :comment, Shale::Type::String
|
|
72
|
+
|
|
73
|
+
# @!attribute [rw] min
|
|
74
|
+
# Returns minutes played
|
|
75
|
+
# @api public
|
|
76
|
+
# @example
|
|
77
|
+
# stat.min #=> "32:45"
|
|
78
|
+
# @return [String] the minutes
|
|
79
|
+
attribute :min, Shale::Type::String
|
|
80
|
+
|
|
81
|
+
# @!attribute [rw] speed
|
|
82
|
+
# Returns average speed in miles per hour
|
|
83
|
+
# @api public
|
|
84
|
+
# @example
|
|
85
|
+
# stat.speed #=> 4.52
|
|
86
|
+
# @return [Float] average speed
|
|
87
|
+
attribute :speed, Shale::Type::Float
|
|
88
|
+
|
|
89
|
+
# @!attribute [rw] distance
|
|
90
|
+
# Returns distance traveled in miles
|
|
91
|
+
# @api public
|
|
92
|
+
# @example
|
|
93
|
+
# stat.distance #=> 2.67
|
|
94
|
+
# @return [Float] distance traveled
|
|
95
|
+
attribute :distance, Shale::Type::Float
|
|
96
|
+
|
|
97
|
+
# @!attribute [rw] oreb_chances
|
|
98
|
+
# Returns offensive rebound chances
|
|
99
|
+
# @api public
|
|
100
|
+
# @example
|
|
101
|
+
# stat.oreb_chances #=> 5
|
|
102
|
+
# @return [Integer] offensive rebound chances
|
|
103
|
+
attribute :oreb_chances, Shale::Type::Integer
|
|
104
|
+
|
|
105
|
+
# @!attribute [rw] dreb_chances
|
|
106
|
+
# Returns defensive rebound chances
|
|
107
|
+
# @api public
|
|
108
|
+
# @example
|
|
109
|
+
# stat.dreb_chances #=> 12
|
|
110
|
+
# @return [Integer] defensive rebound chances
|
|
111
|
+
attribute :dreb_chances, Shale::Type::Integer
|
|
112
|
+
|
|
113
|
+
# @!attribute [rw] reb_chances
|
|
114
|
+
# Returns total rebound chances
|
|
115
|
+
# @api public
|
|
116
|
+
# @example
|
|
117
|
+
# stat.reb_chances #=> 17
|
|
118
|
+
# @return [Integer] total rebound chances
|
|
119
|
+
attribute :reb_chances, Shale::Type::Integer
|
|
120
|
+
|
|
121
|
+
# @!attribute [rw] touches
|
|
122
|
+
# Returns total touches
|
|
123
|
+
# @api public
|
|
124
|
+
# @example
|
|
125
|
+
# stat.touches #=> 65
|
|
126
|
+
# @return [Integer] total touches
|
|
127
|
+
attribute :touches, Shale::Type::Integer
|
|
128
|
+
|
|
129
|
+
# @!attribute [rw] secondary_ast
|
|
130
|
+
# Returns secondary assists
|
|
131
|
+
# @api public
|
|
132
|
+
# @example
|
|
133
|
+
# stat.secondary_ast #=> 2
|
|
134
|
+
# @return [Integer] secondary assists
|
|
135
|
+
attribute :secondary_ast, Shale::Type::Integer
|
|
136
|
+
|
|
137
|
+
# @!attribute [rw] ft_ast
|
|
138
|
+
# Returns free throw assists
|
|
139
|
+
# @api public
|
|
140
|
+
# @example
|
|
141
|
+
# stat.ft_ast #=> 1
|
|
142
|
+
# @return [Integer] free throw assists
|
|
143
|
+
attribute :ft_ast, Shale::Type::Integer
|
|
144
|
+
|
|
145
|
+
# @!attribute [rw] passes
|
|
146
|
+
# Returns total passes
|
|
147
|
+
# @api public
|
|
148
|
+
# @example
|
|
149
|
+
# stat.passes #=> 42
|
|
150
|
+
# @return [Integer] total passes
|
|
151
|
+
attribute :passes, Shale::Type::Integer
|
|
152
|
+
|
|
153
|
+
# @!attribute [rw] ast
|
|
154
|
+
# Returns assists
|
|
155
|
+
# @api public
|
|
156
|
+
# @example
|
|
157
|
+
# stat.ast #=> 8
|
|
158
|
+
# @return [Integer] assists
|
|
159
|
+
attribute :ast, Shale::Type::Integer
|
|
160
|
+
|
|
161
|
+
# @!attribute [rw] cfgm
|
|
162
|
+
# Returns contested field goals made
|
|
163
|
+
# @api public
|
|
164
|
+
# @example
|
|
165
|
+
# stat.cfgm #=> 3
|
|
166
|
+
# @return [Integer] contested field goals made
|
|
167
|
+
attribute :cfgm, Shale::Type::Integer
|
|
168
|
+
|
|
169
|
+
# @!attribute [rw] cfga
|
|
170
|
+
# Returns contested field goals attempted
|
|
171
|
+
# @api public
|
|
172
|
+
# @example
|
|
173
|
+
# stat.cfga #=> 8
|
|
174
|
+
# @return [Integer] contested field goals attempted
|
|
175
|
+
attribute :cfga, Shale::Type::Integer
|
|
176
|
+
|
|
177
|
+
# @!attribute [rw] cfg_pct
|
|
178
|
+
# Returns contested field goal percentage
|
|
179
|
+
# @api public
|
|
180
|
+
# @example
|
|
181
|
+
# stat.cfg_pct #=> 0.375
|
|
182
|
+
# @return [Float] contested field goal percentage
|
|
183
|
+
attribute :cfg_pct, Shale::Type::Float
|
|
184
|
+
|
|
185
|
+
# @!attribute [rw] ufgm
|
|
186
|
+
# Returns uncontested field goals made
|
|
187
|
+
# @api public
|
|
188
|
+
# @example
|
|
189
|
+
# stat.ufgm #=> 5
|
|
190
|
+
# @return [Integer] uncontested field goals made
|
|
191
|
+
attribute :ufgm, Shale::Type::Integer
|
|
192
|
+
|
|
193
|
+
# @!attribute [rw] ufga
|
|
194
|
+
# Returns uncontested field goals attempted
|
|
195
|
+
# @api public
|
|
196
|
+
# @example
|
|
197
|
+
# stat.ufga #=> 6
|
|
198
|
+
# @return [Integer] uncontested field goals attempted
|
|
199
|
+
attribute :ufga, Shale::Type::Integer
|
|
200
|
+
|
|
201
|
+
# @!attribute [rw] ufg_pct
|
|
202
|
+
# Returns uncontested field goal percentage
|
|
203
|
+
# @api public
|
|
204
|
+
# @example
|
|
205
|
+
# stat.ufg_pct #=> 0.833
|
|
206
|
+
# @return [Float] uncontested field goal percentage
|
|
207
|
+
attribute :ufg_pct, Shale::Type::Float
|
|
208
|
+
|
|
209
|
+
# @!attribute [rw] dfgm
|
|
210
|
+
# Returns defended field goals made
|
|
211
|
+
# @api public
|
|
212
|
+
# @example
|
|
213
|
+
# stat.dfgm #=> 4
|
|
214
|
+
# @return [Integer] defended field goals made
|
|
215
|
+
attribute :dfgm, Shale::Type::Integer
|
|
216
|
+
|
|
217
|
+
# @!attribute [rw] dfga
|
|
218
|
+
# Returns defended field goals attempted
|
|
219
|
+
# @api public
|
|
220
|
+
# @example
|
|
221
|
+
# stat.dfga #=> 10
|
|
222
|
+
# @return [Integer] defended field goals attempted
|
|
223
|
+
attribute :dfga, Shale::Type::Integer
|
|
224
|
+
|
|
225
|
+
# @!attribute [rw] dfg_pct
|
|
226
|
+
# Returns defended field goal percentage
|
|
227
|
+
# @api public
|
|
228
|
+
# @example
|
|
229
|
+
# stat.dfg_pct #=> 0.400
|
|
230
|
+
# @return [Float] defended field goal percentage
|
|
231
|
+
attribute :dfg_pct, Shale::Type::Float
|
|
232
|
+
|
|
233
|
+
# Returns the player object
|
|
234
|
+
#
|
|
235
|
+
# @api public
|
|
236
|
+
# @example
|
|
237
|
+
# stat.player #=> #<NBA::Player>
|
|
238
|
+
# @return [Player, nil] the player object
|
|
239
|
+
def player
|
|
240
|
+
Players.find(player_id)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Returns the team object
|
|
244
|
+
#
|
|
245
|
+
# @api public
|
|
246
|
+
# @example
|
|
247
|
+
# stat.team #=> #<NBA::Team>
|
|
248
|
+
# @return [Team, nil] the team object
|
|
249
|
+
def team
|
|
250
|
+
Teams.find(team_id)
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# Returns the game object
|
|
254
|
+
#
|
|
255
|
+
# @api public
|
|
256
|
+
# @example
|
|
257
|
+
# stat.game #=> #<NBA::Game>
|
|
258
|
+
# @return [Game, nil] the game object
|
|
259
|
+
def game
|
|
260
|
+
Games.find(game_id)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# Returns whether the player started
|
|
264
|
+
#
|
|
265
|
+
# @api public
|
|
266
|
+
# @example
|
|
267
|
+
# stat.starter? #=> true
|
|
268
|
+
# @return [Boolean] true if starter
|
|
269
|
+
def starter?
|
|
270
|
+
!start_position.nil? && !start_position.empty?
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
|
|
4
|
+
module NBA
|
|
5
|
+
# Represents player tracking statistics for a team in a game
|
|
6
|
+
class BoxScorePlayerTrackTeamStat < Shale::Mapper
|
|
7
|
+
include Equalizer.new(:game_id, :team_id)
|
|
8
|
+
|
|
9
|
+
# @!attribute [rw] game_id
|
|
10
|
+
# Returns the game ID
|
|
11
|
+
# @api public
|
|
12
|
+
# @example
|
|
13
|
+
# stat.game_id #=> "0022400001"
|
|
14
|
+
# @return [String] the game ID
|
|
15
|
+
attribute :game_id, Shale::Type::String
|
|
16
|
+
|
|
17
|
+
# @!attribute [rw] team_id
|
|
18
|
+
# Returns the team ID
|
|
19
|
+
# @api public
|
|
20
|
+
# @example
|
|
21
|
+
# stat.team_id #=> 1610612744
|
|
22
|
+
# @return [Integer] the team ID
|
|
23
|
+
attribute :team_id, Shale::Type::Integer
|
|
24
|
+
|
|
25
|
+
# @!attribute [rw] team_name
|
|
26
|
+
# Returns the team name
|
|
27
|
+
# @api public
|
|
28
|
+
# @example
|
|
29
|
+
# stat.team_name #=> "Warriors"
|
|
30
|
+
# @return [String] the team name
|
|
31
|
+
attribute :team_name, Shale::Type::String
|
|
32
|
+
|
|
33
|
+
# @!attribute [rw] team_abbreviation
|
|
34
|
+
# Returns the team abbreviation
|
|
35
|
+
# @api public
|
|
36
|
+
# @example
|
|
37
|
+
# stat.team_abbreviation #=> "GSW"
|
|
38
|
+
# @return [String] the team abbreviation
|
|
39
|
+
attribute :team_abbreviation, Shale::Type::String
|
|
40
|
+
|
|
41
|
+
# @!attribute [rw] team_city
|
|
42
|
+
# Returns the team city
|
|
43
|
+
# @api public
|
|
44
|
+
# @example
|
|
45
|
+
# stat.team_city #=> "Golden State"
|
|
46
|
+
# @return [String] the team city
|
|
47
|
+
attribute :team_city, Shale::Type::String
|
|
48
|
+
|
|
49
|
+
# @!attribute [rw] min
|
|
50
|
+
# Returns minutes played
|
|
51
|
+
# @api public
|
|
52
|
+
# @example
|
|
53
|
+
# stat.min #=> "240:00"
|
|
54
|
+
# @return [String] the minutes
|
|
55
|
+
attribute :min, Shale::Type::String
|
|
56
|
+
|
|
57
|
+
# @!attribute [rw] speed
|
|
58
|
+
# Returns team average speed in miles per hour
|
|
59
|
+
# @api public
|
|
60
|
+
# @example
|
|
61
|
+
# stat.speed #=> 4.38
|
|
62
|
+
# @return [Float] average speed
|
|
63
|
+
attribute :speed, Shale::Type::Float
|
|
64
|
+
|
|
65
|
+
# @!attribute [rw] distance
|
|
66
|
+
# Returns total team distance traveled in miles
|
|
67
|
+
# @api public
|
|
68
|
+
# @example
|
|
69
|
+
# stat.distance #=> 24.5
|
|
70
|
+
# @return [Float] distance traveled
|
|
71
|
+
attribute :distance, Shale::Type::Float
|
|
72
|
+
|
|
73
|
+
# @!attribute [rw] oreb_chances
|
|
74
|
+
# Returns offensive rebound chances
|
|
75
|
+
# @api public
|
|
76
|
+
# @example
|
|
77
|
+
# stat.oreb_chances #=> 35
|
|
78
|
+
# @return [Integer] offensive rebound chances
|
|
79
|
+
attribute :oreb_chances, Shale::Type::Integer
|
|
80
|
+
|
|
81
|
+
# @!attribute [rw] dreb_chances
|
|
82
|
+
# Returns defensive rebound chances
|
|
83
|
+
# @api public
|
|
84
|
+
# @example
|
|
85
|
+
# stat.dreb_chances #=> 45
|
|
86
|
+
# @return [Integer] defensive rebound chances
|
|
87
|
+
attribute :dreb_chances, Shale::Type::Integer
|
|
88
|
+
|
|
89
|
+
# @!attribute [rw] reb_chances
|
|
90
|
+
# Returns total rebound chances
|
|
91
|
+
# @api public
|
|
92
|
+
# @example
|
|
93
|
+
# stat.reb_chances #=> 80
|
|
94
|
+
# @return [Integer] total rebound chances
|
|
95
|
+
attribute :reb_chances, Shale::Type::Integer
|
|
96
|
+
|
|
97
|
+
# @!attribute [rw] touches
|
|
98
|
+
# Returns total touches
|
|
99
|
+
# @api public
|
|
100
|
+
# @example
|
|
101
|
+
# stat.touches #=> 350
|
|
102
|
+
# @return [Integer] total touches
|
|
103
|
+
attribute :touches, Shale::Type::Integer
|
|
104
|
+
|
|
105
|
+
# @!attribute [rw] secondary_ast
|
|
106
|
+
# Returns secondary assists
|
|
107
|
+
# @api public
|
|
108
|
+
# @example
|
|
109
|
+
# stat.secondary_ast #=> 12
|
|
110
|
+
# @return [Integer] secondary assists
|
|
111
|
+
attribute :secondary_ast, Shale::Type::Integer
|
|
112
|
+
|
|
113
|
+
# @!attribute [rw] ft_ast
|
|
114
|
+
# Returns free throw assists
|
|
115
|
+
# @api public
|
|
116
|
+
# @example
|
|
117
|
+
# stat.ft_ast #=> 5
|
|
118
|
+
# @return [Integer] free throw assists
|
|
119
|
+
attribute :ft_ast, Shale::Type::Integer
|
|
120
|
+
|
|
121
|
+
# @!attribute [rw] passes
|
|
122
|
+
# Returns total passes
|
|
123
|
+
# @api public
|
|
124
|
+
# @example
|
|
125
|
+
# stat.passes #=> 285
|
|
126
|
+
# @return [Integer] total passes
|
|
127
|
+
attribute :passes, Shale::Type::Integer
|
|
128
|
+
|
|
129
|
+
# @!attribute [rw] ast
|
|
130
|
+
# Returns assists
|
|
131
|
+
# @api public
|
|
132
|
+
# @example
|
|
133
|
+
# stat.ast #=> 28
|
|
134
|
+
# @return [Integer] assists
|
|
135
|
+
attribute :ast, Shale::Type::Integer
|
|
136
|
+
|
|
137
|
+
# @!attribute [rw] cfgm
|
|
138
|
+
# Returns contested field goals made
|
|
139
|
+
# @api public
|
|
140
|
+
# @example
|
|
141
|
+
# stat.cfgm #=> 18
|
|
142
|
+
# @return [Integer] contested field goals made
|
|
143
|
+
attribute :cfgm, Shale::Type::Integer
|
|
144
|
+
|
|
145
|
+
# @!attribute [rw] cfga
|
|
146
|
+
# Returns contested field goals attempted
|
|
147
|
+
# @api public
|
|
148
|
+
# @example
|
|
149
|
+
# stat.cfga #=> 45
|
|
150
|
+
# @return [Integer] contested field goals attempted
|
|
151
|
+
attribute :cfga, Shale::Type::Integer
|
|
152
|
+
|
|
153
|
+
# @!attribute [rw] cfg_pct
|
|
154
|
+
# Returns contested field goal percentage
|
|
155
|
+
# @api public
|
|
156
|
+
# @example
|
|
157
|
+
# stat.cfg_pct #=> 0.400
|
|
158
|
+
# @return [Float] contested field goal percentage
|
|
159
|
+
attribute :cfg_pct, Shale::Type::Float
|
|
160
|
+
|
|
161
|
+
# @!attribute [rw] ufgm
|
|
162
|
+
# Returns uncontested field goals made
|
|
163
|
+
# @api public
|
|
164
|
+
# @example
|
|
165
|
+
# stat.ufgm #=> 24
|
|
166
|
+
# @return [Integer] uncontested field goals made
|
|
167
|
+
attribute :ufgm, Shale::Type::Integer
|
|
168
|
+
|
|
169
|
+
# @!attribute [rw] ufga
|
|
170
|
+
# Returns uncontested field goals attempted
|
|
171
|
+
# @api public
|
|
172
|
+
# @example
|
|
173
|
+
# stat.ufga #=> 35
|
|
174
|
+
# @return [Integer] uncontested field goals attempted
|
|
175
|
+
attribute :ufga, Shale::Type::Integer
|
|
176
|
+
|
|
177
|
+
# @!attribute [rw] ufg_pct
|
|
178
|
+
# Returns uncontested field goal percentage
|
|
179
|
+
# @api public
|
|
180
|
+
# @example
|
|
181
|
+
# stat.ufg_pct #=> 0.686
|
|
182
|
+
# @return [Float] uncontested field goal percentage
|
|
183
|
+
attribute :ufg_pct, Shale::Type::Float
|
|
184
|
+
|
|
185
|
+
# @!attribute [rw] dfgm
|
|
186
|
+
# Returns defended field goals made
|
|
187
|
+
# @api public
|
|
188
|
+
# @example
|
|
189
|
+
# stat.dfgm #=> 25
|
|
190
|
+
# @return [Integer] defended field goals made
|
|
191
|
+
attribute :dfgm, Shale::Type::Integer
|
|
192
|
+
|
|
193
|
+
# @!attribute [rw] dfga
|
|
194
|
+
# Returns defended field goals attempted
|
|
195
|
+
# @api public
|
|
196
|
+
# @example
|
|
197
|
+
# stat.dfga #=> 55
|
|
198
|
+
# @return [Integer] defended field goals attempted
|
|
199
|
+
attribute :dfga, Shale::Type::Integer
|
|
200
|
+
|
|
201
|
+
# @!attribute [rw] dfg_pct
|
|
202
|
+
# Returns defended field goal percentage
|
|
203
|
+
# @api public
|
|
204
|
+
# @example
|
|
205
|
+
# stat.dfg_pct #=> 0.455
|
|
206
|
+
# @return [Float] defended field goal percentage
|
|
207
|
+
attribute :dfg_pct, Shale::Type::Float
|
|
208
|
+
|
|
209
|
+
# Returns the team object
|
|
210
|
+
#
|
|
211
|
+
# @api public
|
|
212
|
+
# @example
|
|
213
|
+
# stat.team #=> #<NBA::Team>
|
|
214
|
+
# @return [Team, nil] the team object
|
|
215
|
+
def team
|
|
216
|
+
Teams.find(team_id)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Returns the game object
|
|
220
|
+
#
|
|
221
|
+
# @api public
|
|
222
|
+
# @example
|
|
223
|
+
# stat.game #=> #<NBA::Game>
|
|
224
|
+
# @return [Game, nil] the game object
|
|
225
|
+
def game
|
|
226
|
+
Games.find(game_id)
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
require_relative "client"
|
|
2
|
+
require_relative "response_parser"
|
|
3
|
+
require_relative "box_score_scoring_player_stat"
|
|
4
|
+
require_relative "box_score_scoring_team_stat"
|
|
5
|
+
require_relative "utils"
|
|
6
|
+
|
|
7
|
+
module NBA
|
|
8
|
+
# Provides methods to retrieve scoring box score statistics
|
|
9
|
+
module BoxScoreScoring
|
|
10
|
+
# Result set name for player stats
|
|
11
|
+
# @return [String] the result set name
|
|
12
|
+
PLAYER_STATS = "PlayerStats".freeze
|
|
13
|
+
|
|
14
|
+
# Result set name for team stats
|
|
15
|
+
# @return [String] the result set name
|
|
16
|
+
TEAM_STATS = "TeamStats".freeze
|
|
17
|
+
|
|
18
|
+
# Retrieves player scoring box score stats for a game
|
|
19
|
+
#
|
|
20
|
+
# @api public
|
|
21
|
+
# @example
|
|
22
|
+
# stats = NBA::BoxScoreScoring.player_stats(game: "0022400001")
|
|
23
|
+
# stats.each { |s| puts "#{s.player_name}: #{s.pct_pts_3pt}% from 3PT" }
|
|
24
|
+
# @param game [String, Game] the game ID or Game object
|
|
25
|
+
# @param client [Client] the API client to use
|
|
26
|
+
# @return [Collection] a collection of player scoring box score stats
|
|
27
|
+
def self.player_stats(game:, client: CLIENT)
|
|
28
|
+
path = "boxscorescoringv2?GameID=#{Utils.extract_id(game)}"
|
|
29
|
+
ResponseParser.parse(client.get(path), result_set: PLAYER_STATS) { |data| build_player_stat(data) }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Retrieves team scoring box score stats for a game
|
|
33
|
+
#
|
|
34
|
+
# @api public
|
|
35
|
+
# @example
|
|
36
|
+
# stats = NBA::BoxScoreScoring.team_stats(game: "0022400001")
|
|
37
|
+
# stats.each { |s| puts "#{s.team_name}: #{s.pct_pts_paint}% in paint" }
|
|
38
|
+
# @param game [String, Game] the game ID or Game object
|
|
39
|
+
# @param client [Client] the API client to use
|
|
40
|
+
# @return [Collection] a collection of team scoring box score stats
|
|
41
|
+
def self.team_stats(game:, client: CLIENT)
|
|
42
|
+
path = "boxscorescoringv2?GameID=#{Utils.extract_id(game)}"
|
|
43
|
+
ResponseParser.parse(client.get(path), result_set: TEAM_STATS) { |data| build_team_stat(data) }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Builds a player scoring stat from API data
|
|
47
|
+
# @api private
|
|
48
|
+
# @return [BoxScoreScoringPlayerStat]
|
|
49
|
+
def self.build_player_stat(data)
|
|
50
|
+
BoxScoreScoringPlayerStat.new(**player_identity(data), **shot_distribution(data), **assist_stats(data))
|
|
51
|
+
end
|
|
52
|
+
private_class_method :build_player_stat
|
|
53
|
+
|
|
54
|
+
# Builds a team scoring stat from API data
|
|
55
|
+
# @api private
|
|
56
|
+
# @return [BoxScoreScoringTeamStat]
|
|
57
|
+
def self.build_team_stat(data)
|
|
58
|
+
BoxScoreScoringTeamStat.new(**team_identity(data), **shot_distribution(data), **assist_stats(data))
|
|
59
|
+
end
|
|
60
|
+
private_class_method :build_team_stat
|
|
61
|
+
|
|
62
|
+
# Extracts player identity attributes from data
|
|
63
|
+
# @api private
|
|
64
|
+
# @return [Hash]
|
|
65
|
+
def self.player_identity(data)
|
|
66
|
+
{game_id: data["GAME_ID"], team_id: data["TEAM_ID"], team_abbreviation: data["TEAM_ABBREVIATION"],
|
|
67
|
+
team_city: data["TEAM_CITY"], player_id: data["PLAYER_ID"], player_name: data["PLAYER_NAME"],
|
|
68
|
+
start_position: data["START_POSITION"], comment: data["COMMENT"], min: data["MIN"]}
|
|
69
|
+
end
|
|
70
|
+
private_class_method :player_identity
|
|
71
|
+
|
|
72
|
+
# Extracts team identity attributes from data
|
|
73
|
+
# @api private
|
|
74
|
+
# @return [Hash]
|
|
75
|
+
def self.team_identity(data)
|
|
76
|
+
{game_id: data["GAME_ID"], team_id: data["TEAM_ID"], team_name: data["TEAM_NAME"],
|
|
77
|
+
team_abbreviation: data["TEAM_ABBREVIATION"], team_city: data["TEAM_CITY"], min: data["MIN"]}
|
|
78
|
+
end
|
|
79
|
+
private_class_method :team_identity
|
|
80
|
+
|
|
81
|
+
# Extracts shot distribution statistics from data
|
|
82
|
+
# @api private
|
|
83
|
+
# @return [Hash]
|
|
84
|
+
def self.shot_distribution(data)
|
|
85
|
+
{pct_fga_2pt: data["PCT_FGA_2PT"], pct_fga_3pt: data["PCT_FGA_3PT"],
|
|
86
|
+
pct_pts_2pt: data["PCT_PTS_2PT"], pct_pts_2pt_mr: data["PCT_PTS_2PT_MR"],
|
|
87
|
+
pct_pts_3pt: data["PCT_PTS_3PT"], pct_pts_fb: data["PCT_PTS_FB"],
|
|
88
|
+
pct_pts_ft: data["PCT_PTS_FT"], pct_pts_off_tov: data["PCT_PTS_OFF_TOV"],
|
|
89
|
+
pct_pts_paint: data["PCT_PTS_PAINT"]}
|
|
90
|
+
end
|
|
91
|
+
private_class_method :shot_distribution
|
|
92
|
+
|
|
93
|
+
# Extracts assist statistics from data
|
|
94
|
+
# @api private
|
|
95
|
+
# @return [Hash]
|
|
96
|
+
def self.assist_stats(data)
|
|
97
|
+
{pct_ast_2pm: data["PCT_AST_2PM"], pct_uast_2pm: data["PCT_UAST_2PM"],
|
|
98
|
+
pct_ast_3pm: data["PCT_AST_3PM"], pct_uast_3pm: data["PCT_UAST_3PM"],
|
|
99
|
+
pct_ast_fgm: data["PCT_AST_FGM"], pct_uast_fgm: data["PCT_UAST_FGM"]}
|
|
100
|
+
end
|
|
101
|
+
private_class_method :assist_stats
|
|
102
|
+
end
|
|
103
|
+
end
|