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.
Files changed (321) hide show
  1. checksums.yaml +5 -5
  2. data/AGENTS.md +362 -0
  3. data/CHANGELOG.md +169 -0
  4. data/CLAUDE.md +1 -0
  5. data/LICENSE +21 -0
  6. data/README.md +501 -101
  7. data/bin/console +10 -0
  8. data/bin/setup +6 -0
  9. data/exe/nba +8 -0
  10. data/lib/nba/all_time_leader.rb +77 -0
  11. data/lib/nba/all_time_leaders.rb +185 -0
  12. data/lib/nba/assist_leader.rb +92 -0
  13. data/lib/nba/assist_leaders.rb +64 -0
  14. data/lib/nba/assist_tracker.rb +108 -0
  15. data/lib/nba/assist_tracker_entry.rb +206 -0
  16. data/lib/nba/award.rb +128 -0
  17. data/lib/nba/box_score.rb +2 -0
  18. data/lib/nba/box_score_advanced.rb +114 -0
  19. data/lib/nba/box_score_advanced_player_stat.rb +297 -0
  20. data/lib/nba/box_score_advanced_team_stat.rb +237 -0
  21. data/lib/nba/box_score_advanced_v3.rb +124 -0
  22. data/lib/nba/box_score_defensive_player_stat.rb +281 -0
  23. data/lib/nba/box_score_defensive_team_stat.rb +85 -0
  24. data/lib/nba/box_score_defensive_v2.rb +190 -0
  25. data/lib/nba/box_score_four_factors.rb +91 -0
  26. data/lib/nba/box_score_four_factors_player_stat.rb +185 -0
  27. data/lib/nba/box_score_four_factors_team_stat.rb +141 -0
  28. data/lib/nba/box_score_four_factors_v3.rb +133 -0
  29. data/lib/nba/box_score_hustle.rb +226 -0
  30. data/lib/nba/box_score_hustle_player_stat.rb +233 -0
  31. data/lib/nba/box_score_hustle_team_stat.rb +189 -0
  32. data/lib/nba/box_score_matchup_stat.rb +417 -0
  33. data/lib/nba/box_score_matchups_v3.rb +184 -0
  34. data/lib/nba/box_score_misc.rb +100 -0
  35. data/lib/nba/box_score_misc_player_stat.rb +217 -0
  36. data/lib/nba/box_score_misc_team_stat.rb +173 -0
  37. data/lib/nba/box_score_misc_v3.rb +163 -0
  38. data/lib/nba/box_score_player_stat.rb +273 -0
  39. data/lib/nba/box_score_player_track.rb +223 -0
  40. data/lib/nba/box_score_player_track_stat.rb +273 -0
  41. data/lib/nba/box_score_player_track_team_stat.rb +229 -0
  42. data/lib/nba/box_score_scoring.rb +103 -0
  43. data/lib/nba/box_score_scoring_player_stat.rb +241 -0
  44. data/lib/nba/box_score_scoring_team_stat.rb +197 -0
  45. data/lib/nba/box_score_scoring_v3.rb +170 -0
  46. data/lib/nba/box_score_similarity_score.rb +119 -0
  47. data/lib/nba/box_score_similarity_stat.rb +76 -0
  48. data/lib/nba/box_score_starter_bench_stat.rb +257 -0
  49. data/lib/nba/box_score_summary.rb +285 -0
  50. data/lib/nba/box_score_summary_v2.rb +202 -0
  51. data/lib/nba/box_score_summary_v3.rb +120 -0
  52. data/lib/nba/box_score_summary_v3_data.rb +419 -0
  53. data/lib/nba/box_score_team_stat.rb +229 -0
  54. data/lib/nba/box_score_traditional.rb +101 -0
  55. data/lib/nba/box_score_traditional_v3.rb +195 -0
  56. data/lib/nba/box_score_usage.rb +102 -0
  57. data/lib/nba/box_score_usage_player_stat.rb +265 -0
  58. data/lib/nba/box_score_usage_team_stat.rb +221 -0
  59. data/lib/nba/box_score_usage_v3.rb +169 -0
  60. data/lib/nba/box_score_v3_helpers.rb +144 -0
  61. data/lib/nba/career_stats.rb +217 -0
  62. data/lib/nba/cli/display/player_display.rb +98 -0
  63. data/lib/nba/cli/display.rb +178 -0
  64. data/lib/nba/cli/formatters/game_formatters.rb +86 -0
  65. data/lib/nba/cli/formatters/leaders_formatters.rb +26 -0
  66. data/lib/nba/cli/formatters/player_formatters.rb +52 -0
  67. data/lib/nba/cli/formatters/standings_formatters.rb +26 -0
  68. data/lib/nba/cli/formatters/team_formatters.rb +67 -0
  69. data/lib/nba/cli/formatters/time_formatters.rb +82 -0
  70. data/lib/nba/cli/formatters.rb +56 -0
  71. data/lib/nba/cli/helpers.rb +135 -0
  72. data/lib/nba/cli.rb +171 -20
  73. data/lib/nba/client.rb +35 -0
  74. data/lib/nba/collection.rb +89 -0
  75. data/lib/nba/college_player_stat.rb +200 -0
  76. data/lib/nba/common_player_info.rb +142 -0
  77. data/lib/nba/common_playoff_series.rb +90 -0
  78. data/lib/nba/common_team_years.rb +113 -0
  79. data/lib/nba/conference.rb +39 -0
  80. data/lib/nba/connection.rb +84 -0
  81. data/lib/nba/cume_stats_player.rb +358 -0
  82. data/lib/nba/cume_stats_player_game.rb +217 -0
  83. data/lib/nba/cume_stats_player_games.rb +99 -0
  84. data/lib/nba/cume_stats_player_games_entry.rb +25 -0
  85. data/lib/nba/cume_stats_player_total.rb +481 -0
  86. data/lib/nba/cume_stats_team.rb +349 -0
  87. data/lib/nba/cume_stats_team_games.rb +145 -0
  88. data/lib/nba/cume_stats_team_games_entry.rb +25 -0
  89. data/lib/nba/cume_stats_team_player.rb +485 -0
  90. data/lib/nba/cume_stats_team_total.rb +267 -0
  91. data/lib/nba/data.rb +73 -0
  92. data/lib/nba/defense_hub.rb +109 -0
  93. data/lib/nba/defense_hub_stat.rb +57 -0
  94. data/lib/nba/defensive_shot_stat.rb +102 -0
  95. data/lib/nba/division.rb +49 -0
  96. data/lib/nba/draft_board.rb +126 -0
  97. data/lib/nba/draft_board_pick.rb +173 -0
  98. data/lib/nba/draft_combine_anthro_measurement.rb +163 -0
  99. data/lib/nba/draft_combine_drill_result.rb +115 -0
  100. data/lib/nba/draft_combine_drill_results.rb +112 -0
  101. data/lib/nba/draft_combine_non_stationary_shooting.rb +268 -0
  102. data/lib/nba/draft_combine_non_stationary_shooting_result.rb +355 -0
  103. data/lib/nba/draft_combine_player_anthro.rb +133 -0
  104. data/lib/nba/draft_combine_spot_shooting.rb +243 -0
  105. data/lib/nba/draft_combine_spot_shooting_result.rb +419 -0
  106. data/lib/nba/draft_combine_stat.rb +211 -0
  107. data/lib/nba/draft_combine_stats.rb +160 -0
  108. data/lib/nba/draft_history.rb +142 -0
  109. data/lib/nba/draft_pick.rb +154 -0
  110. data/lib/nba/dunk_score_leader.rb +93 -0
  111. data/lib/nba/dunk_score_leaders.rb +77 -0
  112. data/lib/nba/estimated_metrics_stat.rb +152 -0
  113. data/lib/nba/fantasy_profile_stat.rb +142 -0
  114. data/lib/nba/fantasy_widget.rb +72 -0
  115. data/lib/nba/fantasy_widget_player.rb +98 -0
  116. data/lib/nba/found_game.rb +260 -0
  117. data/lib/nba/franchise.rb +136 -0
  118. data/lib/nba/franchise_history.rb +142 -0
  119. data/lib/nba/franchise_leader.rb +147 -0
  120. data/lib/nba/franchise_leaders.rb +162 -0
  121. data/lib/nba/franchise_player.rb +224 -0
  122. data/lib/nba/franchise_players.rb +147 -0
  123. data/lib/nba/game.rb +80 -64
  124. data/lib/nba/game_log.rb +349 -0
  125. data/lib/nba/game_rotation.rb +152 -0
  126. data/lib/nba/game_streak.rb +102 -0
  127. data/lib/nba/games.rb +46 -0
  128. data/lib/nba/home_page_leader.rb +99 -0
  129. data/lib/nba/home_page_leaders.rb +75 -0
  130. data/lib/nba/home_page_stat.rb +57 -0
  131. data/lib/nba/home_page_v2.rb +110 -0
  132. data/lib/nba/hustle_stats_box_score.rb +182 -0
  133. data/lib/nba/infographic_fan_duel_player.rb +139 -0
  134. data/lib/nba/infographic_fan_duel_player_stat.rb +311 -0
  135. data/lib/nba/ist_standing.rb +167 -0
  136. data/lib/nba/ist_standings.rb +81 -0
  137. data/lib/nba/leader.rb +103 -0
  138. data/lib/nba/leaders.rb +110 -0
  139. data/lib/nba/leaders_tile.rb +57 -0
  140. data/lib/nba/leaders_tiles.rb +90 -0
  141. data/lib/nba/league.rb +37 -0
  142. data/lib/nba/league_dash_lineup_stat.rb +270 -0
  143. data/lib/nba/league_dash_lineups.rb +177 -0
  144. data/lib/nba/league_dash_opp_pt_shot.rb +150 -0
  145. data/lib/nba/league_dash_player_bio_stat.rb +217 -0
  146. data/lib/nba/league_dash_player_bio_stats.rb +164 -0
  147. data/lib/nba/league_dash_player_clutch.rb +212 -0
  148. data/lib/nba/league_dash_player_clutch_stat.rb +271 -0
  149. data/lib/nba/league_dash_player_pt_shot.rb +152 -0
  150. data/lib/nba/league_dash_player_pt_shot_stat.rb +193 -0
  151. data/lib/nba/league_dash_player_shot_location_stat.rb +265 -0
  152. data/lib/nba/league_dash_player_shot_locations.rb +210 -0
  153. data/lib/nba/league_dash_player_stat.rb +306 -0
  154. data/lib/nba/league_dash_player_stats.rb +176 -0
  155. data/lib/nba/league_dash_pt_defend.rb +160 -0
  156. data/lib/nba/league_dash_pt_defend_stat.rb +145 -0
  157. data/lib/nba/league_dash_pt_stats.rb +152 -0
  158. data/lib/nba/league_dash_pt_stats_stat.rb +169 -0
  159. data/lib/nba/league_dash_pt_team_defend.rb +158 -0
  160. data/lib/nba/league_dash_pt_team_defend_stat.rb +110 -0
  161. data/lib/nba/league_dash_team_clutch.rb +211 -0
  162. data/lib/nba/league_dash_team_clutch_stat.rb +237 -0
  163. data/lib/nba/league_dash_team_pt_shot.rb +150 -0
  164. data/lib/nba/league_dash_team_pt_shot_stat.rb +166 -0
  165. data/lib/nba/league_dash_team_shot_location_stat.rb +230 -0
  166. data/lib/nba/league_dash_team_shot_locations.rb +208 -0
  167. data/lib/nba/league_dash_team_stat.rb +275 -0
  168. data/lib/nba/league_dash_team_stats.rb +172 -0
  169. data/lib/nba/league_game_finder.rb +170 -0
  170. data/lib/nba/league_game_log.rb +224 -0
  171. data/lib/nba/league_hustle_stats_player.rb +161 -0
  172. data/lib/nba/league_hustle_stats_player_stat.rb +253 -0
  173. data/lib/nba/league_hustle_stats_team.rb +157 -0
  174. data/lib/nba/league_hustle_stats_team_stat.rb +179 -0
  175. data/lib/nba/league_lineup_viz.rb +184 -0
  176. data/lib/nba/league_lineup_viz_stat.rb +214 -0
  177. data/lib/nba/league_player_on_details.rb +175 -0
  178. data/lib/nba/league_player_on_details_stat.rb +313 -0
  179. data/lib/nba/league_season_matchup_stat.rb +241 -0
  180. data/lib/nba/league_season_matchups.rb +181 -0
  181. data/lib/nba/league_standing.rb +284 -0
  182. data/lib/nba/league_standings.rb +159 -0
  183. data/lib/nba/league_wide_shot_stat.rb +62 -0
  184. data/lib/nba/live_action.rb +240 -0
  185. data/lib/nba/live_box_score.rb +143 -0
  186. data/lib/nba/live_connection.rb +84 -0
  187. data/lib/nba/live_game.rb +230 -0
  188. data/lib/nba/live_play_by_play.rb +120 -0
  189. data/lib/nba/live_player_stat.rb +276 -0
  190. data/lib/nba/live_scoreboard.rb +102 -0
  191. data/lib/nba/matchup_rollup.rb +98 -0
  192. data/lib/nba/matchups_rollup.rb +81 -0
  193. data/lib/nba/pass_stat.rb +209 -0
  194. data/lib/nba/play.rb +258 -0
  195. data/lib/nba/play_by_play.rb +85 -0
  196. data/lib/nba/play_by_play_v3.rb +91 -0
  197. data/lib/nba/play_type_stat.rb +206 -0
  198. data/lib/nba/player.rb +242 -24
  199. data/lib/nba/player_awards.rb +110 -0
  200. data/lib/nba/player_career_by_college.rb +86 -0
  201. data/lib/nba/player_career_by_college_rollup.rb +143 -0
  202. data/lib/nba/player_career_stats.rb +77 -0
  203. data/lib/nba/player_compare.rb +156 -0
  204. data/lib/nba/player_comparison_stat.rb +242 -0
  205. data/lib/nba/player_dash_pt_pass.rb +164 -0
  206. data/lib/nba/player_dash_pt_reb.rb +235 -0
  207. data/lib/nba/player_dash_pt_shot_defend.rb +119 -0
  208. data/lib/nba/player_dash_pt_shots.rb +279 -0
  209. data/lib/nba/player_dashboard.rb +259 -0
  210. data/lib/nba/player_dashboard_stat.rb +248 -0
  211. data/lib/nba/player_estimated_metrics.rb +84 -0
  212. data/lib/nba/player_fantasy_profile_bar_graph.rb +147 -0
  213. data/lib/nba/player_game_log.rb +72 -0
  214. data/lib/nba/player_game_logs.rb +117 -0
  215. data/lib/nba/player_game_streak_finder.rb +108 -0
  216. data/lib/nba/player_index.rb +135 -0
  217. data/lib/nba/player_index_entry.rb +266 -0
  218. data/lib/nba/player_info.rb +225 -0
  219. data/lib/nba/player_next_n_games.rb +64 -0
  220. data/lib/nba/player_profile_v2.rb +169 -0
  221. data/lib/nba/player_vs_player.rb +153 -0
  222. data/lib/nba/players.rb +107 -0
  223. data/lib/nba/playoff_matchup.rb +84 -0
  224. data/lib/nba/playoff_picture.rb +98 -0
  225. data/lib/nba/playoff_series.rb +76 -0
  226. data/lib/nba/position.rb +48 -0
  227. data/lib/nba/rebound_stat.rb +189 -0
  228. data/lib/nba/response_parser.rb +116 -0
  229. data/lib/nba/roster.rb +74 -0
  230. data/lib/nba/rotation_entry.rb +154 -0
  231. data/lib/nba/schedule.rb +183 -0
  232. data/lib/nba/schedule_international.rb +182 -0
  233. data/lib/nba/scheduled_game.rb +240 -0
  234. data/lib/nba/scoreboard.rb +183 -0
  235. data/lib/nba/scoreboard_v3.rb +104 -0
  236. data/lib/nba/shot.rb +208 -0
  237. data/lib/nba/shot_chart.rb +75 -0
  238. data/lib/nba/shot_chart_league_wide.rb +102 -0
  239. data/lib/nba/shot_chart_lineup_detail.rb +109 -0
  240. data/lib/nba/shot_stat.rb +174 -0
  241. data/lib/nba/standing.rb +129 -0
  242. data/lib/nba/standings.rb +75 -0
  243. data/lib/nba/static.rb +107 -0
  244. data/lib/nba/synergy_play_types.rb +211 -0
  245. data/lib/nba/team.rb +203 -127
  246. data/lib/nba/team_and_players_vs_players.rb +227 -0
  247. data/lib/nba/team_and_players_vs_players_stat.rb +155 -0
  248. data/lib/nba/team_dash_pt_pass.rb +157 -0
  249. data/lib/nba/team_dash_pt_reb.rb +216 -0
  250. data/lib/nba/team_dash_pt_shots.rb +244 -0
  251. data/lib/nba/team_dashboard.rb +275 -0
  252. data/lib/nba/team_dashboard_stat.rb +248 -0
  253. data/lib/nba/team_detail.rb +117 -0
  254. data/lib/nba/team_details.rb +173 -0
  255. data/lib/nba/team_estimated_metrics.rb +91 -0
  256. data/lib/nba/team_estimated_metrics_stat.rb +146 -0
  257. data/lib/nba/team_game_log.rb +143 -0
  258. data/lib/nba/team_game_log_entry.rb +246 -0
  259. data/lib/nba/team_game_log_stat.rb +275 -0
  260. data/lib/nba/team_game_logs.rb +163 -0
  261. data/lib/nba/team_game_streak.rb +111 -0
  262. data/lib/nba/team_game_streak_finder.rb +109 -0
  263. data/lib/nba/team_historical_leader.rb +207 -0
  264. data/lib/nba/team_historical_leaders.rb +98 -0
  265. data/lib/nba/team_historical_record.rb +139 -0
  266. data/lib/nba/team_info.rb +150 -0
  267. data/lib/nba/team_info_common.rb +177 -0
  268. data/lib/nba/team_on_off_overall_stat.rb +477 -0
  269. data/lib/nba/team_on_off_player_stat.rb +523 -0
  270. data/lib/nba/team_on_off_player_summary.rb +135 -0
  271. data/lib/nba/team_pass_stat.rb +183 -0
  272. data/lib/nba/team_player_dashboard.rb +212 -0
  273. data/lib/nba/team_player_on_off_details.rb +218 -0
  274. data/lib/nba/team_player_on_off_summary.rb +214 -0
  275. data/lib/nba/team_player_stat.rb +275 -0
  276. data/lib/nba/team_rebound_stat.rb +189 -0
  277. data/lib/nba/team_season_rank.rb +110 -0
  278. data/lib/nba/team_shot_stat.rb +173 -0
  279. data/lib/nba/team_vs_player.rb +151 -0
  280. data/lib/nba/team_vs_player_stat.rb +157 -0
  281. data/lib/nba/team_year.rb +55 -0
  282. data/lib/nba/team_year_by_year_stats.rb +152 -0
  283. data/lib/nba/team_year_stat.rb +282 -0
  284. data/lib/nba/teams.rb +33 -0
  285. data/lib/nba/upcoming_game.rb +115 -0
  286. data/lib/nba/utils.rb +94 -0
  287. data/lib/nba/version.rb +5 -2
  288. data/lib/nba/video_detail.rb +103 -0
  289. data/lib/nba/video_details.rb +118 -0
  290. data/lib/nba/video_details_asset.rb +115 -0
  291. data/lib/nba/video_details_asset_entry.rb +91 -0
  292. data/lib/nba/video_event.rb +83 -0
  293. data/lib/nba/video_event_asset.rb +91 -0
  294. data/lib/nba/video_events.rb +106 -0
  295. data/lib/nba/video_events_asset.rb +107 -0
  296. data/lib/nba/video_status.rb +129 -0
  297. data/lib/nba/video_status_entry.rb +161 -0
  298. data/lib/nba/vs_player_stat.rb +156 -0
  299. data/lib/nba/win_probability.rb +117 -0
  300. data/lib/nba/win_probability_point.rb +140 -0
  301. data/lib/nba.rb +249 -5
  302. data/sig/equalizer.rbs +3 -0
  303. data/sig/nba.rbs +7297 -0
  304. data/sig/shale.rbs +24 -0
  305. data/sig/thor.rbs +19 -0
  306. metadata +324 -95
  307. data/.gitignore +0 -18
  308. data/.travis.yml +0 -22
  309. data/Gemfile +0 -23
  310. data/LICENSE.md +0 -22
  311. data/Rakefile +0 -18
  312. data/bin/nba +0 -7
  313. data/cache/teams.json +0 -16529
  314. data/lib/faraday_middleware/scrape_game.rb +0 -41
  315. data/lib/nba/request.rb +0 -37
  316. data/nba.gemspec +0 -28
  317. data/spec/fixtures/games.html +0 -785
  318. data/spec/fixtures/teams.json +0 -16529
  319. data/spec/game_spec.rb +0 -40
  320. data/spec/spec_helper.rb +0 -25
  321. data/spec/team_spec.rb +0 -93
