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,206 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
require_relative "players"
|
|
4
|
+
require_relative "teams"
|
|
5
|
+
|
|
6
|
+
module NBA
|
|
7
|
+
# Represents an assist tracker entry (pass to score)
|
|
8
|
+
class AssistTrackerEntry < Shale::Mapper
|
|
9
|
+
include Equalizer.new(:player_id, :pass_to)
|
|
10
|
+
|
|
11
|
+
# @!attribute [rw] player_id
|
|
12
|
+
# Returns the passer's player ID
|
|
13
|
+
# @api public
|
|
14
|
+
# @example
|
|
15
|
+
# entry.player_id #=> 201566
|
|
16
|
+
# @return [Integer] the passer's player ID
|
|
17
|
+
attribute :player_id, Shale::Type::Integer
|
|
18
|
+
|
|
19
|
+
# @!attribute [rw] player_name
|
|
20
|
+
# Returns the passer's name
|
|
21
|
+
# @api public
|
|
22
|
+
# @example
|
|
23
|
+
# entry.player_name #=> "Russell Westbrook"
|
|
24
|
+
# @return [String] the passer's name
|
|
25
|
+
attribute :player_name, Shale::Type::String
|
|
26
|
+
|
|
27
|
+
# @!attribute [rw] team_id
|
|
28
|
+
# Returns the team ID
|
|
29
|
+
# @api public
|
|
30
|
+
# @example
|
|
31
|
+
# entry.team_id #=> 1610612746
|
|
32
|
+
# @return [Integer] the team ID
|
|
33
|
+
attribute :team_id, Shale::Type::Integer
|
|
34
|
+
|
|
35
|
+
# @!attribute [rw] team_abbreviation
|
|
36
|
+
# Returns the team abbreviation
|
|
37
|
+
# @api public
|
|
38
|
+
# @example
|
|
39
|
+
# entry.team_abbreviation #=> "LAC"
|
|
40
|
+
# @return [String] the team abbreviation
|
|
41
|
+
attribute :team_abbreviation, Shale::Type::String
|
|
42
|
+
|
|
43
|
+
# @!attribute [rw] pass_to
|
|
44
|
+
# Returns the name of the player receiving the pass
|
|
45
|
+
# @api public
|
|
46
|
+
# @example
|
|
47
|
+
# entry.pass_to #=> "Kawhi Leonard"
|
|
48
|
+
# @return [String] the receiver's name
|
|
49
|
+
attribute :pass_to, Shale::Type::String
|
|
50
|
+
|
|
51
|
+
# @!attribute [rw] pass_to_player_id
|
|
52
|
+
# Returns the ID of the player receiving the pass
|
|
53
|
+
# @api public
|
|
54
|
+
# @example
|
|
55
|
+
# entry.pass_to_player_id #=> 202695
|
|
56
|
+
# @return [Integer] the receiver's player ID
|
|
57
|
+
attribute :pass_to_player_id, Shale::Type::Integer
|
|
58
|
+
|
|
59
|
+
# @!attribute [rw] frequency
|
|
60
|
+
# Returns the frequency of this pass combination
|
|
61
|
+
# @api public
|
|
62
|
+
# @example
|
|
63
|
+
# entry.frequency #=> 0.123
|
|
64
|
+
# @return [Float] the frequency
|
|
65
|
+
attribute :frequency, Shale::Type::Float
|
|
66
|
+
|
|
67
|
+
# @!attribute [rw] pass
|
|
68
|
+
# Returns the number of passes
|
|
69
|
+
# @api public
|
|
70
|
+
# @example
|
|
71
|
+
# entry.pass #=> 45
|
|
72
|
+
# @return [Integer] the number of passes
|
|
73
|
+
attribute :pass, Shale::Type::Integer
|
|
74
|
+
|
|
75
|
+
# @!attribute [rw] ast
|
|
76
|
+
# Returns the number of assists
|
|
77
|
+
# @api public
|
|
78
|
+
# @example
|
|
79
|
+
# entry.ast #=> 32
|
|
80
|
+
# @return [Integer] the number of assists
|
|
81
|
+
attribute :ast, Shale::Type::Integer
|
|
82
|
+
|
|
83
|
+
# @!attribute [rw] fg_m
|
|
84
|
+
# Returns the field goals made
|
|
85
|
+
# @api public
|
|
86
|
+
# @example
|
|
87
|
+
# entry.fg_m #=> 28
|
|
88
|
+
# @return [Integer] the field goals made
|
|
89
|
+
attribute :fg_m, Shale::Type::Integer
|
|
90
|
+
|
|
91
|
+
# @!attribute [rw] fg_a
|
|
92
|
+
# Returns the field goal attempts
|
|
93
|
+
# @api public
|
|
94
|
+
# @example
|
|
95
|
+
# entry.fg_a #=> 45
|
|
96
|
+
# @return [Integer] the field goal attempts
|
|
97
|
+
attribute :fg_a, Shale::Type::Integer
|
|
98
|
+
|
|
99
|
+
# @!attribute [rw] fg_pct
|
|
100
|
+
# Returns the field goal percentage
|
|
101
|
+
# @api public
|
|
102
|
+
# @example
|
|
103
|
+
# entry.fg_pct #=> 0.622
|
|
104
|
+
# @return [Float] the field goal percentage
|
|
105
|
+
attribute :fg_pct, Shale::Type::Float
|
|
106
|
+
|
|
107
|
+
# @!attribute [rw] fg2m
|
|
108
|
+
# Returns the 2-point field goals made
|
|
109
|
+
# @api public
|
|
110
|
+
# @example
|
|
111
|
+
# entry.fg2m #=> 20
|
|
112
|
+
# @return [Integer] the 2-point field goals made
|
|
113
|
+
attribute :fg2m, Shale::Type::Integer
|
|
114
|
+
|
|
115
|
+
# @!attribute [rw] fg2a
|
|
116
|
+
# Returns the 2-point field goal attempts
|
|
117
|
+
# @api public
|
|
118
|
+
# @example
|
|
119
|
+
# entry.fg2a #=> 30
|
|
120
|
+
# @return [Integer] the 2-point field goal attempts
|
|
121
|
+
attribute :fg2a, Shale::Type::Integer
|
|
122
|
+
|
|
123
|
+
# @!attribute [rw] fg2_pct
|
|
124
|
+
# Returns the 2-point field goal percentage
|
|
125
|
+
# @api public
|
|
126
|
+
# @example
|
|
127
|
+
# entry.fg2_pct #=> 0.667
|
|
128
|
+
# @return [Float] the 2-point field goal percentage
|
|
129
|
+
attribute :fg2_pct, Shale::Type::Float
|
|
130
|
+
|
|
131
|
+
# @!attribute [rw] fg3m
|
|
132
|
+
# Returns the 3-point field goals made
|
|
133
|
+
# @api public
|
|
134
|
+
# @example
|
|
135
|
+
# entry.fg3m #=> 8
|
|
136
|
+
# @return [Integer] the 3-point field goals made
|
|
137
|
+
attribute :fg3m, Shale::Type::Integer
|
|
138
|
+
|
|
139
|
+
# @!attribute [rw] fg3a
|
|
140
|
+
# Returns the 3-point field goal attempts
|
|
141
|
+
# @api public
|
|
142
|
+
# @example
|
|
143
|
+
# entry.fg3a #=> 15
|
|
144
|
+
# @return [Integer] the 3-point field goal attempts
|
|
145
|
+
attribute :fg3a, Shale::Type::Integer
|
|
146
|
+
|
|
147
|
+
# @!attribute [rw] fg3_pct
|
|
148
|
+
# Returns the 3-point field goal percentage
|
|
149
|
+
# @api public
|
|
150
|
+
# @example
|
|
151
|
+
# entry.fg3_pct #=> 0.533
|
|
152
|
+
# @return [Float] the 3-point field goal percentage
|
|
153
|
+
attribute :fg3_pct, Shale::Type::Float
|
|
154
|
+
|
|
155
|
+
# Returns the passer player object
|
|
156
|
+
#
|
|
157
|
+
# @api public
|
|
158
|
+
# @example
|
|
159
|
+
# entry.player #=> #<NBA::Player>
|
|
160
|
+
# @return [Player, nil] the passer player object
|
|
161
|
+
def player
|
|
162
|
+
Players.find(player_id)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Returns the receiver player object
|
|
166
|
+
#
|
|
167
|
+
# @api public
|
|
168
|
+
# @example
|
|
169
|
+
# entry.pass_to_player #=> #<NBA::Player>
|
|
170
|
+
# @return [Player, nil] the receiver player object
|
|
171
|
+
def pass_to_player
|
|
172
|
+
Players.find(pass_to_player_id)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Returns the team object
|
|
176
|
+
#
|
|
177
|
+
# @api public
|
|
178
|
+
# @example
|
|
179
|
+
# entry.team #=> #<NBA::Team>
|
|
180
|
+
# @return [Team, nil] the team object
|
|
181
|
+
def team
|
|
182
|
+
Teams.find(team_id)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
json do
|
|
186
|
+
map "player_id", to: :player_id
|
|
187
|
+
map "player_name", to: :player_name
|
|
188
|
+
map "team_id", to: :team_id
|
|
189
|
+
map "team_abbreviation", to: :team_abbreviation
|
|
190
|
+
map "pass_to", to: :pass_to
|
|
191
|
+
map "pass_to_player_id", to: :pass_to_player_id
|
|
192
|
+
map "frequency", to: :frequency
|
|
193
|
+
map "pass", to: :pass
|
|
194
|
+
map "ast", to: :ast
|
|
195
|
+
map "fg_m", to: :fg_m
|
|
196
|
+
map "fg_a", to: :fg_a
|
|
197
|
+
map "fg_pct", to: :fg_pct
|
|
198
|
+
map "fg2m", to: :fg2m
|
|
199
|
+
map "fg2a", to: :fg2a
|
|
200
|
+
map "fg2_pct", to: :fg2_pct
|
|
201
|
+
map "fg3m", to: :fg3m
|
|
202
|
+
map "fg3a", to: :fg3a
|
|
203
|
+
map "fg3_pct", to: :fg3_pct
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
data/lib/nba/award.rb
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
module NBA
|
|
2
|
+
# Represents a player's award
|
|
3
|
+
class Award < Shale::Mapper
|
|
4
|
+
include Equalizer.new(:player_id, :description, :season)
|
|
5
|
+
|
|
6
|
+
# @!attribute [rw] player_id
|
|
7
|
+
# Returns the player ID
|
|
8
|
+
# @api public
|
|
9
|
+
# @example
|
|
10
|
+
# award.player_id #=> 201939
|
|
11
|
+
# @return [Integer] the player ID
|
|
12
|
+
attribute :player_id, Shale::Type::Integer
|
|
13
|
+
|
|
14
|
+
# @!attribute [rw] first_name
|
|
15
|
+
# Returns the player's first name
|
|
16
|
+
# @api public
|
|
17
|
+
# @example
|
|
18
|
+
# award.first_name #=> "Stephen"
|
|
19
|
+
# @return [String] the first name
|
|
20
|
+
attribute :first_name, Shale::Type::String
|
|
21
|
+
|
|
22
|
+
# @!attribute [rw] last_name
|
|
23
|
+
# Returns the player's last name
|
|
24
|
+
# @api public
|
|
25
|
+
# @example
|
|
26
|
+
# award.last_name #=> "Curry"
|
|
27
|
+
# @return [String] the last name
|
|
28
|
+
attribute :last_name, Shale::Type::String
|
|
29
|
+
|
|
30
|
+
# @!attribute [rw] team
|
|
31
|
+
# Returns the team name
|
|
32
|
+
# @api public
|
|
33
|
+
# @example
|
|
34
|
+
# award.team #=> "Golden State Warriors"
|
|
35
|
+
# @return [String] the team name
|
|
36
|
+
attribute :team, Shale::Type::String
|
|
37
|
+
|
|
38
|
+
# @!attribute [rw] description
|
|
39
|
+
# Returns the award description
|
|
40
|
+
# @api public
|
|
41
|
+
# @example
|
|
42
|
+
# award.description #=> "All-NBA"
|
|
43
|
+
# @return [String] the award description
|
|
44
|
+
attribute :description, Shale::Type::String
|
|
45
|
+
|
|
46
|
+
# @!attribute [rw] all_nba_team_number
|
|
47
|
+
# Returns the All-NBA team number (1st, 2nd, 3rd)
|
|
48
|
+
# @api public
|
|
49
|
+
# @example
|
|
50
|
+
# award.all_nba_team_number #=> 1
|
|
51
|
+
# @return [Integer] the team number
|
|
52
|
+
attribute :all_nba_team_number, Shale::Type::Integer
|
|
53
|
+
|
|
54
|
+
# @!attribute [rw] season
|
|
55
|
+
# Returns the season
|
|
56
|
+
# @api public
|
|
57
|
+
# @example
|
|
58
|
+
# award.season #=> "2023-24"
|
|
59
|
+
# @return [String] the season
|
|
60
|
+
attribute :season, Shale::Type::String
|
|
61
|
+
|
|
62
|
+
# @!attribute [rw] month
|
|
63
|
+
# Returns the month (for monthly awards)
|
|
64
|
+
# @api public
|
|
65
|
+
# @example
|
|
66
|
+
# award.month #=> 11
|
|
67
|
+
# @return [Integer] the month
|
|
68
|
+
attribute :month, Shale::Type::Integer
|
|
69
|
+
|
|
70
|
+
# @!attribute [rw] week
|
|
71
|
+
# Returns the week (for weekly awards)
|
|
72
|
+
# @api public
|
|
73
|
+
# @example
|
|
74
|
+
# award.week #=> 5
|
|
75
|
+
# @return [Integer] the week
|
|
76
|
+
attribute :week, Shale::Type::Integer
|
|
77
|
+
|
|
78
|
+
# @!attribute [rw] conference
|
|
79
|
+
# Returns the conference
|
|
80
|
+
# @api public
|
|
81
|
+
# @example
|
|
82
|
+
# award.conference #=> "West"
|
|
83
|
+
# @return [String] the conference
|
|
84
|
+
attribute :conference, Shale::Type::String
|
|
85
|
+
|
|
86
|
+
# @!attribute [rw] award_type
|
|
87
|
+
# Returns the award type
|
|
88
|
+
# @api public
|
|
89
|
+
# @example
|
|
90
|
+
# award.award_type #=> "All-Star"
|
|
91
|
+
# @return [String] the award type
|
|
92
|
+
attribute :award_type, Shale::Type::String
|
|
93
|
+
|
|
94
|
+
# @!attribute [rw] subtype1
|
|
95
|
+
# Returns the award subtype 1
|
|
96
|
+
# @api public
|
|
97
|
+
# @example
|
|
98
|
+
# award.subtype1 #=> "Guard"
|
|
99
|
+
# @return [String] the subtype
|
|
100
|
+
attribute :subtype1, Shale::Type::String
|
|
101
|
+
|
|
102
|
+
# @!attribute [rw] subtype2
|
|
103
|
+
# Returns the award subtype 2
|
|
104
|
+
# @api public
|
|
105
|
+
# @example
|
|
106
|
+
# award.subtype2 #=> "Starter"
|
|
107
|
+
# @return [String] the subtype
|
|
108
|
+
attribute :subtype2, Shale::Type::String
|
|
109
|
+
|
|
110
|
+
# @!attribute [rw] subtype3
|
|
111
|
+
# Returns the award subtype 3
|
|
112
|
+
# @api public
|
|
113
|
+
# @example
|
|
114
|
+
# award.subtype3 #=> nil
|
|
115
|
+
# @return [String] the subtype
|
|
116
|
+
attribute :subtype3, Shale::Type::String
|
|
117
|
+
|
|
118
|
+
# Returns the player object
|
|
119
|
+
#
|
|
120
|
+
# @api public
|
|
121
|
+
# @example
|
|
122
|
+
# award.player #=> #<NBA::Player>
|
|
123
|
+
# @return [Player, nil] the player object
|
|
124
|
+
def player
|
|
125
|
+
Players.find(player_id)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
require_relative "box_score_advanced_player_stat"
|
|
2
|
+
require_relative "box_score_advanced_team_stat"
|
|
3
|
+
require_relative "client"
|
|
4
|
+
require_relative "response_parser"
|
|
5
|
+
require_relative "utils"
|
|
6
|
+
|
|
7
|
+
module NBA
|
|
8
|
+
# Provides methods to retrieve advanced box score statistics
|
|
9
|
+
module BoxScoreAdvanced
|
|
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 advanced box score stats for a game
|
|
19
|
+
#
|
|
20
|
+
# @api public
|
|
21
|
+
# @example
|
|
22
|
+
# stats = NBA::BoxScoreAdvanced.player_stats(game: "0022400001")
|
|
23
|
+
# stats.each { |s| puts "#{s.player_name}: #{s.off_rating} ORTG" }
|
|
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 advanced box score stats
|
|
27
|
+
def self.player_stats(game:, client: CLIENT)
|
|
28
|
+
path = "boxscoreadvancedv2?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 advanced box score stats for a game
|
|
33
|
+
#
|
|
34
|
+
# @api public
|
|
35
|
+
# @example
|
|
36
|
+
# stats = NBA::BoxScoreAdvanced.team_stats(game: "0022400001")
|
|
37
|
+
# stats.each { |s| puts "#{s.team_name}: #{s.off_rating} ORTG" }
|
|
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 advanced box score stats
|
|
41
|
+
def self.team_stats(game:, client: CLIENT)
|
|
42
|
+
path = "boxscoreadvancedv2?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 stat object from API data
|
|
47
|
+
# @api private
|
|
48
|
+
# @return [BoxScoreAdvancedPlayerStat]
|
|
49
|
+
def self.build_player_stat(data)
|
|
50
|
+
BoxScoreAdvancedPlayerStat.new(**player_identity(data), **rating_stats(data),
|
|
51
|
+
**efficiency_stats(data), **tempo_stats(data), usg_pct: data["USG_PCT"], e_usg_pct: data["E_USG_PCT"])
|
|
52
|
+
end
|
|
53
|
+
private_class_method :build_player_stat
|
|
54
|
+
|
|
55
|
+
# Builds a team stat object from API data
|
|
56
|
+
# @api private
|
|
57
|
+
# @return [BoxScoreAdvancedTeamStat]
|
|
58
|
+
def self.build_team_stat(data)
|
|
59
|
+
BoxScoreAdvancedTeamStat.new(**team_identity(data), **rating_stats(data),
|
|
60
|
+
**efficiency_stats(data), **tempo_stats(data))
|
|
61
|
+
end
|
|
62
|
+
private_class_method :build_team_stat
|
|
63
|
+
|
|
64
|
+
# Extracts player identity attributes from data
|
|
65
|
+
# @api private
|
|
66
|
+
# @return [Hash]
|
|
67
|
+
def self.player_identity(data)
|
|
68
|
+
{game_id: data["GAME_ID"], team_id: data["TEAM_ID"], team_abbreviation: data["TEAM_ABBREVIATION"],
|
|
69
|
+
team_city: data["TEAM_CITY"], player_id: data["PLAYER_ID"], player_name: data["PLAYER_NAME"],
|
|
70
|
+
start_position: data["START_POSITION"], comment: data["COMMENT"], min: data["MIN"]}
|
|
71
|
+
end
|
|
72
|
+
private_class_method :player_identity
|
|
73
|
+
|
|
74
|
+
# Extracts team identity attributes from data
|
|
75
|
+
# @api private
|
|
76
|
+
# @return [Hash]
|
|
77
|
+
def self.team_identity(data)
|
|
78
|
+
{game_id: data["GAME_ID"], team_id: data["TEAM_ID"], team_name: data["TEAM_NAME"],
|
|
79
|
+
team_abbreviation: data["TEAM_ABBREVIATION"], team_city: data["TEAM_CITY"], min: data["MIN"]}
|
|
80
|
+
end
|
|
81
|
+
private_class_method :team_identity
|
|
82
|
+
|
|
83
|
+
# Extracts rating statistics from data
|
|
84
|
+
# @api private
|
|
85
|
+
# @return [Hash]
|
|
86
|
+
def self.rating_stats(data)
|
|
87
|
+
{e_off_rating: data["E_OFF_RATING"], off_rating: data["OFF_RATING"],
|
|
88
|
+
e_def_rating: data["E_DEF_RATING"], def_rating: data["DEF_RATING"],
|
|
89
|
+
e_net_rating: data["E_NET_RATING"], net_rating: data["NET_RATING"]}
|
|
90
|
+
end
|
|
91
|
+
private_class_method :rating_stats
|
|
92
|
+
|
|
93
|
+
# Extracts efficiency statistics from data
|
|
94
|
+
# @api private
|
|
95
|
+
# @return [Hash]
|
|
96
|
+
def self.efficiency_stats(data)
|
|
97
|
+
{ast_pct: data["AST_PCT"], ast_tov: data["AST_TOV"],
|
|
98
|
+
ast_ratio: data["AST_RATIO"], oreb_pct: data["OREB_PCT"],
|
|
99
|
+
dreb_pct: data["DREB_PCT"], reb_pct: data["REB_PCT"],
|
|
100
|
+
tov_pct: data["TM_TOV_PCT"], efg_pct: data["EFG_PCT"],
|
|
101
|
+
ts_pct: data["TS_PCT"], pie: data["PIE"]}
|
|
102
|
+
end
|
|
103
|
+
private_class_method :efficiency_stats
|
|
104
|
+
|
|
105
|
+
# Extracts tempo statistics from data
|
|
106
|
+
# @api private
|
|
107
|
+
# @return [Hash]
|
|
108
|
+
def self.tempo_stats(data)
|
|
109
|
+
{e_pace: data["E_PACE"], pace: data["PACE"], pace_per40: data["PACE_PER40"],
|
|
110
|
+
poss: data["POSS"]}
|
|
111
|
+
end
|
|
112
|
+
private_class_method :tempo_stats
|
|
113
|
+
end
|
|
114
|
+
end
|