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,241 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
require_relative "players"
|
|
4
|
+
require_relative "teams"
|
|
5
|
+
|
|
6
|
+
module NBA
|
|
7
|
+
# Represents a season matchup statistic between offensive and defensive players
|
|
8
|
+
#
|
|
9
|
+
# @api public
|
|
10
|
+
class LeagueSeasonMatchupStat < Shale::Mapper
|
|
11
|
+
include Equalizer.new(:season_id, :off_player_id, :def_player_id)
|
|
12
|
+
|
|
13
|
+
# @!attribute [rw] season_id
|
|
14
|
+
# Returns the season ID
|
|
15
|
+
# @api public
|
|
16
|
+
# @example
|
|
17
|
+
# stat.season_id #=> "22024"
|
|
18
|
+
# @return [String, nil] the season ID
|
|
19
|
+
attribute :season_id, Shale::Type::String
|
|
20
|
+
|
|
21
|
+
# @!attribute [rw] off_player_id
|
|
22
|
+
# Returns the offensive player ID
|
|
23
|
+
# @api public
|
|
24
|
+
# @example
|
|
25
|
+
# stat.off_player_id #=> 201939
|
|
26
|
+
# @return [Integer, nil] the offensive player's ID
|
|
27
|
+
attribute :off_player_id, Shale::Type::Integer
|
|
28
|
+
|
|
29
|
+
# @!attribute [rw] off_player_name
|
|
30
|
+
# Returns the offensive player name
|
|
31
|
+
# @api public
|
|
32
|
+
# @example
|
|
33
|
+
# stat.off_player_name #=> "Stephen Curry"
|
|
34
|
+
# @return [String, nil] the offensive player's name
|
|
35
|
+
attribute :off_player_name, Shale::Type::String
|
|
36
|
+
|
|
37
|
+
# @!attribute [rw] def_player_id
|
|
38
|
+
# Returns the defensive player ID
|
|
39
|
+
# @api public
|
|
40
|
+
# @example
|
|
41
|
+
# stat.def_player_id #=> 203507
|
|
42
|
+
# @return [Integer, nil] the defensive player's ID
|
|
43
|
+
attribute :def_player_id, Shale::Type::Integer
|
|
44
|
+
|
|
45
|
+
# @!attribute [rw] def_player_name
|
|
46
|
+
# Returns the defensive player name
|
|
47
|
+
# @api public
|
|
48
|
+
# @example
|
|
49
|
+
# stat.def_player_name #=> "Giannis Antetokounmpo"
|
|
50
|
+
# @return [String, nil] the defensive player's name
|
|
51
|
+
attribute :def_player_name, Shale::Type::String
|
|
52
|
+
|
|
53
|
+
# @!attribute [rw] gp
|
|
54
|
+
# Returns games played
|
|
55
|
+
# @api public
|
|
56
|
+
# @example
|
|
57
|
+
# stat.gp #=> 4
|
|
58
|
+
# @return [Integer, nil] games played
|
|
59
|
+
attribute :gp, Shale::Type::Integer
|
|
60
|
+
|
|
61
|
+
# @!attribute [rw] matchup_min
|
|
62
|
+
# Returns matchup minutes
|
|
63
|
+
# @api public
|
|
64
|
+
# @example
|
|
65
|
+
# stat.matchup_min #=> 12.5
|
|
66
|
+
# @return [Float, nil] matchup minutes
|
|
67
|
+
attribute :matchup_min, Shale::Type::Float
|
|
68
|
+
|
|
69
|
+
# @!attribute [rw] partial_poss
|
|
70
|
+
# Returns partial possessions
|
|
71
|
+
# @api public
|
|
72
|
+
# @example
|
|
73
|
+
# stat.partial_poss #=> 45.2
|
|
74
|
+
# @return [Float, nil] partial possessions
|
|
75
|
+
attribute :partial_poss, Shale::Type::Float
|
|
76
|
+
|
|
77
|
+
# @!attribute [rw] player_pts
|
|
78
|
+
# Returns points scored by offensive player
|
|
79
|
+
# @api public
|
|
80
|
+
# @example
|
|
81
|
+
# stat.player_pts #=> 18.0
|
|
82
|
+
# @return [Float, nil] player points
|
|
83
|
+
attribute :player_pts, Shale::Type::Float
|
|
84
|
+
|
|
85
|
+
# @!attribute [rw] team_pts
|
|
86
|
+
# Returns team points during matchup
|
|
87
|
+
# @api public
|
|
88
|
+
# @example
|
|
89
|
+
# stat.team_pts #=> 22.0
|
|
90
|
+
# @return [Float, nil] team points
|
|
91
|
+
attribute :team_pts, Shale::Type::Float
|
|
92
|
+
|
|
93
|
+
# @!attribute [rw] matchup_ast
|
|
94
|
+
# Returns assists during matchup
|
|
95
|
+
# @api public
|
|
96
|
+
# @example
|
|
97
|
+
# stat.matchup_ast #=> 3.0
|
|
98
|
+
# @return [Float, nil] matchup assists
|
|
99
|
+
attribute :matchup_ast, Shale::Type::Float
|
|
100
|
+
|
|
101
|
+
# @!attribute [rw] matchup_tov
|
|
102
|
+
# Returns turnovers during matchup
|
|
103
|
+
# @api public
|
|
104
|
+
# @example
|
|
105
|
+
# stat.matchup_tov #=> 1.0
|
|
106
|
+
# @return [Float, nil] matchup turnovers
|
|
107
|
+
attribute :matchup_tov, Shale::Type::Float
|
|
108
|
+
|
|
109
|
+
# @!attribute [rw] matchup_blk
|
|
110
|
+
# Returns blocks during matchup
|
|
111
|
+
# @api public
|
|
112
|
+
# @example
|
|
113
|
+
# stat.matchup_blk #=> 0.5
|
|
114
|
+
# @return [Float, nil] matchup blocks
|
|
115
|
+
attribute :matchup_blk, Shale::Type::Float
|
|
116
|
+
|
|
117
|
+
# @!attribute [rw] matchup_fgm
|
|
118
|
+
# Returns field goals made during matchup
|
|
119
|
+
# @api public
|
|
120
|
+
# @example
|
|
121
|
+
# stat.matchup_fgm #=> 6.0
|
|
122
|
+
# @return [Float, nil] matchup field goals made
|
|
123
|
+
attribute :matchup_fgm, Shale::Type::Float
|
|
124
|
+
|
|
125
|
+
# @!attribute [rw] matchup_fga
|
|
126
|
+
# Returns field goals attempted during matchup
|
|
127
|
+
# @api public
|
|
128
|
+
# @example
|
|
129
|
+
# stat.matchup_fga #=> 14.0
|
|
130
|
+
# @return [Float, nil] matchup field goals attempted
|
|
131
|
+
attribute :matchup_fga, Shale::Type::Float
|
|
132
|
+
|
|
133
|
+
# @!attribute [rw] matchup_fg_pct
|
|
134
|
+
# Returns field goal percentage during matchup
|
|
135
|
+
# @api public
|
|
136
|
+
# @example
|
|
137
|
+
# stat.matchup_fg_pct #=> 0.429
|
|
138
|
+
# @return [Float, nil] matchup field goal percentage
|
|
139
|
+
attribute :matchup_fg_pct, Shale::Type::Float
|
|
140
|
+
|
|
141
|
+
# @!attribute [rw] matchup_fg3m
|
|
142
|
+
# Returns three-pointers made during matchup
|
|
143
|
+
# @api public
|
|
144
|
+
# @example
|
|
145
|
+
# stat.matchup_fg3m #=> 2.0
|
|
146
|
+
# @return [Float, nil] matchup three-pointers made
|
|
147
|
+
attribute :matchup_fg3m, Shale::Type::Float
|
|
148
|
+
|
|
149
|
+
# @!attribute [rw] matchup_fg3a
|
|
150
|
+
# Returns three-pointers attempted during matchup
|
|
151
|
+
# @api public
|
|
152
|
+
# @example
|
|
153
|
+
# stat.matchup_fg3a #=> 6.0
|
|
154
|
+
# @return [Float, nil] matchup three-pointers attempted
|
|
155
|
+
attribute :matchup_fg3a, Shale::Type::Float
|
|
156
|
+
|
|
157
|
+
# @!attribute [rw] matchup_fg3_pct
|
|
158
|
+
# Returns three-point percentage during matchup
|
|
159
|
+
# @api public
|
|
160
|
+
# @example
|
|
161
|
+
# stat.matchup_fg3_pct #=> 0.333
|
|
162
|
+
# @return [Float, nil] matchup three-point percentage
|
|
163
|
+
attribute :matchup_fg3_pct, Shale::Type::Float
|
|
164
|
+
|
|
165
|
+
# @!attribute [rw] help_blk
|
|
166
|
+
# Returns help blocks
|
|
167
|
+
# @api public
|
|
168
|
+
# @example
|
|
169
|
+
# stat.help_blk #=> 0.0
|
|
170
|
+
# @return [Float, nil] help blocks
|
|
171
|
+
attribute :help_blk, Shale::Type::Float
|
|
172
|
+
|
|
173
|
+
# @!attribute [rw] help_fgm
|
|
174
|
+
# Returns help field goals made
|
|
175
|
+
# @api public
|
|
176
|
+
# @example
|
|
177
|
+
# stat.help_fgm #=> 1.0
|
|
178
|
+
# @return [Float, nil] help field goals made
|
|
179
|
+
attribute :help_fgm, Shale::Type::Float
|
|
180
|
+
|
|
181
|
+
# @!attribute [rw] help_fga
|
|
182
|
+
# Returns help field goals attempted
|
|
183
|
+
# @api public
|
|
184
|
+
# @example
|
|
185
|
+
# stat.help_fga #=> 2.0
|
|
186
|
+
# @return [Float, nil] help field goals attempted
|
|
187
|
+
attribute :help_fga, Shale::Type::Float
|
|
188
|
+
|
|
189
|
+
# @!attribute [rw] help_fg_pct
|
|
190
|
+
# Returns help field goal percentage
|
|
191
|
+
# @api public
|
|
192
|
+
# @example
|
|
193
|
+
# stat.help_fg_pct #=> 0.500
|
|
194
|
+
# @return [Float, nil] help field goal percentage
|
|
195
|
+
attribute :help_fg_pct, Shale::Type::Float
|
|
196
|
+
|
|
197
|
+
# @!attribute [rw] matchup_ftm
|
|
198
|
+
# Returns free throws made during matchup
|
|
199
|
+
# @api public
|
|
200
|
+
# @example
|
|
201
|
+
# stat.matchup_ftm #=> 4.0
|
|
202
|
+
# @return [Float, nil] matchup free throws made
|
|
203
|
+
attribute :matchup_ftm, Shale::Type::Float
|
|
204
|
+
|
|
205
|
+
# @!attribute [rw] matchup_fta
|
|
206
|
+
# Returns free throws attempted during matchup
|
|
207
|
+
# @api public
|
|
208
|
+
# @example
|
|
209
|
+
# stat.matchup_fta #=> 5.0
|
|
210
|
+
# @return [Float, nil] matchup free throws attempted
|
|
211
|
+
attribute :matchup_fta, Shale::Type::Float
|
|
212
|
+
|
|
213
|
+
# @!attribute [rw] sfl
|
|
214
|
+
# Returns shooting fouls drawn
|
|
215
|
+
# @api public
|
|
216
|
+
# @example
|
|
217
|
+
# stat.sfl #=> 2.0
|
|
218
|
+
# @return [Float, nil] shooting fouls
|
|
219
|
+
attribute :sfl, Shale::Type::Float
|
|
220
|
+
|
|
221
|
+
# Returns the offensive player
|
|
222
|
+
#
|
|
223
|
+
# @api public
|
|
224
|
+
# @example
|
|
225
|
+
# stat.off_player #=> #<NBA::Player id=201939 ...>
|
|
226
|
+
# @return [Player, nil] the offensive player object
|
|
227
|
+
def off_player
|
|
228
|
+
Players.find(off_player_id)
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# Returns the defensive player
|
|
232
|
+
#
|
|
233
|
+
# @api public
|
|
234
|
+
# @example
|
|
235
|
+
# stat.def_player #=> #<NBA::Player id=203507 ...>
|
|
236
|
+
# @return [Player, nil] the defensive player object
|
|
237
|
+
def def_player
|
|
238
|
+
Players.find(def_player_id)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
require_relative "client"
|
|
3
|
+
require_relative "collection"
|
|
4
|
+
require_relative "league_season_matchup_stat"
|
|
5
|
+
require_relative "utils"
|
|
6
|
+
|
|
7
|
+
module NBA
|
|
8
|
+
# Provides methods to retrieve league-wide season matchup statistics
|
|
9
|
+
#
|
|
10
|
+
# @api public
|
|
11
|
+
module LeagueSeasonMatchups
|
|
12
|
+
# Result set name for season matchups
|
|
13
|
+
# @return [String] the result set name
|
|
14
|
+
SEASON_MATCHUPS = "SeasonMatchups".freeze
|
|
15
|
+
|
|
16
|
+
# Regular season type constant
|
|
17
|
+
# @return [String] the season type
|
|
18
|
+
REGULAR_SEASON = "Regular Season".freeze
|
|
19
|
+
|
|
20
|
+
# Playoffs season type constant
|
|
21
|
+
# @return [String] the season type
|
|
22
|
+
PLAYOFFS = "Playoffs".freeze
|
|
23
|
+
|
|
24
|
+
# Per game mode constant
|
|
25
|
+
# @return [String] the per mode
|
|
26
|
+
PER_GAME = "PerGame".freeze
|
|
27
|
+
|
|
28
|
+
# Totals mode constant
|
|
29
|
+
# @return [String] the per mode
|
|
30
|
+
TOTALS = "Totals".freeze
|
|
31
|
+
|
|
32
|
+
# Retrieves all league-wide season matchup statistics
|
|
33
|
+
#
|
|
34
|
+
# @api public
|
|
35
|
+
# @example
|
|
36
|
+
# matchups = NBA::LeagueSeasonMatchups.all(season: 2024)
|
|
37
|
+
# matchups.first.off_player_name #=> "Stephen Curry"
|
|
38
|
+
# @param season [Integer] the season year
|
|
39
|
+
# @param season_type [String] the season type
|
|
40
|
+
# @param per_mode [String] the per mode
|
|
41
|
+
# @param off_player [Integer, #id, nil] offensive player ID or object
|
|
42
|
+
# @param def_player [Integer, #id, nil] defensive player ID or object
|
|
43
|
+
# @param off_team [Integer, #id, nil] offensive team ID or object
|
|
44
|
+
# @param def_team [Integer, #id, nil] defensive team ID or object
|
|
45
|
+
# @param client [Client] the API client to use
|
|
46
|
+
# @return [Collection] a collection of matchup statistics
|
|
47
|
+
def self.all(season: Utils.current_season, season_type: REGULAR_SEASON, per_mode: PER_GAME,
|
|
48
|
+
off_player: nil, def_player: nil, off_team: nil, def_team: nil, client: CLIENT)
|
|
49
|
+
path = build_path(season, season_type: season_type, per_mode: per_mode,
|
|
50
|
+
off_player: off_player, def_player: def_player, off_team: off_team, def_team: def_team)
|
|
51
|
+
response = client.get(path)
|
|
52
|
+
parse_response(response)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Builds the API request path
|
|
56
|
+
#
|
|
57
|
+
# @api private
|
|
58
|
+
# @return [String] the request path
|
|
59
|
+
def self.build_path(season, opts)
|
|
60
|
+
season_str = Utils.format_season(season)
|
|
61
|
+
path = "leagueseasonmatchups?LeagueID=00&Season=#{season_str}" \
|
|
62
|
+
"&SeasonType=#{opts.fetch(:season_type)}&PerMode=#{opts.fetch(:per_mode)}"
|
|
63
|
+
append_optional_params(path, opts)
|
|
64
|
+
end
|
|
65
|
+
private_class_method :build_path
|
|
66
|
+
|
|
67
|
+
# Appends optional parameters to the path
|
|
68
|
+
#
|
|
69
|
+
# @api private
|
|
70
|
+
# @return [String] the path with optional parameters
|
|
71
|
+
def self.append_optional_params(path, opts)
|
|
72
|
+
off_player_id = Utils.extract_id(opts.fetch(:off_player))
|
|
73
|
+
def_player_id = Utils.extract_id(opts.fetch(:def_player))
|
|
74
|
+
off_team_id = Utils.extract_id(opts.fetch(:off_team))
|
|
75
|
+
def_team_id = Utils.extract_id(opts.fetch(:def_team))
|
|
76
|
+
|
|
77
|
+
path += "&OffPlayerID=#{off_player_id}" if off_player_id
|
|
78
|
+
path += "&DefPlayerID=#{def_player_id}" if def_player_id
|
|
79
|
+
path += "&OffTeamID=#{off_team_id}" if off_team_id
|
|
80
|
+
path += "&DefTeamID=#{def_team_id}" if def_team_id
|
|
81
|
+
path
|
|
82
|
+
end
|
|
83
|
+
private_class_method :append_optional_params
|
|
84
|
+
|
|
85
|
+
# Parses the API response into stat objects
|
|
86
|
+
#
|
|
87
|
+
# @api private
|
|
88
|
+
# @return [Collection] collection of matchup stats
|
|
89
|
+
def self.parse_response(response)
|
|
90
|
+
return Collection.new if response.nil? || response.empty?
|
|
91
|
+
|
|
92
|
+
data = JSON.parse(response)
|
|
93
|
+
result_set = find_result_set(data)
|
|
94
|
+
build_stats(result_set)
|
|
95
|
+
end
|
|
96
|
+
private_class_method :parse_response
|
|
97
|
+
|
|
98
|
+
# Finds the result set by name
|
|
99
|
+
#
|
|
100
|
+
# @api private
|
|
101
|
+
# @return [Hash, nil] the result set hash or nil if not found
|
|
102
|
+
def self.find_result_set(data)
|
|
103
|
+
result_sets = data["resultSets"]
|
|
104
|
+
return unless result_sets
|
|
105
|
+
|
|
106
|
+
result_sets.find { |rs| rs["name"].eql?(SEASON_MATCHUPS) }
|
|
107
|
+
end
|
|
108
|
+
private_class_method :find_result_set
|
|
109
|
+
|
|
110
|
+
# Builds stats collection from result set
|
|
111
|
+
#
|
|
112
|
+
# @api private
|
|
113
|
+
# @return [Collection] the stats collection
|
|
114
|
+
def self.build_stats(result_set)
|
|
115
|
+
return Collection.new unless result_set
|
|
116
|
+
|
|
117
|
+
headers = result_set["headers"]
|
|
118
|
+
rows = result_set["rowSet"]
|
|
119
|
+
return Collection.new unless headers && rows
|
|
120
|
+
|
|
121
|
+
Collection.new(rows.map { |row| build_stat(headers.zip(row).to_h) })
|
|
122
|
+
end
|
|
123
|
+
private_class_method :build_stats
|
|
124
|
+
|
|
125
|
+
# Builds a single stat object from API data
|
|
126
|
+
#
|
|
127
|
+
# @api private
|
|
128
|
+
# @return [LeagueSeasonMatchupStat] the stat object
|
|
129
|
+
def self.build_stat(data)
|
|
130
|
+
LeagueSeasonMatchupStat.new(**identity_info(data), **matchup_stats(data), **shooting_stats(data),
|
|
131
|
+
**help_stats(data))
|
|
132
|
+
end
|
|
133
|
+
private_class_method :build_stat
|
|
134
|
+
|
|
135
|
+
# Extracts identity information from data
|
|
136
|
+
#
|
|
137
|
+
# @api private
|
|
138
|
+
# @return [Hash] the identity information hash
|
|
139
|
+
def self.identity_info(data)
|
|
140
|
+
{season_id: data["SEASON_ID"], off_player_id: data["OFF_PLAYER_ID"],
|
|
141
|
+
off_player_name: data["OFF_PLAYER_NAME"], def_player_id: data["DEF_PLAYER_ID"],
|
|
142
|
+
def_player_name: data["DEF_PLAYER_NAME"], gp: data["GP"]}
|
|
143
|
+
end
|
|
144
|
+
private_class_method :identity_info
|
|
145
|
+
|
|
146
|
+
# Extracts matchup statistics from data
|
|
147
|
+
#
|
|
148
|
+
# @api private
|
|
149
|
+
# @return [Hash] the matchup statistics hash
|
|
150
|
+
def self.matchup_stats(data)
|
|
151
|
+
{matchup_min: data["MATCHUP_MIN"], partial_poss: data["PARTIAL_POSS"],
|
|
152
|
+
player_pts: data["PLAYER_PTS"], team_pts: data["TEAM_PTS"],
|
|
153
|
+
matchup_ast: data["MATCHUP_AST"], matchup_tov: data["MATCHUP_TOV"],
|
|
154
|
+
matchup_blk: data["MATCHUP_BLK"]}
|
|
155
|
+
end
|
|
156
|
+
private_class_method :matchup_stats
|
|
157
|
+
|
|
158
|
+
# Extracts shooting statistics from data
|
|
159
|
+
#
|
|
160
|
+
# @api private
|
|
161
|
+
# @return [Hash] the shooting statistics hash
|
|
162
|
+
def self.shooting_stats(data)
|
|
163
|
+
{matchup_fgm: data["MATCHUP_FGM"], matchup_fga: data["MATCHUP_FGA"],
|
|
164
|
+
matchup_fg_pct: data["MATCHUP_FG_PCT"], matchup_fg3m: data["MATCHUP_FG3M"],
|
|
165
|
+
matchup_fg3a: data["MATCHUP_FG3A"], matchup_fg3_pct: data["MATCHUP_FG3_PCT"],
|
|
166
|
+
matchup_ftm: data["MATCHUP_FTM"], matchup_fta: data["MATCHUP_FTA"],
|
|
167
|
+
sfl: data["SFL"]}
|
|
168
|
+
end
|
|
169
|
+
private_class_method :shooting_stats
|
|
170
|
+
|
|
171
|
+
# Extracts help defense statistics from data
|
|
172
|
+
#
|
|
173
|
+
# @api private
|
|
174
|
+
# @return [Hash] the help defense statistics hash
|
|
175
|
+
def self.help_stats(data)
|
|
176
|
+
{help_blk: data["HELP_BLK"], help_fgm: data["HELP_FGM"],
|
|
177
|
+
help_fga: data["HELP_FGA"], help_fg_pct: data["HELP_FG_PERC"]}
|
|
178
|
+
end
|
|
179
|
+
private_class_method :help_stats
|
|
180
|
+
end
|
|
181
|
+
end
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
module NBA
|
|
2
|
+
# Represents a team's standing with extended information
|
|
3
|
+
class LeagueStanding < Shale::Mapper
|
|
4
|
+
include Equalizer.new(:team_id, :season_id)
|
|
5
|
+
|
|
6
|
+
# @!attribute [rw] league_id
|
|
7
|
+
# Returns the league ID
|
|
8
|
+
# @api public
|
|
9
|
+
# @example
|
|
10
|
+
# standing.league_id #=> "00"
|
|
11
|
+
# @return [String] the league ID
|
|
12
|
+
attribute :league_id, Shale::Type::String
|
|
13
|
+
|
|
14
|
+
# @!attribute [rw] season_id
|
|
15
|
+
# Returns the season ID
|
|
16
|
+
# @api public
|
|
17
|
+
# @example
|
|
18
|
+
# standing.season_id #=> "22024"
|
|
19
|
+
# @return [String] the season ID
|
|
20
|
+
attribute :season_id, Shale::Type::String
|
|
21
|
+
|
|
22
|
+
# @!attribute [rw] team_id
|
|
23
|
+
# Returns the team ID
|
|
24
|
+
# @api public
|
|
25
|
+
# @example
|
|
26
|
+
# standing.team_id #=> 1610612744
|
|
27
|
+
# @return [Integer] the team ID
|
|
28
|
+
attribute :team_id, Shale::Type::Integer
|
|
29
|
+
|
|
30
|
+
# @!attribute [rw] team_city
|
|
31
|
+
# Returns the team city
|
|
32
|
+
# @api public
|
|
33
|
+
# @example
|
|
34
|
+
# standing.team_city #=> "Golden State"
|
|
35
|
+
# @return [String] the team city
|
|
36
|
+
attribute :team_city, Shale::Type::String
|
|
37
|
+
|
|
38
|
+
# @!attribute [rw] team_name
|
|
39
|
+
# Returns the team name
|
|
40
|
+
# @api public
|
|
41
|
+
# @example
|
|
42
|
+
# standing.team_name #=> "Warriors"
|
|
43
|
+
# @return [String] the team name
|
|
44
|
+
attribute :team_name, Shale::Type::String
|
|
45
|
+
|
|
46
|
+
# @!attribute [rw] team_slug
|
|
47
|
+
# Returns the team slug
|
|
48
|
+
# @api public
|
|
49
|
+
# @example
|
|
50
|
+
# standing.team_slug #=> "warriors"
|
|
51
|
+
# @return [String] the team slug
|
|
52
|
+
attribute :team_slug, Shale::Type::String
|
|
53
|
+
|
|
54
|
+
# @!attribute [rw] conference
|
|
55
|
+
# Returns the conference
|
|
56
|
+
# @api public
|
|
57
|
+
# @example
|
|
58
|
+
# standing.conference #=> "West"
|
|
59
|
+
# @return [String] the conference
|
|
60
|
+
attribute :conference, Shale::Type::String
|
|
61
|
+
|
|
62
|
+
# @!attribute [rw] conference_record
|
|
63
|
+
# Returns the conference record
|
|
64
|
+
# @api public
|
|
65
|
+
# @example
|
|
66
|
+
# standing.conference_record #=> "30-22"
|
|
67
|
+
# @return [String] the conference record
|
|
68
|
+
attribute :conference_record, Shale::Type::String
|
|
69
|
+
|
|
70
|
+
# @!attribute [rw] playoff_rank
|
|
71
|
+
# Returns the playoff rank
|
|
72
|
+
# @api public
|
|
73
|
+
# @example
|
|
74
|
+
# standing.playoff_rank #=> 10
|
|
75
|
+
# @return [Integer] the playoff rank
|
|
76
|
+
attribute :playoff_rank, Shale::Type::Integer
|
|
77
|
+
|
|
78
|
+
# @!attribute [rw] clinch_indicator
|
|
79
|
+
# Returns the clinch indicator
|
|
80
|
+
# @api public
|
|
81
|
+
# @example
|
|
82
|
+
# standing.clinch_indicator #=> "x"
|
|
83
|
+
# @return [String] the clinch indicator
|
|
84
|
+
attribute :clinch_indicator, Shale::Type::String
|
|
85
|
+
|
|
86
|
+
# @!attribute [rw] division
|
|
87
|
+
# Returns the division
|
|
88
|
+
# @api public
|
|
89
|
+
# @example
|
|
90
|
+
# standing.division #=> "Pacific"
|
|
91
|
+
# @return [String] the division
|
|
92
|
+
attribute :division, Shale::Type::String
|
|
93
|
+
|
|
94
|
+
# @!attribute [rw] division_record
|
|
95
|
+
# Returns the division record
|
|
96
|
+
# @api public
|
|
97
|
+
# @example
|
|
98
|
+
# standing.division_record #=> "8-8"
|
|
99
|
+
# @return [String] the division record
|
|
100
|
+
attribute :division_record, Shale::Type::String
|
|
101
|
+
|
|
102
|
+
# @!attribute [rw] division_rank
|
|
103
|
+
# Returns the division rank
|
|
104
|
+
# @api public
|
|
105
|
+
# @example
|
|
106
|
+
# standing.division_rank #=> 3
|
|
107
|
+
# @return [Integer] the division rank
|
|
108
|
+
attribute :division_rank, Shale::Type::Integer
|
|
109
|
+
|
|
110
|
+
# @!attribute [rw] wins
|
|
111
|
+
# Returns the number of wins
|
|
112
|
+
# @api public
|
|
113
|
+
# @example
|
|
114
|
+
# standing.wins #=> 46
|
|
115
|
+
# @return [Integer] the wins
|
|
116
|
+
attribute :wins, Shale::Type::Integer
|
|
117
|
+
|
|
118
|
+
# @!attribute [rw] losses
|
|
119
|
+
# Returns the number of losses
|
|
120
|
+
# @api public
|
|
121
|
+
# @example
|
|
122
|
+
# standing.losses #=> 36
|
|
123
|
+
# @return [Integer] the losses
|
|
124
|
+
attribute :losses, Shale::Type::Integer
|
|
125
|
+
|
|
126
|
+
# @!attribute [rw] win_pct
|
|
127
|
+
# Returns the win percentage
|
|
128
|
+
# @api public
|
|
129
|
+
# @example
|
|
130
|
+
# standing.win_pct #=> 0.561
|
|
131
|
+
# @return [Float] the win percentage
|
|
132
|
+
attribute :win_pct, Shale::Type::Float
|
|
133
|
+
|
|
134
|
+
# @!attribute [rw] league_rank
|
|
135
|
+
# Returns the league rank
|
|
136
|
+
# @api public
|
|
137
|
+
# @example
|
|
138
|
+
# standing.league_rank #=> 15
|
|
139
|
+
# @return [Integer] the league rank
|
|
140
|
+
attribute :league_rank, Shale::Type::Integer
|
|
141
|
+
|
|
142
|
+
# @!attribute [rw] record
|
|
143
|
+
# Returns the full record string
|
|
144
|
+
# @api public
|
|
145
|
+
# @example
|
|
146
|
+
# standing.record #=> "46-36"
|
|
147
|
+
# @return [String] the record
|
|
148
|
+
attribute :record, Shale::Type::String
|
|
149
|
+
|
|
150
|
+
# @!attribute [rw] home_record
|
|
151
|
+
# Returns the home record
|
|
152
|
+
# @api public
|
|
153
|
+
# @example
|
|
154
|
+
# standing.home_record #=> "28-13"
|
|
155
|
+
# @return [String] the home record
|
|
156
|
+
attribute :home_record, Shale::Type::String
|
|
157
|
+
|
|
158
|
+
# @!attribute [rw] road_record
|
|
159
|
+
# Returns the road record
|
|
160
|
+
# @api public
|
|
161
|
+
# @example
|
|
162
|
+
# standing.road_record #=> "18-23"
|
|
163
|
+
# @return [String] the road record
|
|
164
|
+
attribute :road_record, Shale::Type::String
|
|
165
|
+
|
|
166
|
+
# @!attribute [rw] l10_record
|
|
167
|
+
# Returns the last 10 games record
|
|
168
|
+
# @api public
|
|
169
|
+
# @example
|
|
170
|
+
# standing.l10_record #=> "6-4"
|
|
171
|
+
# @return [String] the L10 record
|
|
172
|
+
attribute :l10_record, Shale::Type::String
|
|
173
|
+
|
|
174
|
+
# @!attribute [rw] long_win_streak
|
|
175
|
+
# Returns the longest win streak
|
|
176
|
+
# @api public
|
|
177
|
+
# @example
|
|
178
|
+
# standing.long_win_streak #=> 7
|
|
179
|
+
# @return [Integer] the longest win streak
|
|
180
|
+
attribute :long_win_streak, Shale::Type::Integer
|
|
181
|
+
|
|
182
|
+
# @!attribute [rw] long_loss_streak
|
|
183
|
+
# Returns the longest loss streak
|
|
184
|
+
# @api public
|
|
185
|
+
# @example
|
|
186
|
+
# standing.long_loss_streak #=> 4
|
|
187
|
+
# @return [Integer] the longest loss streak
|
|
188
|
+
attribute :long_loss_streak, Shale::Type::Integer
|
|
189
|
+
|
|
190
|
+
# @!attribute [rw] current_streak
|
|
191
|
+
# Returns the current streak
|
|
192
|
+
# @api public
|
|
193
|
+
# @example
|
|
194
|
+
# standing.current_streak #=> "W 2"
|
|
195
|
+
# @return [String] the current streak
|
|
196
|
+
attribute :current_streak, Shale::Type::String
|
|
197
|
+
|
|
198
|
+
# @!attribute [rw] conference_games_back
|
|
199
|
+
# Returns games back in the conference
|
|
200
|
+
# @api public
|
|
201
|
+
# @example
|
|
202
|
+
# standing.conference_games_back #=> 12.0
|
|
203
|
+
# @return [Float] the games back
|
|
204
|
+
attribute :conference_games_back, Shale::Type::Float
|
|
205
|
+
|
|
206
|
+
# @!attribute [rw] clinched_conference_title
|
|
207
|
+
# Returns if team clinched conference title
|
|
208
|
+
# @api public
|
|
209
|
+
# @example
|
|
210
|
+
# standing.clinched_conference_title #=> 0
|
|
211
|
+
# @return [Integer] 1 if clinched, 0 otherwise
|
|
212
|
+
attribute :clinched_conference_title, Shale::Type::Integer
|
|
213
|
+
|
|
214
|
+
# @!attribute [rw] clinched_playoff_birth
|
|
215
|
+
# Returns if team clinched playoff berth
|
|
216
|
+
# @api public
|
|
217
|
+
# @example
|
|
218
|
+
# standing.clinched_playoff_birth #=> 1
|
|
219
|
+
# @return [Integer] 1 if clinched, 0 otherwise
|
|
220
|
+
attribute :clinched_playoff_birth, Shale::Type::Integer
|
|
221
|
+
|
|
222
|
+
# @!attribute [rw] eliminated_conference
|
|
223
|
+
# Returns if team is eliminated from conference
|
|
224
|
+
# @api public
|
|
225
|
+
# @example
|
|
226
|
+
# standing.eliminated_conference #=> 0
|
|
227
|
+
# @return [Integer] 1 if eliminated, 0 otherwise
|
|
228
|
+
attribute :eliminated_conference, Shale::Type::Integer
|
|
229
|
+
|
|
230
|
+
# @!attribute [rw] points_pg
|
|
231
|
+
# Returns points per game
|
|
232
|
+
# @api public
|
|
233
|
+
# @example
|
|
234
|
+
# standing.points_pg #=> 118.7
|
|
235
|
+
# @return [Float] the points per game
|
|
236
|
+
attribute :points_pg, Shale::Type::Float
|
|
237
|
+
|
|
238
|
+
# @!attribute [rw] opp_points_pg
|
|
239
|
+
# Returns opponent points per game
|
|
240
|
+
# @api public
|
|
241
|
+
# @example
|
|
242
|
+
# standing.opp_points_pg #=> 117.2
|
|
243
|
+
# @return [Float] the opponent points per game
|
|
244
|
+
attribute :opp_points_pg, Shale::Type::Float
|
|
245
|
+
|
|
246
|
+
# @!attribute [rw] diff_points_pg
|
|
247
|
+
# Returns point differential per game
|
|
248
|
+
# @api public
|
|
249
|
+
# @example
|
|
250
|
+
# standing.diff_points_pg #=> 1.5
|
|
251
|
+
# @return [Float] the point differential
|
|
252
|
+
attribute :diff_points_pg, Shale::Type::Float
|
|
253
|
+
|
|
254
|
+
# Returns the team object
|
|
255
|
+
#
|
|
256
|
+
# @api public
|
|
257
|
+
# @example
|
|
258
|
+
# standing.team #=> #<NBA::Team>
|
|
259
|
+
# @return [Team, nil] the team object
|
|
260
|
+
def team
|
|
261
|
+
Teams.find(team_id)
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
# Returns the full team name
|
|
265
|
+
#
|
|
266
|
+
# @api public
|
|
267
|
+
# @example
|
|
268
|
+
# standing.full_name #=> "Golden State Warriors"
|
|
269
|
+
# @return [String] the full name
|
|
270
|
+
def full_name
|
|
271
|
+
"#{team_city} #{team_name}".strip
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
# Returns whether the team made the playoffs
|
|
275
|
+
#
|
|
276
|
+
# @api public
|
|
277
|
+
# @example
|
|
278
|
+
# standing.playoffs? #=> true
|
|
279
|
+
# @return [Boolean] true if in playoffs
|
|
280
|
+
def playoffs?
|
|
281
|
+
clinched_playoff_birth.eql?(1)
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|