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,266 @@
|
|
|
1
|
+
module NBA
|
|
2
|
+
# Represents a player from the player index endpoint
|
|
3
|
+
#
|
|
4
|
+
# @api public
|
|
5
|
+
class PlayerIndexEntry < Shale::Mapper
|
|
6
|
+
include Equalizer.new(:id)
|
|
7
|
+
|
|
8
|
+
# @!attribute [rw] id
|
|
9
|
+
# Returns the player ID
|
|
10
|
+
# @api public
|
|
11
|
+
# @example
|
|
12
|
+
# entry.id #=> 201939
|
|
13
|
+
# @return [Integer] the player ID
|
|
14
|
+
attribute :id, Shale::Type::Integer
|
|
15
|
+
|
|
16
|
+
# @!attribute [rw] last_name
|
|
17
|
+
# Returns the player's last name
|
|
18
|
+
# @api public
|
|
19
|
+
# @example
|
|
20
|
+
# entry.last_name #=> "Curry"
|
|
21
|
+
# @return [String] the last name
|
|
22
|
+
attribute :last_name, Shale::Type::String
|
|
23
|
+
|
|
24
|
+
# @!attribute [rw] first_name
|
|
25
|
+
# Returns the player's first name
|
|
26
|
+
# @api public
|
|
27
|
+
# @example
|
|
28
|
+
# entry.first_name #=> "Stephen"
|
|
29
|
+
# @return [String] the first name
|
|
30
|
+
attribute :first_name, Shale::Type::String
|
|
31
|
+
|
|
32
|
+
# @!attribute [rw] slug
|
|
33
|
+
# Returns the player's URL slug
|
|
34
|
+
# @api public
|
|
35
|
+
# @example
|
|
36
|
+
# entry.slug #=> "stephen-curry"
|
|
37
|
+
# @return [String] the slug
|
|
38
|
+
attribute :slug, Shale::Type::String
|
|
39
|
+
|
|
40
|
+
# @!attribute [rw] team_id
|
|
41
|
+
# Returns the team ID
|
|
42
|
+
# @api public
|
|
43
|
+
# @example
|
|
44
|
+
# entry.team_id #=> 1610612744
|
|
45
|
+
# @return [Integer] the team ID
|
|
46
|
+
attribute :team_id, Shale::Type::Integer
|
|
47
|
+
|
|
48
|
+
# @!attribute [rw] team_slug
|
|
49
|
+
# Returns the team's URL slug
|
|
50
|
+
# @api public
|
|
51
|
+
# @example
|
|
52
|
+
# entry.team_slug #=> "warriors"
|
|
53
|
+
# @return [String] the team slug
|
|
54
|
+
attribute :team_slug, Shale::Type::String
|
|
55
|
+
|
|
56
|
+
# @!attribute [rw] team_city
|
|
57
|
+
# Returns the team's city
|
|
58
|
+
# @api public
|
|
59
|
+
# @example
|
|
60
|
+
# entry.team_city #=> "Golden State"
|
|
61
|
+
# @return [String] the team city
|
|
62
|
+
attribute :team_city, Shale::Type::String
|
|
63
|
+
|
|
64
|
+
# @!attribute [rw] team_name
|
|
65
|
+
# Returns the team's name
|
|
66
|
+
# @api public
|
|
67
|
+
# @example
|
|
68
|
+
# entry.team_name #=> "Warriors"
|
|
69
|
+
# @return [String] the team name
|
|
70
|
+
attribute :team_name, Shale::Type::String
|
|
71
|
+
|
|
72
|
+
# @!attribute [rw] team_abbreviation
|
|
73
|
+
# Returns the team's abbreviation
|
|
74
|
+
# @api public
|
|
75
|
+
# @example
|
|
76
|
+
# entry.team_abbreviation #=> "GSW"
|
|
77
|
+
# @return [String] the team abbreviation
|
|
78
|
+
attribute :team_abbreviation, Shale::Type::String
|
|
79
|
+
|
|
80
|
+
# @!attribute [rw] jersey_number
|
|
81
|
+
# Returns the player's jersey number
|
|
82
|
+
# @api public
|
|
83
|
+
# @example
|
|
84
|
+
# entry.jersey_number #=> "30"
|
|
85
|
+
# @return [String] the jersey number
|
|
86
|
+
attribute :jersey_number, Shale::Type::String
|
|
87
|
+
|
|
88
|
+
# @!attribute [rw] position
|
|
89
|
+
# Returns the player's position
|
|
90
|
+
# @api public
|
|
91
|
+
# @example
|
|
92
|
+
# entry.position #=> "G"
|
|
93
|
+
# @return [String] the position
|
|
94
|
+
attribute :position, Shale::Type::String
|
|
95
|
+
|
|
96
|
+
# @!attribute [rw] height
|
|
97
|
+
# Returns the player's height
|
|
98
|
+
# @api public
|
|
99
|
+
# @example
|
|
100
|
+
# entry.height #=> "6-2"
|
|
101
|
+
# @return [String] the height
|
|
102
|
+
attribute :height, Shale::Type::String
|
|
103
|
+
|
|
104
|
+
# @!attribute [rw] weight
|
|
105
|
+
# Returns the player's weight in pounds
|
|
106
|
+
# @api public
|
|
107
|
+
# @example
|
|
108
|
+
# entry.weight #=> 185
|
|
109
|
+
# @return [Integer] the weight
|
|
110
|
+
attribute :weight, Shale::Type::Integer
|
|
111
|
+
|
|
112
|
+
# @!attribute [rw] college
|
|
113
|
+
# Returns the player's college
|
|
114
|
+
# @api public
|
|
115
|
+
# @example
|
|
116
|
+
# entry.college #=> "Davidson"
|
|
117
|
+
# @return [String] the college
|
|
118
|
+
attribute :college, Shale::Type::String
|
|
119
|
+
|
|
120
|
+
# @!attribute [rw] country
|
|
121
|
+
# Returns the player's country
|
|
122
|
+
# @api public
|
|
123
|
+
# @example
|
|
124
|
+
# entry.country #=> "USA"
|
|
125
|
+
# @return [String] the country
|
|
126
|
+
attribute :country, Shale::Type::String
|
|
127
|
+
|
|
128
|
+
# @!attribute [rw] draft_year
|
|
129
|
+
# Returns the player's draft year
|
|
130
|
+
# @api public
|
|
131
|
+
# @example
|
|
132
|
+
# entry.draft_year #=> 2009
|
|
133
|
+
# @return [Integer] the draft year
|
|
134
|
+
attribute :draft_year, Shale::Type::Integer
|
|
135
|
+
|
|
136
|
+
# @!attribute [rw] draft_round
|
|
137
|
+
# Returns the player's draft round
|
|
138
|
+
# @api public
|
|
139
|
+
# @example
|
|
140
|
+
# entry.draft_round #=> 1
|
|
141
|
+
# @return [Integer] the draft round
|
|
142
|
+
attribute :draft_round, Shale::Type::Integer
|
|
143
|
+
|
|
144
|
+
# @!attribute [rw] draft_number
|
|
145
|
+
# Returns the player's draft pick number
|
|
146
|
+
# @api public
|
|
147
|
+
# @example
|
|
148
|
+
# entry.draft_number #=> 7
|
|
149
|
+
# @return [Integer] the draft number
|
|
150
|
+
attribute :draft_number, Shale::Type::Integer
|
|
151
|
+
|
|
152
|
+
# @!attribute [rw] roster_status
|
|
153
|
+
# Returns the player's roster status
|
|
154
|
+
# @api public
|
|
155
|
+
# @example
|
|
156
|
+
# entry.roster_status #=> 1
|
|
157
|
+
# @return [Integer] the roster status
|
|
158
|
+
attribute :roster_status, Shale::Type::Integer
|
|
159
|
+
|
|
160
|
+
# @!attribute [rw] pts
|
|
161
|
+
# Returns career points per game
|
|
162
|
+
# @api public
|
|
163
|
+
# @example
|
|
164
|
+
# entry.pts #=> 24.8
|
|
165
|
+
# @return [Float] points per game
|
|
166
|
+
attribute :pts, Shale::Type::Float
|
|
167
|
+
|
|
168
|
+
# @!attribute [rw] reb
|
|
169
|
+
# Returns career rebounds per game
|
|
170
|
+
# @api public
|
|
171
|
+
# @example
|
|
172
|
+
# entry.reb #=> 4.7
|
|
173
|
+
# @return [Float] rebounds per game
|
|
174
|
+
attribute :reb, Shale::Type::Float
|
|
175
|
+
|
|
176
|
+
# @!attribute [rw] ast
|
|
177
|
+
# Returns career assists per game
|
|
178
|
+
# @api public
|
|
179
|
+
# @example
|
|
180
|
+
# entry.ast #=> 6.5
|
|
181
|
+
# @return [Float] assists per game
|
|
182
|
+
attribute :ast, Shale::Type::Float
|
|
183
|
+
|
|
184
|
+
# @!attribute [rw] stats_timeframe
|
|
185
|
+
# Returns the stats timeframe
|
|
186
|
+
# @api public
|
|
187
|
+
# @example
|
|
188
|
+
# entry.stats_timeframe #=> "Season"
|
|
189
|
+
# @return [String] the stats timeframe
|
|
190
|
+
attribute :stats_timeframe, Shale::Type::String
|
|
191
|
+
|
|
192
|
+
# @!attribute [rw] from_year
|
|
193
|
+
# Returns the first year played
|
|
194
|
+
# @api public
|
|
195
|
+
# @example
|
|
196
|
+
# entry.from_year #=> 2009
|
|
197
|
+
# @return [Integer] the first year
|
|
198
|
+
attribute :from_year, Shale::Type::Integer
|
|
199
|
+
|
|
200
|
+
# @!attribute [rw] to_year
|
|
201
|
+
# Returns the last year played
|
|
202
|
+
# @api public
|
|
203
|
+
# @example
|
|
204
|
+
# entry.to_year #=> 2024
|
|
205
|
+
# @return [Integer] the last year
|
|
206
|
+
attribute :to_year, Shale::Type::Integer
|
|
207
|
+
|
|
208
|
+
# @!attribute [rw] is_defunct
|
|
209
|
+
# Returns whether the player's team is defunct
|
|
210
|
+
# @api public
|
|
211
|
+
# @example
|
|
212
|
+
# entry.is_defunct #=> 0
|
|
213
|
+
# @return [Integer] defunct flag (0 or 1)
|
|
214
|
+
attribute :is_defunct, Shale::Type::Integer
|
|
215
|
+
|
|
216
|
+
# Returns the player's full name
|
|
217
|
+
#
|
|
218
|
+
# @api public
|
|
219
|
+
# @example
|
|
220
|
+
# entry.full_name #=> "Stephen Curry"
|
|
221
|
+
# @return [String] the full name
|
|
222
|
+
def full_name
|
|
223
|
+
"#{first_name} #{last_name}".strip
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Returns whether the player is currently on a roster
|
|
227
|
+
#
|
|
228
|
+
# @api public
|
|
229
|
+
# @example
|
|
230
|
+
# entry.active? #=> true
|
|
231
|
+
# @return [Boolean] true if on a roster
|
|
232
|
+
def active?
|
|
233
|
+
roster_status.eql?(1)
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
# Returns whether the player's team is defunct
|
|
237
|
+
#
|
|
238
|
+
# @api public
|
|
239
|
+
# @example
|
|
240
|
+
# entry.defunct? #=> false
|
|
241
|
+
# @return [Boolean] true if team is defunct
|
|
242
|
+
def defunct?
|
|
243
|
+
is_defunct.eql?(1)
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Returns the player object
|
|
247
|
+
#
|
|
248
|
+
# @api public
|
|
249
|
+
# @example
|
|
250
|
+
# entry.player #=> #<NBA::Player>
|
|
251
|
+
# @return [Player, nil] the player object
|
|
252
|
+
def player
|
|
253
|
+
Players.find(id)
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# Returns the team object
|
|
257
|
+
#
|
|
258
|
+
# @api public
|
|
259
|
+
# @example
|
|
260
|
+
# entry.team #=> #<NBA::Team>
|
|
261
|
+
# @return [Team, nil] the team object
|
|
262
|
+
def team
|
|
263
|
+
Teams.find(team_id)
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
|
|
4
|
+
module NBA
|
|
5
|
+
# Represents detailed player biographical information
|
|
6
|
+
class PlayerInfo < Shale::Mapper
|
|
7
|
+
include Equalizer.new(:player_id)
|
|
8
|
+
|
|
9
|
+
# @!attribute [rw] player_id
|
|
10
|
+
# Returns the player ID
|
|
11
|
+
# @api public
|
|
12
|
+
# @example
|
|
13
|
+
# info.player_id #=> 201939
|
|
14
|
+
# @return [Integer] the player ID
|
|
15
|
+
attribute :player_id, Shale::Type::Integer
|
|
16
|
+
|
|
17
|
+
# @!attribute [rw] first_name
|
|
18
|
+
# Returns the player's first name
|
|
19
|
+
# @api public
|
|
20
|
+
# @example
|
|
21
|
+
# info.first_name #=> "Stephen"
|
|
22
|
+
# @return [String] the player's first name
|
|
23
|
+
attribute :first_name, Shale::Type::String
|
|
24
|
+
|
|
25
|
+
# @!attribute [rw] last_name
|
|
26
|
+
# Returns the player's last name
|
|
27
|
+
# @api public
|
|
28
|
+
# @example
|
|
29
|
+
# info.last_name #=> "Curry"
|
|
30
|
+
# @return [String] the player's last name
|
|
31
|
+
attribute :last_name, Shale::Type::String
|
|
32
|
+
|
|
33
|
+
# @!attribute [rw] display_name
|
|
34
|
+
# Returns the player's display name
|
|
35
|
+
# @api public
|
|
36
|
+
# @example
|
|
37
|
+
# info.display_name #=> "Stephen Curry"
|
|
38
|
+
# @return [String] the player's display name
|
|
39
|
+
attribute :display_name, Shale::Type::String
|
|
40
|
+
|
|
41
|
+
# @!attribute [rw] birthdate
|
|
42
|
+
# Returns the player's birthdate
|
|
43
|
+
# @api public
|
|
44
|
+
# @example
|
|
45
|
+
# info.birthdate #=> "1988-03-14"
|
|
46
|
+
# @return [String] the player's birthdate
|
|
47
|
+
attribute :birthdate, Shale::Type::String
|
|
48
|
+
|
|
49
|
+
# @!attribute [rw] school
|
|
50
|
+
# Returns the player's school
|
|
51
|
+
# @api public
|
|
52
|
+
# @example
|
|
53
|
+
# info.school #=> "Davidson"
|
|
54
|
+
# @return [String] the player's school
|
|
55
|
+
attribute :school, Shale::Type::String
|
|
56
|
+
|
|
57
|
+
# @!attribute [rw] country
|
|
58
|
+
# Returns the player's country
|
|
59
|
+
# @api public
|
|
60
|
+
# @example
|
|
61
|
+
# info.country #=> "USA"
|
|
62
|
+
# @return [String] the player's country
|
|
63
|
+
attribute :country, Shale::Type::String
|
|
64
|
+
|
|
65
|
+
# @!attribute [rw] height
|
|
66
|
+
# Returns the player's height
|
|
67
|
+
# @api public
|
|
68
|
+
# @example
|
|
69
|
+
# info.height #=> "6-2"
|
|
70
|
+
# @return [String] the player's height
|
|
71
|
+
attribute :height, Shale::Type::String
|
|
72
|
+
|
|
73
|
+
# @!attribute [rw] weight
|
|
74
|
+
# Returns the player's weight in pounds
|
|
75
|
+
# @api public
|
|
76
|
+
# @example
|
|
77
|
+
# info.weight #=> 185
|
|
78
|
+
# @return [Integer] the player's weight
|
|
79
|
+
attribute :weight, Shale::Type::Integer
|
|
80
|
+
|
|
81
|
+
# @!attribute [rw] season_exp
|
|
82
|
+
# Returns the player's years of experience
|
|
83
|
+
# @api public
|
|
84
|
+
# @example
|
|
85
|
+
# info.season_exp #=> 15
|
|
86
|
+
# @return [Integer] years of experience
|
|
87
|
+
attribute :season_exp, Shale::Type::Integer
|
|
88
|
+
|
|
89
|
+
# @!attribute [rw] jersey
|
|
90
|
+
# Returns the player's jersey number
|
|
91
|
+
# @api public
|
|
92
|
+
# @example
|
|
93
|
+
# info.jersey #=> "30"
|
|
94
|
+
# @return [String] the jersey number
|
|
95
|
+
attribute :jersey, Shale::Type::String
|
|
96
|
+
|
|
97
|
+
# @!attribute [rw] position
|
|
98
|
+
# Returns the player's position
|
|
99
|
+
# @api public
|
|
100
|
+
# @example
|
|
101
|
+
# info.position #=> "Guard"
|
|
102
|
+
# @return [String] the player's position
|
|
103
|
+
attribute :position, Shale::Type::String
|
|
104
|
+
|
|
105
|
+
# @!attribute [rw] team_id
|
|
106
|
+
# Returns the player's team ID
|
|
107
|
+
# @api public
|
|
108
|
+
# @example
|
|
109
|
+
# info.team_id #=> 1610612744
|
|
110
|
+
# @return [Integer] the team ID
|
|
111
|
+
attribute :team_id, Shale::Type::Integer
|
|
112
|
+
|
|
113
|
+
# @!attribute [rw] team_name
|
|
114
|
+
# Returns the player's team name
|
|
115
|
+
# @api public
|
|
116
|
+
# @example
|
|
117
|
+
# info.team_name #=> "Warriors"
|
|
118
|
+
# @return [String] the team name
|
|
119
|
+
attribute :team_name, Shale::Type::String
|
|
120
|
+
|
|
121
|
+
# @!attribute [rw] team_abbreviation
|
|
122
|
+
# Returns the player's team abbreviation
|
|
123
|
+
# @api public
|
|
124
|
+
# @example
|
|
125
|
+
# info.team_abbreviation #=> "GSW"
|
|
126
|
+
# @return [String] the team abbreviation
|
|
127
|
+
attribute :team_abbreviation, Shale::Type::String
|
|
128
|
+
|
|
129
|
+
# @!attribute [rw] team_city
|
|
130
|
+
# Returns the player's team city
|
|
131
|
+
# @api public
|
|
132
|
+
# @example
|
|
133
|
+
# info.team_city #=> "Golden State"
|
|
134
|
+
# @return [String] the team city
|
|
135
|
+
attribute :team_city, Shale::Type::String
|
|
136
|
+
|
|
137
|
+
# @!attribute [rw] draft_year
|
|
138
|
+
# Returns the year the player was drafted
|
|
139
|
+
# @api public
|
|
140
|
+
# @example
|
|
141
|
+
# info.draft_year #=> 2009
|
|
142
|
+
# @return [Integer] the draft year
|
|
143
|
+
attribute :draft_year, Shale::Type::Integer
|
|
144
|
+
|
|
145
|
+
# @!attribute [rw] draft_round
|
|
146
|
+
# Returns the round the player was drafted
|
|
147
|
+
# @api public
|
|
148
|
+
# @example
|
|
149
|
+
# info.draft_round #=> 1
|
|
150
|
+
# @return [Integer] the draft round
|
|
151
|
+
attribute :draft_round, Shale::Type::Integer
|
|
152
|
+
|
|
153
|
+
# @!attribute [rw] draft_number
|
|
154
|
+
# Returns the pick number
|
|
155
|
+
# @api public
|
|
156
|
+
# @example
|
|
157
|
+
# info.draft_number #=> 7
|
|
158
|
+
# @return [Integer] the draft number
|
|
159
|
+
attribute :draft_number, Shale::Type::Integer
|
|
160
|
+
|
|
161
|
+
# @!attribute [rw] from_year
|
|
162
|
+
# Returns the player's first NBA year
|
|
163
|
+
# @api public
|
|
164
|
+
# @example
|
|
165
|
+
# info.from_year #=> 2009
|
|
166
|
+
# @return [Integer] the first year
|
|
167
|
+
attribute :from_year, Shale::Type::Integer
|
|
168
|
+
|
|
169
|
+
# @!attribute [rw] to_year
|
|
170
|
+
# Returns the player's most recent NBA year
|
|
171
|
+
# @api public
|
|
172
|
+
# @example
|
|
173
|
+
# info.to_year #=> 2024
|
|
174
|
+
# @return [Integer] the most recent year
|
|
175
|
+
attribute :to_year, Shale::Type::Integer
|
|
176
|
+
|
|
177
|
+
# @!attribute [rw] greatest_75_flag
|
|
178
|
+
# Returns whether the player is in the NBA 75 greatest
|
|
179
|
+
# @api public
|
|
180
|
+
# @example
|
|
181
|
+
# info.greatest_75_flag #=> "Y"
|
|
182
|
+
# @return [String] Y or N
|
|
183
|
+
attribute :greatest_75_flag, Shale::Type::String
|
|
184
|
+
|
|
185
|
+
# Returns the player object
|
|
186
|
+
#
|
|
187
|
+
# @api public
|
|
188
|
+
# @example
|
|
189
|
+
# info.player #=> #<NBA::Player>
|
|
190
|
+
# @return [Player, nil] the player object
|
|
191
|
+
def player
|
|
192
|
+
Players.find(player_id)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Returns the team object
|
|
196
|
+
#
|
|
197
|
+
# @api public
|
|
198
|
+
# @example
|
|
199
|
+
# info.team #=> #<NBA::Team>
|
|
200
|
+
# @return [Team, nil] the team object
|
|
201
|
+
def team
|
|
202
|
+
Teams.find(team_id)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# Returns the player's full name
|
|
206
|
+
#
|
|
207
|
+
# @api public
|
|
208
|
+
# @example
|
|
209
|
+
# info.full_name #=> "Stephen Curry"
|
|
210
|
+
# @return [String] the full name
|
|
211
|
+
def full_name
|
|
212
|
+
display_name || "#{first_name} #{last_name}".strip
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
# Returns whether the player is in the NBA 75 greatest
|
|
216
|
+
#
|
|
217
|
+
# @api public
|
|
218
|
+
# @example
|
|
219
|
+
# info.greatest_75? #=> true
|
|
220
|
+
# @return [Boolean] true if in NBA 75
|
|
221
|
+
def greatest_75?
|
|
222
|
+
greatest_75_flag.eql?("Y")
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require_relative "client"
|
|
2
|
+
require_relative "response_parser"
|
|
3
|
+
require_relative "upcoming_game"
|
|
4
|
+
require_relative "utils"
|
|
5
|
+
|
|
6
|
+
module NBA
|
|
7
|
+
# Provides methods to retrieve a player's upcoming games
|
|
8
|
+
#
|
|
9
|
+
# @api public
|
|
10
|
+
module PlayerNextNGames
|
|
11
|
+
# Result set name
|
|
12
|
+
# @return [String] the result set name
|
|
13
|
+
RESULT_SET_NAME = "NextNGames".freeze
|
|
14
|
+
|
|
15
|
+
# Retrieves upcoming games for a player
|
|
16
|
+
#
|
|
17
|
+
# @api public
|
|
18
|
+
# @example
|
|
19
|
+
# games = NBA::PlayerNextNGames.find(player: 201939, number_of_games: 5)
|
|
20
|
+
# games.each { |g| puts "#{g.game_date}: vs #{g.visitor_team_name}" }
|
|
21
|
+
# @param player [Integer, Player] the player ID or Player object
|
|
22
|
+
# @param number_of_games [Integer] the number of games to return
|
|
23
|
+
# @param client [Client] the API client to use
|
|
24
|
+
# @return [Collection] a collection of upcoming games
|
|
25
|
+
def self.find(player:, number_of_games: 5, client: CLIENT)
|
|
26
|
+
id = Utils.extract_id(player)
|
|
27
|
+
path = "playernextngames?PlayerID=#{id}&NumberOfGames=#{number_of_games}&LeagueID=00"
|
|
28
|
+
ResponseParser.parse(client.get(path), result_set: RESULT_SET_NAME) { |data| build_game(data) }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Builds an upcoming game from API data
|
|
32
|
+
#
|
|
33
|
+
# @api private
|
|
34
|
+
# @return [UpcomingGame]
|
|
35
|
+
def self.build_game(data)
|
|
36
|
+
UpcomingGame.new(**game_info(data), **team_info(data))
|
|
37
|
+
end
|
|
38
|
+
private_class_method :build_game
|
|
39
|
+
|
|
40
|
+
# Extracts game information from data
|
|
41
|
+
#
|
|
42
|
+
# @api private
|
|
43
|
+
# @return [Hash]
|
|
44
|
+
def self.game_info(data)
|
|
45
|
+
{game_id: data["GAME_ID"], game_date: data["GAME_DATE"],
|
|
46
|
+
game_time: data["GAME_TIME"]}
|
|
47
|
+
end
|
|
48
|
+
private_class_method :game_info
|
|
49
|
+
|
|
50
|
+
# Extracts team information from data
|
|
51
|
+
#
|
|
52
|
+
# @api private
|
|
53
|
+
# @return [Hash]
|
|
54
|
+
def self.team_info(data)
|
|
55
|
+
{home_team_id: data["HOME_TEAM_ID"], visitor_team_id: data["VISITOR_TEAM_ID"],
|
|
56
|
+
home_team_name: data["HOME_TEAM_NAME"], visitor_team_name: data["VISITOR_TEAM_NAME"],
|
|
57
|
+
home_team_abbreviation: data["HOME_TEAM_ABBREVIATION"],
|
|
58
|
+
visitor_team_abbreviation: data["VISITOR_TEAM_ABBREVIATION"],
|
|
59
|
+
home_team_nickname: data["HOME_TEAM_NICKNAME"],
|
|
60
|
+
visitor_team_nickname: data["VISITOR_TEAM_NICKNAME"]}
|
|
61
|
+
end
|
|
62
|
+
private_class_method :team_info
|
|
63
|
+
end
|
|
64
|
+
end
|