data/README.md CHANGED
@@ -1,112 +1,512 @@
1
- # NBA.rb
1
+ # NBA Gem
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/nba.png)][gem]
4
- [![Build Status](https://secure.travis-ci.org/larrylv/nba.png?branch=master)][travis]
3
+ <p align="center">
4
+ <img src="logo.png" alt="NBA Gem Logo">
5
+ </p>
5
6
 
6
- [gem]: https://rubygems.org/gems/nba
7
- [travis]: https://travis-ci.org/larrylv/nba
7
+ [![Tests](https://github.com/sferik/nba-ruby/actions/workflows/test.yml/badge.svg)](https://github.com/sferik/nba-ruby/actions/workflows/test.yml)
8
+ [![Linter](https://github.com/sferik/nba-ruby/actions/workflows/lint.yml/badge.svg)](https://github.com/sferik/nba-ruby/actions/workflows/lint.yml)
9
+ [![Mutant](https://github.com/sferik/nba-ruby/actions/workflows/mutant.yml/badge.svg)](https://github.com/sferik/nba-ruby/actions/workflows/mutant.yml)
10
+ [![Typecheck](https://github.com/sferik/nba-ruby/actions/workflows/typecheck.yml/badge.svg)](https://github.com/sferik/nba-ruby/actions/workflows/typecheck.yml)
11
+ [![Docs](https://github.com/sferik/nba-ruby/actions/workflows/docs.yml/badge.svg)](https://github.com/sferik/nba-ruby/actions/workflows/docs.yml)
12
+ [![Gem Version](https://badge.fury.io/rb/nba.svg)](https://rubygems.org/gems/nba)
8
13
 
9
- NBA.rb is a Ruby library for retrieving NBA League games, schedules, teams and players.
14
+ A Ruby interface to the NBA Stats API.
10
15
 
11
- Insipred by [@sferik][sferik]'s [MLB.rb][mlb].
16
+ ## Installation
12
17
 
13
- [sferik]: https://github.com/sferik
14
- [mlb]: https://github.com/sferik/mlb
18
+ Install the gem:
15
19
 
16
- ## Installation
17
- gem install nba
18
-
19
- ## Usage Examples
20
- You could use `nba` command-line tool directly in your terminal.
21
-
22
- $ nba games --date=20140102
23
- Final/OT - Cavaliers 87 : 81 Magic
24
- Final - Heat 114 : 123 Warriors
25
- Final - Bulls 94 : 82 Celtics
26
- Final - Thunder 93 : 95 Nets
27
- Final - Spurs 101 : 105 Knicks
28
- Final - Suns 91 : 99 Grizzlies
29
- Final - Jazz 96 : 87 Bucks
30
- Final - Trail Blazers 134 : 104 Bobcats
31
- Final - Kings 104 : 113 76ers
32
- $ nba teams --name 'Lakers'
33
- Name: Los Angeles Lakers
34
- Founded: 1947
35
- Conference: Western Conference
36
- Division: Pacific Division
37
- Coach: Mike D'Antoni
38
- Championships: 2010 NBA Finals, 2009 NBA Finals
39
- 2002 NBA Finals, 2001 NBA Finals
40
- 2000 NBA Finals, 1988 NBA Finals
41
- 1987 NBA Finals, 1985 NBA Finals
42
- 1982 NBA Finals, 1980 NBA Finals
43
- 1972 NBA Finals, 1954 NBA Finals
44
- 1953 NBA Finals, 1952 NBA Finals
45
- 1950 NBA Finals, 1949 BAA Finals
46
- 1948 NBL Finals
47
-
48
- Or you could use it in `irb`, which is an Interactive Ruby Shell
49
-
50
- $ irb
51
- >> require 'nba'
52
- >> NBA::Game.all '20140102'
53
- # => Final/OT - Cavaliers 87 : 81 Magic
54
- # => Final - Heat 114 : 123 Warriors
55
- # => Final - Bulls 94 : 82 Celtics
56
- # => Final - Thunder 93 : 95 Nets
57
- # => Final - Spurs 101 : 105 Knicks
58
- # => Final - Suns 91 : 99 Grizzlies
59
- # => Final - Jazz 96 : 87 Bucks
60
- # => Final - Trail Blazers 134 : 104 Bobcats
61
- # => Final - Kings 104 : 113 76ers
62
- >> NBA::Team.all.first.name # => "Atlanta Hawks"
63
- >> NBA::Team.all.first.founded # => 1946
64
- >> NBA::Team.all.first.players.first.name # => "Al Horford"
65
- >> NBA::Team.all.first.players.first.number # => 15
66
- >> NBA::Team.all.first.players.first.position # => ["Forward-center"]
67
-
68
- ## Supported Ruby Versions
69
- This library aims to support and is [tested against][travis] the following Ruby
70
- implementations:
71
-
72
- * Ruby 1.9.3
73
- * Ruby 2.0.0
74
- * Ruby 2.1.0
75
- * [JRuby][]
76
-
77
- [jruby]: http://jruby.org/
78
-
79
- ## Colophon
80
- NBA was built with the following tools:
81
-
82
- * [Bundler][]
83
- * [Freebase][]
84
- * [Faraday][]
85
- * [Markdown][]
86
- * [RSpec][]
87
- * [vim][]
88
- * [WebMock][]
89
-
90
- [bundler]: http://gembundler.com/
91
- [freebase]: http://www.freebase.com/
92
- [faraday]: https://github.com/technoweenie/faraday
93
- [markdown]: http://daringfireball.net/projects/markdown/
94
- [rspec]: http://relishapp.com/rspec/
95
- [vim]: http://www.vim.org/
96
- [webmock]: https://github.com/bblimke/webmock
97
-
98
- And, special thanks to [@sfeirk][sferik]!
20
+ ```bash
21
+ gem install nba
22
+ ```
99
23
 
100
- ## Contributing
24
+ Or add it to your Gemfile:
25
+
26
+ ```ruby
27
+ gem "nba"
28
+ ```
29
+
30
+ ## Command-Line Interface
31
+
32
+ The gem includes an `nba` command-line tool for quick access to NBA data.
33
+
34
+ ### Available Commands
35
+
36
+ ```bash
37
+ # Display help
38
+ nba help
39
+
40
+ # Get today's games
41
+ nba games
42
+
43
+ # Get games for a specific date
44
+ nba games -d 20240315
45
+ nba games -d yesterday
46
+
47
+ # Search for teams
48
+ nba teams Lakers
49
+ nba teams Warriors -r # Include roster
50
+
51
+ # Search for players
52
+ nba player Curry
53
+ nba player "LeBron James"
54
+
55
+ # Display standings
56
+ nba standings
57
+ nba standings -c West
58
+ nba standings -s 2023
59
+
60
+ # Display league leaders
61
+ nba leaders
62
+ nba leaders REB
63
+ nba leaders AST -l 5
64
+ nba leaders -s 2022
65
+
66
+ # Display team schedule
67
+ nba schedule Warriors
68
+ nba schedule LAL -s 2024
69
+
70
+ # Display team roster
71
+ nba roster Warriors
72
+ nba roster GSW -s 2023
73
+ ```
74
+
75
+ ### Command Options
76
+
77
+ | Command | Option | Description |
78
+ |------------|------------------|---------------------------------------|
79
+ | games | -d, --date | Date (YYYYMMDD, 'today', 'yesterday') |
80
+ | teams | -n, --name | Team name to search (required) |
81
+ | teams | -r, --roster | Include roster information |
82
+ | standings | -c, --conference | Filter by conference (East/West) |
83
+ | standings | -s, --season | Season year (e.g., 2024) |
84
+ | leaders | -c, --category | Stat category (PTS, REB, AST, etc.) |
85
+ | leaders | -s, --season | Season year |
86
+ | leaders | -l, --limit | Number of leaders (default: 10) |
87
+ | schedule | -s, --season | Season year |
88
+ | roster | -s, --season | Season year |
89
+
90
+ ## Usage
91
+
92
+ ### Teams
93
+
94
+ ```ruby
95
+ require "nba"
96
+
97
+ # Get all NBA teams
98
+ teams = NBA::Teams.all
99
+ teams.size # => 30
100
+
101
+ # Find the Warriors
102
+ warriors = NBA::Teams.find(NBA::Team::GSW)
103
+ warriors.full_name # => "Golden State Warriors"
104
+ warriors.city # => "San Francisco"
105
+ warriors.year_founded # => 1946
106
+
107
+ # Get detailed team information
108
+ detail = NBA::TeamDetails.find(team: NBA::Team::GSW)
109
+ detail.arena # => "Chase Center"
110
+ detail.owner # => "Joe Lacob"
111
+ detail.general_manager # => "Mike Dunleavy Jr."
112
+ detail.head_coach # => "Steve Kerr"
113
+ ```
114
+
115
+ ### Players
116
+
117
+ ```ruby
118
+ # Get the Warriors roster for 2021-2022
119
+ roster = NBA::Roster.find(team: NBA::Team::GSW, season: 2021)
120
+ roster.size # => 17
121
+
122
+ curry = roster.find { |p| p.full_name == "Stephen Curry" }
123
+ curry.jersey_number # => 30
124
+ curry.height # => "6-2"
125
+ curry.weight # => 185
126
+ curry.college # => "Davidson"
127
+ curry.draft_year # => 2009
128
+ curry.draft_round # => 1
129
+ curry.draft_number # => 7
130
+
131
+ # Get Curry's career stats
132
+ career = NBA::PlayerCareerStats.find(player: curry)
133
+ career.size # => 17
134
+
135
+ season = career.last
136
+ season.pts # => 28.7
137
+ season.reb # => 4.0
138
+ season.ast # => 4.3
139
+
140
+ # Get Curry's awards
141
+ awards = NBA::PlayerAwards.find(player: curry)
142
+ awards.size # => 67
143
+
144
+ mvps = awards.select { |a| a.description == "NBA Most Valuable Player" }
145
+ mvps.size # => 2
146
+ ```
147
+
148
+ ### Standings
149
+
150
+ ```ruby
151
+ # Get current standings
152
+ standings = NBA::Standings.all
153
+ standings.size # => 30
154
+
155
+ # Get Western Conference standings for 2021-2022
156
+ western = NBA::Standings.conference("West", season: 2021)
157
+ western.size # => 15
158
+
159
+ western.first(3).each do |s|
160
+ puts "#{s.team_name}: #{s.wins}-#{s.losses}"
161
+ end
162
+ # Suns: 64-18
163
+ # Grizzlies: 56-26
164
+ # Warriors: 53-29
165
+ ```
166
+
167
+ ### League Leaders
168
+
169
+ ```ruby
170
+ # Get free throw percentage leaders for 2017-2018
171
+ NBA::Leaders.find(category: NBA::Leaders::FT_PCT, season: 2017, limit: 5).each do |leader|
172
+ puts "#{leader.rank}. #{leader.player_name}: #{leader.value} FT%"
173
+ end
174
+ # 1. Stephen Curry: 0.921 FT%
175
+ # 2. Damian Lillard: 0.916 FT%
176
+ # 3. CJ McCollum: 0.837 FT%
177
+ # 4. Kyrie Irving: 0.889 FT%
178
+ # 5. Kevin Durant: 0.889 FT%
179
+
180
+ # Available categories
181
+ NBA::Leaders::PTS # Points
182
+ NBA::Leaders::REB # Rebounds
183
+ NBA::Leaders::AST # Assists
184
+ NBA::Leaders::STL # Steals
185
+ NBA::Leaders::BLK # Blocks
186
+ NBA::Leaders::FG_PCT # Field Goal Percentage
187
+ NBA::Leaders::FG3_PCT # Three-Point Percentage
188
+ ```
189
+
190
+ ### All-Time Leaders
191
+
192
+ ```ruby
193
+ # Get all-time points leaders
194
+ NBA::AllTimeLeaders.find(category: NBA::AllTimeLeaders::PTS, limit: 5).each do |leader|
195
+ puts "#{leader.rank}. #{leader.player_name}: #{leader.value} points"
196
+ end
197
+ # 1. LeBron James: 40474 points
198
+ # 2. Kareem Abdul-Jabbar: 38387 points
199
+ # 3. Karl Malone: 36928 points
200
+ # 4. Kobe Bryant: 33643 points
201
+ # 5. Michael Jordan: 32292 points
202
+
203
+ # Available categories
204
+ NBA::AllTimeLeaders::PTS # Points
205
+ NBA::AllTimeLeaders::AST # Assists
206
+ NBA::AllTimeLeaders::REB # Rebounds
207
+ NBA::AllTimeLeaders::STL # Steals
208
+ NBA::AllTimeLeaders::BLK # Blocks
209
+ NBA::AllTimeLeaders::FGM # Field Goals Made
210
+ NBA::AllTimeLeaders::FG3M # Three-Pointers Made
211
+ ```
212
+
213
+ ### Player Info
214
+
215
+ ```ruby
216
+ # Get detailed biography for Stephen Curry
217
+ info = NBA::CommonPlayerInfo.find(player: 201939)
218
+ info.full_name # => "Stephen Curry"
219
+ info.birthdate # => "1988-03-14"
220
+ info.school # => "Davidson"
221
+ info.country # => "USA"
222
+ info.height # => "6-2"
223
+ info.weight # => 185
224
+ info.season_exp # => 15
225
+ info.jersey # => "30"
226
+ info.position # => "Guard"
227
+ info.draft_year # => 2009
228
+ info.draft_round # => 1
229
+ info.draft_number # => 7
230
+ info.greatest_75? # => true
231
+
232
+ # Get current team info
233
+ info.team.full_name # => "Golden State Warriors"
234
+ ```
235
+
236
+ ### League Team Stats
237
+
238
+ ```ruby
239
+ # Get league-wide team statistics for 2024-2025
240
+ stats = NBA::LeagueDashTeamStats.find(season: 2024)
241
+
242
+ # Find the Warriors
243
+ gsw = stats.find { |s| s.team_abbreviation == "GSW" }
244
+ gsw.gp # => 82 (games played)
245
+ gsw.wins # => 46
246
+ gsw.losses # => 36
247
+ gsw.pts # => 118.9 (points per game)
248
+ gsw.reb # => 44.2 (rebounds per game)
249
+ gsw.ast # => 28.7 (assists per game)
250
+ gsw.fg_pct # => 0.478 (field goal percentage)
251
+ gsw.fg3_pct # => 0.378 (three-point percentage)
252
+
253
+ # Sort by points per game
254
+ top_offenses = stats.sort_by(&:pts).reverse.first(5)
255
+ top_offenses.each do |team|
256
+ puts "#{team.team_name}: #{team.pts} PPG"
257
+ end
258
+ ```
259
+
260
+ ### Team History
261
+
262
+ ```ruby
263
+ # Get all seasons the Warriors have played
264
+ years = NBA::CommonTeamYears.find(team: NBA::Team::GSW)
265
+ years.size # => 79
266
+
267
+ year = years.first
268
+ year.team_id # => 1610612744
269
+ year.year # => 2024
270
+ year.season # => "2024-25"
271
+ year.min_year # => 1946
272
+ year.max_year # => 2024
273
+ year.abbreviation # => "GSW"
274
+ ```
275
+
276
+ ### Player Game Logs
101
277
 
102
- 1. [Fork it](http://github.com/larrylv/nba/fork)
103
- 2. Create your feature branch (`git checkout -b my-new-feature`)
104
- 3. Commit your changes (`git commit -am 'Add some feature'`)
105
- 4. Push to the branch (`git push origin my-new-feature`)
106
- 5. Create new Pull Request
278
+ ```ruby
279
+ # Get Curry's game log for 2025-2026
280
+ logs = NBA::PlayerGameLog.find(player: 201939, season: 2025)
281
+
282
+ log = logs.last # Season opener
283
+ log.game_date # => "Oct 21, 2025"
284
+ log.matchup # => "GSW @ LAL"
285
+ log.pts # => 23
286
+ log.reb # => 1
287
+ log.ast # => 4
288
+
289
+ # Get playoffs game log
290
+ playoff_logs = NBA::PlayerGameLog.find(
291
+ player: 201939,
292
+ season: 2025,
293
+ season_type: NBA::PlayerGameLog::PLAYOFFS
294
+ )
295
+ ```
296
+
297
+ ### Box Scores
298
+
299
+ ```ruby
300
+ # Get team stats from 2025-2026 season opener: Warriors vs Lakers
301
+ game = "0022500061"
302
+ teams = NBA::BoxScoreTraditional.team_stats(game: game)
303
+
304
+ gsw = teams.find { |t| t.team_abbreviation == "GSW" }
305
+ lal = teams.find { |t| t.team_abbreviation == "LAL" }
306
+
307
+ # Final score
308
+ puts "#{gsw.team_name}: #{gsw.pts}" # => "Warriors: 118"
309
+ puts "#{lal.team_name}: #{lal.pts}" # => "Lakers: 109"
310
+
311
+ # Team shooting comparison
312
+ gsw.fg_pct # => 0.477 (47.7% FG)
313
+ gsw.fg3_pct # => 0.395 (39.5% 3PT)
314
+ gsw.ft_pct # => 0.850 (85.0% FT)
315
+
316
+ # Team rebounding
317
+ gsw.oreb # => 10 (offensive rebounds)
318
+ gsw.dreb # => 35 (defensive rebounds)
319
+ gsw.reb # => 45 (total rebounds)
320
+
321
+ # Other team stats
322
+ gsw.ast # => 28 (assists)
323
+ gsw.tov # => 14 (turnovers)
324
+ gsw.stl # => 9 (steals)
325
+ gsw.blk # => 6 (blocks)
326
+ ```
327
+
328
+ ### Game Rotations
329
+
330
+ ```ruby
331
+ # Get rotation data for 2025-2026 season opener
332
+ game = "0022500061"
333
+ rotations = NBA::GameRotation.home_team(game: game)
334
+ rotations.size # => 42
335
+
336
+ # Find Curry's stints
337
+ curry_stints = rotations.select { |r| r.player_last == "Curry" }
338
+ curry_stints.size # => 6
339
+
340
+ stint = curry_stints.first
341
+ stint.player_name # => "Stephen Curry"
342
+ stint.player_pts # => 8
343
+ stint.pt_diff # => 7
344
+ stint.in_time_real # => 0
345
+ ```
346
+
347
+ ### Hustle Stats
348
+
349
+ ```ruby
350
+ # Get hustle stats for a game
351
+ game = "0022400001"
352
+
353
+ # Player hustle stats
354
+ player_stats = NBA::BoxScoreHustle.player_stats(game: game)
355
+ curry = player_stats.find { |p| p.player_name == "Stephen Curry" }
356
+ curry.minutes # => "34:22"
357
+ curry.contested_shots # => 5
358
+ curry.deflections # => 3
359
+ curry.loose_balls_recovered # => 2
360
+ curry.screen_assists # => 8
361
+ curry.starter? # => true
362
+
363
+ # Team hustle stats
364
+ team_stats = NBA::BoxScoreHustle.team_stats(game: game)
365
+ gsw = team_stats.find { |t| t.team_abbreviation == "GSW" }
366
+ gsw.contested_shots # => 42
367
+ gsw.deflections # => 15
368
+ gsw.loose_balls_recovered # => 8
369
+ ```
370
+
371
+ ### Player Tracking Stats
372
+
373
+ ```ruby
374
+ # Get player tracking stats for a game
375
+ game = "0022400001"
376
+
377
+ # Player tracking data
378
+ player_stats = NBA::BoxScorePlayerTrack.player_stats(game: game)
379
+ curry = player_stats.find { |p| p.player_name == "Stephen Curry" }
380
+ curry.speed # => 4.52 (mph)
381
+ curry.distance # => 2.85 (miles)
382
+ curry.touches # => 75
383
+ curry.passes # => 48
384
+ curry.secondary_ast # => 3
385
+ curry.front_court_touches # => 62
386
+
387
+ # Team tracking data
388
+ team_stats = NBA::BoxScorePlayerTrack.team_stats(game: game)
389
+ gsw = team_stats.find { |t| t.team_abbreviation == "GSW" }
390
+ gsw.distance # => 12.5 (team miles)
391
+ gsw.passes # => 285
392
+ ```
393
+
394
+ ### Game Summary
395
+
396
+ ```ruby
397
+ # Get comprehensive game summary
398
+ game = "0022400001"
399
+ summary = NBA::BoxScoreSummaryV2.find(game: game)
400
+
401
+ # Game info
402
+ summary.game_date # => "2024-10-22"
403
+ summary.game_status_text # => "Final"
404
+ summary.arena # => "Chase Center"
405
+ summary.attendance # => 18064
406
+
407
+ # Score by quarter
408
+ summary.home_pts_q1 # => 28
409
+ summary.home_pts_q2 # => 32
410
+ summary.home_pts_q3 # => 25
411
+ summary.home_pts_q4 # => 33
412
+ summary.home_pts # => 118
413
+
414
+ summary.visitor_pts_q1 # => 25
415
+ summary.visitor_pts # => 109
416
+
417
+ # Other details
418
+ summary.officials # => ["Scott Foster", "Tony Brothers", "Courtney Kirkland"]
419
+ summary.lead_changes # => 12
420
+ summary.times_tied # => 8
421
+
422
+ # Game status helpers
423
+ summary.final? # => true
424
+ summary.in_progress? # => false
425
+ summary.scheduled? # => false
426
+
427
+ # Related objects
428
+ summary.home_team.full_name # => "Golden State Warriors"
429
+ summary.visitor_team.full_name # => "Los Angeles Lakers"
430
+ ```
431
+
432
+ ### Schedule
433
+
434
+ ```ruby
435
+ # Get Warriors schedule for 2025-2026
436
+ schedule = NBA::Schedule.by_team(team: NBA::Team::GSW, season: 2025)
437
+ schedule.size # => 101
438
+
439
+ # Find opening night game (stored in UTC)
440
+ opener = schedule.find { |g| g.game_date&.start_with?("2025-10-22") }
441
+ opener.away_team_tricode # => "LAL"
442
+ opener.home_team_tricode # => "GSW"
443
+ opener.arena_name # => "Chase Center"
444
+ ```
445
+
446
+ ### Franchise History
447
+
448
+ ```ruby
449
+ # Get all franchise histories
450
+ history = NBA::FranchiseHistory.all
451
+ history.size # => 74
452
+
453
+ # Find Warriors history
454
+ gsw = history.find { |h| h.team_id == NBA::Team::GSW }
455
+ gsw.start_year # => 1946
456
+ gsw.wins # => 3035
457
+ gsw.losses # => 3184
458
+ gsw.po_appearances # => 38
459
+ gsw.league_titles # => 7
460
+
461
+ # Get defunct franchises
462
+ defunct = NBA::FranchiseHistory.defunct
463
+ defunct.size # => 15
464
+ ```
465
+
466
+ ## Development
467
+
468
+ After checking out the repo, run `bundle install` to install dependencies.
469
+
470
+ ### Running Tests
471
+
472
+ ```bash
473
+ bundle exec rake test
474
+ ```
475
+
476
+ ### Running Linters
477
+
478
+ ```bash
479
+ bundle exec rake lint
480
+ ```
481
+
482
+ ### Running Mutant (Mutation Testing)
483
+
484
+ ```bash
485
+ bundle exec rake mutant
486
+ ```
487
+
488
+ ### Running Type Checker
489
+
490
+ ```bash
491
+ bundle exec rake steep
492
+ ```
493
+
494
+ ### Generating Documentation
495
+
496
+ ```bash
497
+ bundle exec rake yard
498
+ ```
499
+
500
+ ### Running All Quality Checks
501
+
502
+ ```bash
503
+ bundle exec rake
504
+ ```
505
+
506
+ ## Contributing
107
507
 
108
- ## Copyright
109
- Copyright (c) 2010-2014 Larry Lv. See [LICENSE][] for details.
508
+ Bug reports and pull requests are welcome on GitHub at https://github.com/sferik/nba-ruby.
110
509
 
111
- [license]: LICENSE.md
510
+ ## License
112
511
 
512
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/bin/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "nba"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ require "irb"
10
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
data/exe/nba ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path("../lib", __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require "nba"
7
+
8
+ NBA::CLI.start(ARGV)