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,267 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
|
|
4
|
+
module NBA
|
|
5
|
+
# Represents total cumulative team statistics
|
|
6
|
+
class CumeStatsTeamTotal < Shale::Mapper
|
|
7
|
+
include Equalizer.new(:team_id)
|
|
8
|
+
|
|
9
|
+
# @!attribute [rw] team_id
|
|
10
|
+
# Returns the team ID
|
|
11
|
+
# @api public
|
|
12
|
+
# @example
|
|
13
|
+
# total.team_id #=> 1610612744
|
|
14
|
+
# @return [Integer] the team ID
|
|
15
|
+
attribute :team_id, Shale::Type::Integer
|
|
16
|
+
|
|
17
|
+
# @!attribute [rw] city
|
|
18
|
+
# Returns the city name
|
|
19
|
+
# @api public
|
|
20
|
+
# @example
|
|
21
|
+
# total.city #=> "Golden State"
|
|
22
|
+
# @return [String] the city name
|
|
23
|
+
attribute :city, Shale::Type::String
|
|
24
|
+
|
|
25
|
+
# @!attribute [rw] nickname
|
|
26
|
+
# Returns the team nickname
|
|
27
|
+
# @api public
|
|
28
|
+
# @example
|
|
29
|
+
# total.nickname #=> "Warriors"
|
|
30
|
+
# @return [String] the team nickname
|
|
31
|
+
attribute :nickname, Shale::Type::String
|
|
32
|
+
|
|
33
|
+
# @!attribute [rw] gp
|
|
34
|
+
# Returns games played
|
|
35
|
+
# @api public
|
|
36
|
+
# @example
|
|
37
|
+
# total.gp #=> 10
|
|
38
|
+
# @return [Integer] games played
|
|
39
|
+
attribute :gp, Shale::Type::Integer
|
|
40
|
+
|
|
41
|
+
# @!attribute [rw] gs
|
|
42
|
+
# Returns games started
|
|
43
|
+
# @api public
|
|
44
|
+
# @example
|
|
45
|
+
# total.gs #=> 10
|
|
46
|
+
# @return [Integer] games started
|
|
47
|
+
attribute :gs, Shale::Type::Integer
|
|
48
|
+
|
|
49
|
+
# @!attribute [rw] w
|
|
50
|
+
# Returns wins
|
|
51
|
+
# @api public
|
|
52
|
+
# @example
|
|
53
|
+
# total.w #=> 8
|
|
54
|
+
# @return [Integer] wins
|
|
55
|
+
attribute :w, Shale::Type::Integer
|
|
56
|
+
|
|
57
|
+
# @!attribute [rw] l
|
|
58
|
+
# Returns losses
|
|
59
|
+
# @api public
|
|
60
|
+
# @example
|
|
61
|
+
# total.l #=> 2
|
|
62
|
+
# @return [Integer] losses
|
|
63
|
+
attribute :l, Shale::Type::Integer
|
|
64
|
+
|
|
65
|
+
# @!attribute [rw] w_home
|
|
66
|
+
# Returns home wins
|
|
67
|
+
# @api public
|
|
68
|
+
# @example
|
|
69
|
+
# total.w_home #=> 5
|
|
70
|
+
# @return [Integer] home wins
|
|
71
|
+
attribute :w_home, Shale::Type::Integer
|
|
72
|
+
|
|
73
|
+
# @!attribute [rw] l_home
|
|
74
|
+
# Returns home losses
|
|
75
|
+
# @api public
|
|
76
|
+
# @example
|
|
77
|
+
# total.l_home #=> 1
|
|
78
|
+
# @return [Integer] home losses
|
|
79
|
+
attribute :l_home, Shale::Type::Integer
|
|
80
|
+
|
|
81
|
+
# @!attribute [rw] w_road
|
|
82
|
+
# Returns road wins
|
|
83
|
+
# @api public
|
|
84
|
+
# @example
|
|
85
|
+
# total.w_road #=> 3
|
|
86
|
+
# @return [Integer] road wins
|
|
87
|
+
attribute :w_road, Shale::Type::Integer
|
|
88
|
+
|
|
89
|
+
# @!attribute [rw] l_road
|
|
90
|
+
# Returns road losses
|
|
91
|
+
# @api public
|
|
92
|
+
# @example
|
|
93
|
+
# total.l_road #=> 1
|
|
94
|
+
# @return [Integer] road losses
|
|
95
|
+
attribute :l_road, Shale::Type::Integer
|
|
96
|
+
|
|
97
|
+
# @!attribute [rw] team_turnovers
|
|
98
|
+
# Returns team turnovers
|
|
99
|
+
# @api public
|
|
100
|
+
# @example
|
|
101
|
+
# total.team_turnovers #=> 120
|
|
102
|
+
# @return [Integer] team turnovers
|
|
103
|
+
attribute :team_turnovers, Shale::Type::Integer
|
|
104
|
+
|
|
105
|
+
# @!attribute [rw] team_rebounds
|
|
106
|
+
# Returns team rebounds
|
|
107
|
+
# @api public
|
|
108
|
+
# @example
|
|
109
|
+
# total.team_rebounds #=> 450
|
|
110
|
+
# @return [Integer] team rebounds
|
|
111
|
+
attribute :team_rebounds, Shale::Type::Integer
|
|
112
|
+
|
|
113
|
+
# @!attribute [rw] fgm
|
|
114
|
+
# Returns field goals made
|
|
115
|
+
# @api public
|
|
116
|
+
# @example
|
|
117
|
+
# total.fgm #=> 400
|
|
118
|
+
# @return [Integer] field goals made
|
|
119
|
+
attribute :fgm, Shale::Type::Integer
|
|
120
|
+
|
|
121
|
+
# @!attribute [rw] fga
|
|
122
|
+
# Returns field goals attempted
|
|
123
|
+
# @api public
|
|
124
|
+
# @example
|
|
125
|
+
# total.fga #=> 850
|
|
126
|
+
# @return [Integer] field goals attempted
|
|
127
|
+
attribute :fga, Shale::Type::Integer
|
|
128
|
+
|
|
129
|
+
# @!attribute [rw] fg_pct
|
|
130
|
+
# Returns field goal percentage
|
|
131
|
+
# @api public
|
|
132
|
+
# @example
|
|
133
|
+
# total.fg_pct #=> 0.471
|
|
134
|
+
# @return [Float] field goal percentage
|
|
135
|
+
attribute :fg_pct, Shale::Type::Float
|
|
136
|
+
|
|
137
|
+
# @!attribute [rw] fg3m
|
|
138
|
+
# Returns three point field goals made
|
|
139
|
+
# @api public
|
|
140
|
+
# @example
|
|
141
|
+
# total.fg3m #=> 150
|
|
142
|
+
# @return [Integer] three point field goals made
|
|
143
|
+
attribute :fg3m, Shale::Type::Integer
|
|
144
|
+
|
|
145
|
+
# @!attribute [rw] fg3a
|
|
146
|
+
# Returns three point field goals attempted
|
|
147
|
+
# @api public
|
|
148
|
+
# @example
|
|
149
|
+
# total.fg3a #=> 400
|
|
150
|
+
# @return [Integer] three point field goals attempted
|
|
151
|
+
attribute :fg3a, Shale::Type::Integer
|
|
152
|
+
|
|
153
|
+
# @!attribute [rw] fg3_pct
|
|
154
|
+
# Returns three point field goal percentage
|
|
155
|
+
# @api public
|
|
156
|
+
# @example
|
|
157
|
+
# total.fg3_pct #=> 0.375
|
|
158
|
+
# @return [Float] three point field goal percentage
|
|
159
|
+
attribute :fg3_pct, Shale::Type::Float
|
|
160
|
+
|
|
161
|
+
# @!attribute [rw] ftm
|
|
162
|
+
# Returns free throws made
|
|
163
|
+
# @api public
|
|
164
|
+
# @example
|
|
165
|
+
# total.ftm #=> 180
|
|
166
|
+
# @return [Integer] free throws made
|
|
167
|
+
attribute :ftm, Shale::Type::Integer
|
|
168
|
+
|
|
169
|
+
# @!attribute [rw] fta
|
|
170
|
+
# Returns free throws attempted
|
|
171
|
+
# @api public
|
|
172
|
+
# @example
|
|
173
|
+
# total.fta #=> 220
|
|
174
|
+
# @return [Integer] free throws attempted
|
|
175
|
+
attribute :fta, Shale::Type::Integer
|
|
176
|
+
|
|
177
|
+
# @!attribute [rw] ft_pct
|
|
178
|
+
# Returns free throw percentage
|
|
179
|
+
# @api public
|
|
180
|
+
# @example
|
|
181
|
+
# total.ft_pct #=> 0.818
|
|
182
|
+
# @return [Float] free throw percentage
|
|
183
|
+
attribute :ft_pct, Shale::Type::Float
|
|
184
|
+
|
|
185
|
+
# @!attribute [rw] oreb
|
|
186
|
+
# Returns offensive rebounds
|
|
187
|
+
# @api public
|
|
188
|
+
# @example
|
|
189
|
+
# total.oreb #=> 100
|
|
190
|
+
# @return [Integer] offensive rebounds
|
|
191
|
+
attribute :oreb, Shale::Type::Integer
|
|
192
|
+
|
|
193
|
+
# @!attribute [rw] dreb
|
|
194
|
+
# Returns defensive rebounds
|
|
195
|
+
# @api public
|
|
196
|
+
# @example
|
|
197
|
+
# total.dreb #=> 350
|
|
198
|
+
# @return [Integer] defensive rebounds
|
|
199
|
+
attribute :dreb, Shale::Type::Integer
|
|
200
|
+
|
|
201
|
+
# @!attribute [rw] tot_reb
|
|
202
|
+
# Returns total rebounds
|
|
203
|
+
# @api public
|
|
204
|
+
# @example
|
|
205
|
+
# total.tot_reb #=> 450
|
|
206
|
+
# @return [Integer] total rebounds
|
|
207
|
+
attribute :tot_reb, Shale::Type::Integer
|
|
208
|
+
|
|
209
|
+
# @!attribute [rw] ast
|
|
210
|
+
# Returns assists
|
|
211
|
+
# @api public
|
|
212
|
+
# @example
|
|
213
|
+
# total.ast #=> 250
|
|
214
|
+
# @return [Integer] assists
|
|
215
|
+
attribute :ast, Shale::Type::Integer
|
|
216
|
+
|
|
217
|
+
# @!attribute [rw] pf
|
|
218
|
+
# Returns personal fouls
|
|
219
|
+
# @api public
|
|
220
|
+
# @example
|
|
221
|
+
# total.pf #=> 180
|
|
222
|
+
# @return [Integer] personal fouls
|
|
223
|
+
attribute :pf, Shale::Type::Integer
|
|
224
|
+
|
|
225
|
+
# @!attribute [rw] stl
|
|
226
|
+
# Returns steals
|
|
227
|
+
# @api public
|
|
228
|
+
# @example
|
|
229
|
+
# total.stl #=> 80
|
|
230
|
+
# @return [Integer] steals
|
|
231
|
+
attribute :stl, Shale::Type::Integer
|
|
232
|
+
|
|
233
|
+
# @!attribute [rw] tov
|
|
234
|
+
# Returns turnovers
|
|
235
|
+
# @api public
|
|
236
|
+
# @example
|
|
237
|
+
# total.tov #=> 120
|
|
238
|
+
# @return [Integer] turnovers
|
|
239
|
+
attribute :tov, Shale::Type::Integer
|
|
240
|
+
|
|
241
|
+
# @!attribute [rw] blk
|
|
242
|
+
# Returns blocks
|
|
243
|
+
# @api public
|
|
244
|
+
# @example
|
|
245
|
+
# total.blk #=> 45
|
|
246
|
+
# @return [Integer] blocks
|
|
247
|
+
attribute :blk, Shale::Type::Integer
|
|
248
|
+
|
|
249
|
+
# @!attribute [rw] pts
|
|
250
|
+
# Returns points
|
|
251
|
+
# @api public
|
|
252
|
+
# @example
|
|
253
|
+
# total.pts #=> 1130
|
|
254
|
+
# @return [Integer] points
|
|
255
|
+
attribute :pts, Shale::Type::Integer
|
|
256
|
+
|
|
257
|
+
# Returns the team object
|
|
258
|
+
#
|
|
259
|
+
# @api public
|
|
260
|
+
# @example
|
|
261
|
+
# total.team #=> #<NBA::Team>
|
|
262
|
+
# @return [Team, nil] the team object
|
|
263
|
+
def team
|
|
264
|
+
Teams.find(team_id)
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
end
|
data/lib/nba/data.rb
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
require_relative "client"
|
|
3
|
+
require_relative "team"
|
|
4
|
+
|
|
5
|
+
module NBA
|
|
6
|
+
# Provides static team data for all 30 NBA teams
|
|
7
|
+
module Data
|
|
8
|
+
# All NBA team data with complete information
|
|
9
|
+
# @return [Array<Hash>] array of team hashes
|
|
10
|
+
TEAMS = [
|
|
11
|
+
{id: Team::ATL, abbreviation: "ATL", name: "Atlanta Hawks", full_name: "Atlanta Hawks", nickname: "Hawks",
|
|
12
|
+
city: "Atlanta", state: "Georgia", year_founded: 1946},
|
|
13
|
+
{id: Team::BOS, abbreviation: "BOS", name: "Boston Celtics", full_name: "Boston Celtics", nickname: "Celtics",
|
|
14
|
+
city: "Boston", state: "Massachusetts", year_founded: 1946},
|
|
15
|
+
{id: Team::BKN, abbreviation: "BKN", name: "Brooklyn Nets", full_name: "Brooklyn Nets", nickname: "Nets",
|
|
16
|
+
city: "Brooklyn", state: "New York", year_founded: 1967},
|
|
17
|
+
{id: Team::CHA, abbreviation: "CHA", name: "Charlotte Hornets", full_name: "Charlotte Hornets", nickname: "Hornets",
|
|
18
|
+
city: "Charlotte", state: "North Carolina", year_founded: 1988},
|
|
19
|
+
{id: Team::CHI, abbreviation: "CHI", name: "Chicago Bulls", full_name: "Chicago Bulls", nickname: "Bulls",
|
|
20
|
+
city: "Chicago", state: "Illinois", year_founded: 1966},
|
|
21
|
+
{id: Team::CLE, abbreviation: "CLE", name: "Cleveland Cavaliers", full_name: "Cleveland Cavaliers", nickname: "Cavaliers",
|
|
22
|
+
city: "Cleveland", state: "Ohio", year_founded: 1970},
|
|
23
|
+
{id: Team::DAL, abbreviation: "DAL", name: "Dallas Mavericks", full_name: "Dallas Mavericks", nickname: "Mavericks",
|
|
24
|
+
city: "Dallas", state: "Texas", year_founded: 1980},
|
|
25
|
+
{id: Team::DEN, abbreviation: "DEN", name: "Denver Nuggets", full_name: "Denver Nuggets", nickname: "Nuggets",
|
|
26
|
+
city: "Denver", state: "Colorado", year_founded: 1967},
|
|
27
|
+
{id: Team::DET, abbreviation: "DET", name: "Detroit Pistons", full_name: "Detroit Pistons", nickname: "Pistons",
|
|
28
|
+
city: "Detroit", state: "Michigan", year_founded: 1941},
|
|
29
|
+
{id: Team::GSW, abbreviation: "GSW", name: "Golden State Warriors", full_name: "Golden State Warriors", nickname: "Warriors",
|
|
30
|
+
city: "San Francisco", state: "California", year_founded: 1946},
|
|
31
|
+
{id: Team::HOU, abbreviation: "HOU", name: "Houston Rockets", full_name: "Houston Rockets", nickname: "Rockets",
|
|
32
|
+
city: "Houston", state: "Texas", year_founded: 1967},
|
|
33
|
+
{id: Team::IND, abbreviation: "IND", name: "Indiana Pacers", full_name: "Indiana Pacers", nickname: "Pacers",
|
|
34
|
+
city: "Indianapolis", state: "Indiana", year_founded: 1967},
|
|
35
|
+
{id: Team::LAC, abbreviation: "LAC", name: "LA Clippers", full_name: "Los Angeles Clippers", nickname: "Clippers",
|
|
36
|
+
city: "Los Angeles", state: "California", year_founded: 1970},
|
|
37
|
+
{id: Team::LAL, abbreviation: "LAL", name: "Los Angeles Lakers", full_name: "Los Angeles Lakers", nickname: "Lakers",
|
|
38
|
+
city: "Los Angeles", state: "California", year_founded: 1947},
|
|
39
|
+
{id: Team::MEM, abbreviation: "MEM", name: "Memphis Grizzlies", full_name: "Memphis Grizzlies", nickname: "Grizzlies",
|
|
40
|
+
city: "Memphis", state: "Tennessee", year_founded: 1995},
|
|
41
|
+
{id: Team::MIA, abbreviation: "MIA", name: "Miami Heat", full_name: "Miami Heat", nickname: "Heat",
|
|
42
|
+
city: "Miami", state: "Florida", year_founded: 1988},
|
|
43
|
+
{id: Team::MIL, abbreviation: "MIL", name: "Milwaukee Bucks", full_name: "Milwaukee Bucks", nickname: "Bucks",
|
|
44
|
+
city: "Milwaukee", state: "Wisconsin", year_founded: 1968},
|
|
45
|
+
{id: Team::MIN, abbreviation: "MIN", name: "Minnesota Timberwolves", full_name: "Minnesota Timberwolves", nickname: "Timberwolves",
|
|
46
|
+
city: "Minneapolis", state: "Minnesota", year_founded: 1989},
|
|
47
|
+
{id: Team::NOP, abbreviation: "NOP", name: "New Orleans Pelicans", full_name: "New Orleans Pelicans", nickname: "Pelicans",
|
|
48
|
+
city: "New Orleans", state: "Louisiana", year_founded: 2002},
|
|
49
|
+
{id: Team::NYK, abbreviation: "NYK", name: "New York Knicks", full_name: "New York Knicks", nickname: "Knicks",
|
|
50
|
+
city: "New York", state: "New York", year_founded: 1946},
|
|
51
|
+
{id: Team::OKC, abbreviation: "OKC", name: "Oklahoma City Thunder", full_name: "Oklahoma City Thunder", nickname: "Thunder",
|
|
52
|
+
city: "Oklahoma City", state: "Oklahoma", year_founded: 1967},
|
|
53
|
+
{id: Team::ORL, abbreviation: "ORL", name: "Orlando Magic", full_name: "Orlando Magic", nickname: "Magic",
|
|
54
|
+
city: "Orlando", state: "Florida", year_founded: 1989},
|
|
55
|
+
{id: Team::PHI, abbreviation: "PHI", name: "Philadelphia 76ers", full_name: "Philadelphia 76ers", nickname: "76ers",
|
|
56
|
+
city: "Philadelphia", state: "Pennsylvania", year_founded: 1946},
|
|
57
|
+
{id: Team::PHX, abbreviation: "PHX", name: "Phoenix Suns", full_name: "Phoenix Suns", nickname: "Suns",
|
|
58
|
+
city: "Phoenix", state: "Arizona", year_founded: 1968},
|
|
59
|
+
{id: Team::POR, abbreviation: "POR", name: "Portland Trail Blazers", full_name: "Portland Trail Blazers", nickname: "Trail Blazers",
|
|
60
|
+
city: "Portland", state: "Oregon", year_founded: 1970},
|
|
61
|
+
{id: Team::SAC, abbreviation: "SAC", name: "Sacramento Kings", full_name: "Sacramento Kings", nickname: "Kings",
|
|
62
|
+
city: "Sacramento", state: "California", year_founded: 1945},
|
|
63
|
+
{id: Team::SAS, abbreviation: "SAS", name: "San Antonio Spurs", full_name: "San Antonio Spurs", nickname: "Spurs",
|
|
64
|
+
city: "San Antonio", state: "Texas", year_founded: 1967},
|
|
65
|
+
{id: Team::TOR, abbreviation: "TOR", name: "Toronto Raptors", full_name: "Toronto Raptors", nickname: "Raptors",
|
|
66
|
+
city: "Toronto", state: "Ontario", year_founded: 1995},
|
|
67
|
+
{id: Team::UTA, abbreviation: "UTA", name: "Utah Jazz", full_name: "Utah Jazz", nickname: "Jazz",
|
|
68
|
+
city: "Salt Lake City", state: "Utah", year_founded: 1974},
|
|
69
|
+
{id: Team::WAS, abbreviation: "WAS", name: "Washington Wizards", full_name: "Washington Wizards", nickname: "Wizards",
|
|
70
|
+
city: "Washington", state: "District of Columbia", year_founded: 1961}
|
|
71
|
+
].freeze
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
require_relative "client"
|
|
3
|
+
require_relative "collection"
|
|
4
|
+
require_relative "defense_hub_stat"
|
|
5
|
+
require_relative "league"
|
|
6
|
+
require_relative "response_parser"
|
|
7
|
+
require_relative "utils"
|
|
8
|
+
|
|
9
|
+
module NBA
|
|
10
|
+
# Provides methods to retrieve NBA defense hub statistics
|
|
11
|
+
module DefenseHub
|
|
12
|
+
# Stat categories available in the defense hub
|
|
13
|
+
STAT_CATEGORIES = {
|
|
14
|
+
dreb: "DefenseHubStat1",
|
|
15
|
+
stl: "DefenseHubStat2",
|
|
16
|
+
blk: "DefenseHubStat3",
|
|
17
|
+
def_rating: "DefenseHubStat4",
|
|
18
|
+
overall_pm: "DefenseHubStat5",
|
|
19
|
+
threep_dfg_pct: "DefenseHubStat6",
|
|
20
|
+
twop_dfg_pct: "DefenseHubStat7",
|
|
21
|
+
fifteenf_dfg_pct: "DefenseHubStat8",
|
|
22
|
+
def_rim_pct: "DefenseHubStat9"
|
|
23
|
+
}.freeze
|
|
24
|
+
|
|
25
|
+
# Retrieves defense hub statistics for a stat category
|
|
26
|
+
#
|
|
27
|
+
# @api public
|
|
28
|
+
# @example
|
|
29
|
+
# stats = NBA::DefenseHub.all(stat_category: :dreb, season: 2023)
|
|
30
|
+
# stats.each { |s| puts "#{s.rank}. #{s.team_abbreviation}: #{s.value}" }
|
|
31
|
+
# @param stat_category [Symbol] the stat category (:dreb, :stl, :blk, etc.)
|
|
32
|
+
# @param season [Integer] the season year (defaults to current season)
|
|
33
|
+
# @param season_type [String] the season type (Regular Season, Playoffs, etc.)
|
|
34
|
+
# @param game_scope [String] the game scope (Season, Yesterday, etc.)
|
|
35
|
+
# @param player_or_team [String] player or team stats (Player, Team)
|
|
36
|
+
# @param player_scope [String] the player scope (All Players, Rookies)
|
|
37
|
+
# @param league [String, League] the league ID or League object
|
|
38
|
+
# @param client [Client] the API client to use
|
|
39
|
+
# @return [Collection] a collection of defense hub stats
|
|
40
|
+
def self.all(stat_category:, season: Utils.current_season, season_type: "Regular Season",
|
|
41
|
+
game_scope: "Season", player_or_team: "Team", player_scope: "All Players",
|
|
42
|
+
league: League::NBA, client: CLIENT)
|
|
43
|
+
result_set = STAT_CATEGORIES.fetch(stat_category)
|
|
44
|
+
league_id = Utils.extract_league_id(league)
|
|
45
|
+
opts = {season: season, season_type: season_type, game_scope: game_scope,
|
|
46
|
+
player_or_team: player_or_team, player_scope: player_scope, league_id: league_id}
|
|
47
|
+
response = client.get(build_path(opts))
|
|
48
|
+
parse_response(response, result_set, stat_category)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Builds the API request path
|
|
52
|
+
# @api private
|
|
53
|
+
# @return [String] the request path
|
|
54
|
+
def self.build_path(opts)
|
|
55
|
+
"defensehub?GameScope=#{opts[:game_scope]}&LeagueID=#{opts[:league_id]}" \
|
|
56
|
+
"&PlayerOrTeam=#{opts[:player_or_team]}&PlayerScope=#{opts[:player_scope]}" \
|
|
57
|
+
"&Season=#{Utils.format_season(opts[:season])}&SeasonType=#{opts[:season_type]}"
|
|
58
|
+
end
|
|
59
|
+
private_class_method :build_path
|
|
60
|
+
|
|
61
|
+
# Parses the API response
|
|
62
|
+
# @api private
|
|
63
|
+
# @param response [String, nil] the raw API response
|
|
64
|
+
# @param result_set [String] the result set name
|
|
65
|
+
# @param stat_category [Symbol] the stat category
|
|
66
|
+
# @return [Collection] parsed stats
|
|
67
|
+
def self.parse_response(response, result_set, stat_category)
|
|
68
|
+
ResponseParser.parse(response, result_set: result_set) do |data|
|
|
69
|
+
build_stat(data, stat_category)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
private_class_method :parse_response
|
|
73
|
+
|
|
74
|
+
# Builds a DefenseHubStat object from raw data
|
|
75
|
+
# @api private
|
|
76
|
+
# @param data [Hash] the row data
|
|
77
|
+
# @param stat_category [Symbol] the stat category
|
|
78
|
+
# @return [DefenseHubStat] the stat object
|
|
79
|
+
def self.build_stat(data, stat_category)
|
|
80
|
+
DefenseHubStat.new(**stat_attributes(data, stat_category))
|
|
81
|
+
end
|
|
82
|
+
private_class_method :build_stat
|
|
83
|
+
|
|
84
|
+
# Extracts stat attributes from data
|
|
85
|
+
# @api private
|
|
86
|
+
# @param data [Hash] the row data
|
|
87
|
+
# @param stat_category [Symbol] the stat category name
|
|
88
|
+
# @return [Hash] stat attributes
|
|
89
|
+
def self.stat_attributes(data, stat_category)
|
|
90
|
+
{rank: data["RANK"], team_id: data["TEAM_ID"],
|
|
91
|
+
team_abbreviation: data["TEAM_ABBREVIATION"],
|
|
92
|
+
team_name: data["TEAM_NAME"],
|
|
93
|
+
value: extract_value(data), stat_name: stat_category}
|
|
94
|
+
end
|
|
95
|
+
private_class_method :stat_attributes
|
|
96
|
+
|
|
97
|
+
# Extracts the stat value from data (different keys per result set)
|
|
98
|
+
# @api private
|
|
99
|
+
# @param data [Hash] the row data
|
|
100
|
+
# @return [Float, nil] the stat value
|
|
101
|
+
def self.extract_value(data)
|
|
102
|
+
value_keys = %w[DREB STL BLK TM_DEF_RATING OVERALL_PM THREEP_DFGPCT
|
|
103
|
+
TWOP_DFGPCT FIFETEENF_DFGPCT DEF_RIM_PCT]
|
|
104
|
+
value_keys.each { |key| return data.fetch(key) if data.key?(key) }
|
|
105
|
+
nil
|
|
106
|
+
end
|
|
107
|
+
private_class_method :extract_value
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
|
|
4
|
+
module NBA
|
|
5
|
+
# Represents a defense hub statistic entry
|
|
6
|
+
#
|
|
7
|
+
# @api public
|
|
8
|
+
# @example
|
|
9
|
+
# stat.rank #=> 1
|
|
10
|
+
# stat.team_abbreviation #=> "BOS"
|
|
11
|
+
# stat.value #=> 47.8
|
|
12
|
+
class DefenseHubStat < Shale::Mapper
|
|
13
|
+
include Equalizer.new(:rank, :team_id)
|
|
14
|
+
|
|
15
|
+
# Returns the rank
|
|
16
|
+
# @api public
|
|
17
|
+
# @example
|
|
18
|
+
# stat.rank #=> 1
|
|
19
|
+
# @return [Integer, nil] the rank
|
|
20
|
+
attribute :rank, Shale::Type::Integer
|
|
21
|
+
|
|
22
|
+
# Returns the team ID
|
|
23
|
+
# @api public
|
|
24
|
+
# @example
|
|
25
|
+
# stat.team_id #=> 1610612738
|
|
26
|
+
# @return [Integer, nil] the team ID
|
|
27
|
+
attribute :team_id, Shale::Type::Integer
|
|
28
|
+
|
|
29
|
+
# Returns the team abbreviation
|
|
30
|
+
# @api public
|
|
31
|
+
# @example
|
|
32
|
+
# stat.team_abbreviation #=> "BOS"
|
|
33
|
+
# @return [String, nil] the team abbreviation
|
|
34
|
+
attribute :team_abbreviation, Shale::Type::String
|
|
35
|
+
|
|
36
|
+
# Returns the team name
|
|
37
|
+
# @api public
|
|
38
|
+
# @example
|
|
39
|
+
# stat.team_name #=> "Boston Celtics"
|
|
40
|
+
# @return [String, nil] the team name
|
|
41
|
+
attribute :team_name, Shale::Type::String
|
|
42
|
+
|
|
43
|
+
# Returns the statistic value
|
|
44
|
+
# @api public
|
|
45
|
+
# @example
|
|
46
|
+
# stat.value #=> 47.8
|
|
47
|
+
# @return [Float, nil] the statistic value
|
|
48
|
+
attribute :value, Shale::Type::Float
|
|
49
|
+
|
|
50
|
+
# Returns the statistic name
|
|
51
|
+
# @api public
|
|
52
|
+
# @example
|
|
53
|
+
# stat.stat_name #=> "dreb"
|
|
54
|
+
# @return [String, nil] the statistic name
|
|
55
|
+
attribute :stat_name, Shale::Type::String
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
require_relative "players"
|
|
4
|
+
|
|
5
|
+
module NBA
|
|
6
|
+
# Represents a player's defensive shot statistics
|
|
7
|
+
#
|
|
8
|
+
# @api public
|
|
9
|
+
class DefensiveShotStat < Shale::Mapper
|
|
10
|
+
include Equalizer.new(:close_def_person_id, :defense_category, :g)
|
|
11
|
+
|
|
12
|
+
# @!attribute [rw] close_def_person_id
|
|
13
|
+
# Returns the defender's player ID
|
|
14
|
+
# @api public
|
|
15
|
+
# @example
|
|
16
|
+
# stat.close_def_person_id #=> 201939
|
|
17
|
+
# @return [Integer, nil] the defender's player ID
|
|
18
|
+
attribute :close_def_person_id, Shale::Type::Integer
|
|
19
|
+
|
|
20
|
+
# @!attribute [rw] gp
|
|
21
|
+
# Returns games played
|
|
22
|
+
# @api public
|
|
23
|
+
# @example
|
|
24
|
+
# stat.gp #=> 74
|
|
25
|
+
# @return [Integer, nil] games played
|
|
26
|
+
attribute :gp, Shale::Type::Integer
|
|
27
|
+
|
|
28
|
+
# @!attribute [rw] g
|
|
29
|
+
# Returns number of games
|
|
30
|
+
# @api public
|
|
31
|
+
# @example
|
|
32
|
+
# stat.g #=> 74
|
|
33
|
+
# @return [Integer, nil] games
|
|
34
|
+
attribute :g, Shale::Type::Integer
|
|
35
|
+
|
|
36
|
+
# @!attribute [rw] defense_category
|
|
37
|
+
# Returns the defensive category
|
|
38
|
+
# @api public
|
|
39
|
+
# @example
|
|
40
|
+
# stat.defense_category #=> "3 Pointers"
|
|
41
|
+
# @return [String, nil] the defensive category
|
|
42
|
+
attribute :defense_category, Shale::Type::String
|
|
43
|
+
|
|
44
|
+
# @!attribute [rw] freq
|
|
45
|
+
# Returns the frequency
|
|
46
|
+
# @api public
|
|
47
|
+
# @example
|
|
48
|
+
# stat.freq #=> 0.25
|
|
49
|
+
# @return [Float, nil] frequency
|
|
50
|
+
attribute :freq, Shale::Type::Float
|
|
51
|
+
|
|
52
|
+
# @!attribute [rw] d_fgm
|
|
53
|
+
# Returns defended field goals made
|
|
54
|
+
# @api public
|
|
55
|
+
# @example
|
|
56
|
+
# stat.d_fgm #=> 2.1
|
|
57
|
+
# @return [Float, nil] defended field goals made
|
|
58
|
+
attribute :d_fgm, Shale::Type::Float
|
|
59
|
+
|
|
60
|
+
# @!attribute [rw] d_fga
|
|
61
|
+
# Returns defended field goals attempted
|
|
62
|
+
# @api public
|
|
63
|
+
# @example
|
|
64
|
+
# stat.d_fga #=> 5.3
|
|
65
|
+
# @return [Float, nil] defended field goals attempted
|
|
66
|
+
attribute :d_fga, Shale::Type::Float
|
|
67
|
+
|
|
68
|
+
# @!attribute [rw] d_fg_pct
|
|
69
|
+
# Returns defended field goal percentage
|
|
70
|
+
# @api public
|
|
71
|
+
# @example
|
|
72
|
+
# stat.d_fg_pct #=> 0.396
|
|
73
|
+
# @return [Float, nil] defended field goal percentage
|
|
74
|
+
attribute :d_fg_pct, Shale::Type::Float
|
|
75
|
+
|
|
76
|
+
# @!attribute [rw] normal_fg_pct
|
|
77
|
+
# Returns normal field goal percentage
|
|
78
|
+
# @api public
|
|
79
|
+
# @example
|
|
80
|
+
# stat.normal_fg_pct #=> 0.401
|
|
81
|
+
# @return [Float, nil] normal field goal percentage
|
|
82
|
+
attribute :normal_fg_pct, Shale::Type::Float
|
|
83
|
+
|
|
84
|
+
# @!attribute [rw] pct_plusminus
|
|
85
|
+
# Returns percentage plus/minus
|
|
86
|
+
# @api public
|
|
87
|
+
# @example
|
|
88
|
+
# stat.pct_plusminus #=> -0.005
|
|
89
|
+
# @return [Float, nil] percentage plus/minus
|
|
90
|
+
attribute :pct_plusminus, Shale::Type::Float
|
|
91
|
+
|
|
92
|
+
# Returns the player who defended the shots
|
|
93
|
+
#
|
|
94
|
+
# @api public
|
|
95
|
+
# @example
|
|
96
|
+
# stat.player #=> #<NBA::Player id=201939 ...>
|
|
97
|
+
# @return [Player, nil] the player object
|
|
98
|
+
def player
|
|
99
|
+
Players.find(close_def_person_id)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
data/lib/nba/division.rb
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
require_relative "conference"
|
|
4
|
+
|
|
5
|
+
module NBA
|
|
6
|
+
# Represents an NBA division
|
|
7
|
+
class Division < Shale::Mapper
|
|
8
|
+
include Equalizer.new(:id)
|
|
9
|
+
|
|
10
|
+
# @!attribute [rw] id
|
|
11
|
+
# Returns the unique identifier for the division
|
|
12
|
+
# @api public
|
|
13
|
+
# @example
|
|
14
|
+
# division.id #=> 5
|
|
15
|
+
# @return [Integer] the unique identifier for the division
|
|
16
|
+
attribute :id, Shale::Type::Integer
|
|
17
|
+
|
|
18
|
+
# @!attribute [rw] name
|
|
19
|
+
# Returns the division name
|
|
20
|
+
# @api public
|
|
21
|
+
# @example
|
|
22
|
+
# division.name #=> "Atlantic"
|
|
23
|
+
# @return [String] the division name
|
|
24
|
+
attribute :name, Shale::Type::String
|
|
25
|
+
|
|
26
|
+
# @!attribute [rw] link
|
|
27
|
+
# Returns the API link for the division
|
|
28
|
+
# @api public
|
|
29
|
+
# @example
|
|
30
|
+
# division.link #=> "/api/v1/divisions/5"
|
|
31
|
+
# @return [String] the API link for the division
|
|
32
|
+
attribute :link, Shale::Type::String
|
|
33
|
+
|
|
34
|
+
# @!attribute [rw] conference
|
|
35
|
+
# Returns the conference this division belongs to
|
|
36
|
+
# @api public
|
|
37
|
+
# @example
|
|
38
|
+
# division.conference #=> #<NBA::Conference>
|
|
39
|
+
# @return [Conference] the conference
|
|
40
|
+
attribute :conference, Conference
|
|
41
|
+
|
|
42
|
+
json do
|
|
43
|
+
map "id", to: :id
|
|
44
|
+
map "name", to: :name
|
|
45
|
+
map "link", to: :link
|
|
46
|
+
map "conference", to: :conference
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|