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
@@ -0,0 +1,117 @@
1
+ require "json"
2
+ require_relative "client"
3
+ require_relative "collection"
4
+ require_relative "utils"
5
+
6
+ require_relative "win_probability_point"
7
+
8
+ module NBA
9
+ # Provides methods to retrieve win probability data
10
+ module WinProbability
11
+ # Result set name for win probability
12
+ # @return [String] the result set name
13
+ WIN_PROB_PBP = "WinProbPBP".freeze
14
+
15
+ # Retrieves win probability data for a game
16
+ #
17
+ # @api public
18
+ # @example
19
+ # points = NBA::WinProbability.find(game: "0022400001")
20
+ # points.each { |p| puts "Period #{p.period}: Home #{(p.home_pct * 100).round}%" }
21
+ # @param game [String, Game] the game ID or Game object
22
+ # @param client [Client] the API client to use
23
+ # @return [Collection] a collection of win probability points
24
+ def self.find(game:, client: CLIENT)
25
+ game_id = Utils.extract_id(game)
26
+ path = "winprobabilitypbp?GameID=#{game_id}&LeagueID=00"
27
+ response = client.get(path)
28
+ parse_response(response, game_id)
29
+ end
30
+
31
+ # Parses the API response into win probability point objects
32
+ #
33
+ # @api private
34
+ # @return [Collection] collection of win probability points
35
+ def self.parse_response(response, game_id)
36
+ return Collection.new unless response
37
+
38
+ data = JSON.parse(response)
39
+ result_set = find_result_set(data)
40
+ return Collection.new unless result_set
41
+
42
+ headers = result_set["headers"]
43
+ rows = result_set["rowSet"]
44
+ return Collection.new unless headers && rows
45
+
46
+ points = rows.map { |row| build_win_prob_point(headers, row, game_id) }
47
+ Collection.new(points)
48
+ end
49
+ private_class_method :parse_response
50
+
51
+ # Finds the result set in the response
52
+ #
53
+ # @api private
54
+ # @return [Hash, nil] the result set hash
55
+ def self.find_result_set(data)
56
+ result_sets = data["resultSets"]
57
+ return unless result_sets
58
+
59
+ result_sets.find { |rs| rs["name"].eql?(WIN_PROB_PBP) }
60
+ end
61
+ private_class_method :find_result_set
62
+
63
+ # Builds a WinProbabilityPoint object from raw data
64
+ #
65
+ # @api private
66
+ # @return [WinProbabilityPoint] the win probability point object
67
+ def self.build_win_prob_point(headers, row, game_id)
68
+ data = headers.zip(row).to_h
69
+ WinProbabilityPoint.new(**win_prob_attributes(data, game_id))
70
+ end
71
+ private_class_method :build_win_prob_point
72
+
73
+ # Combines all win probability attributes
74
+ #
75
+ # @api private
76
+ # @return [Hash] the combined attributes
77
+ def self.win_prob_attributes(data, game_id)
78
+ event_attributes(data, game_id)
79
+ .merge(score_attributes(data))
80
+ .merge(description_attributes(data))
81
+ end
82
+ private_class_method :win_prob_attributes
83
+
84
+ # Extracts event attributes from data
85
+ #
86
+ # @api private
87
+ # @return [Hash] event attributes
88
+ def self.event_attributes(data, game_id)
89
+ {game_id: game_id, event_num: data["EVENT_NUM"],
90
+ period: data["PERIOD"], seconds_remaining: data["SECONDS_REMAINING"],
91
+ location: data["LOCATION"]}
92
+ end
93
+ private_class_method :event_attributes
94
+
95
+ # Extracts score attributes from data
96
+ #
97
+ # @api private
98
+ # @return [Hash] score attributes
99
+ def self.score_attributes(data)
100
+ {home_pct: data["HOME_PCT"], visitor_pct: data["VISITOR_PCT"],
101
+ home_pts: data["HOME_PTS"], visitor_pts: data["VISITOR_PTS"],
102
+ home_score_by: data["HOME_SCORE_BY"], visitor_score_by: data["VISITOR_SCORE_BY"]}
103
+ end
104
+ private_class_method :score_attributes
105
+
106
+ # Extracts description attributes from data
107
+ #
108
+ # @api private
109
+ # @return [Hash] description attributes
110
+ def self.description_attributes(data)
111
+ {home_description: data["HOME_DESCRIPTION"],
112
+ neutral_description: data["NEUTRAL_DESCRIPTION"],
113
+ visitor_description: data["VISITOR_DESCRIPTION"]}
114
+ end
115
+ private_class_method :description_attributes
116
+ end
117
+ end
@@ -0,0 +1,140 @@
1
+ module NBA
2
+ # Represents a win probability data point
3
+ class WinProbabilityPoint < Shale::Mapper
4
+ include Equalizer.new(:game_id, :event_num)
5
+
6
+ # @!attribute [rw] game_id
7
+ # Returns the game ID
8
+ # @api public
9
+ # @example
10
+ # point.game_id #=> "0022400001"
11
+ # @return [String] the game ID
12
+ attribute :game_id, Shale::Type::String
13
+
14
+ # @!attribute [rw] event_num
15
+ # Returns the event number
16
+ # @api public
17
+ # @example
18
+ # point.event_num #=> 1
19
+ # @return [Integer] the event number
20
+ attribute :event_num, Shale::Type::Integer
21
+
22
+ # @!attribute [rw] home_pct
23
+ # Returns the home team win probability
24
+ # @api public
25
+ # @example
26
+ # point.home_pct #=> 0.52
27
+ # @return [Float] home win probability (0.0 to 1.0)
28
+ attribute :home_pct, Shale::Type::Float
29
+
30
+ # @!attribute [rw] visitor_pct
31
+ # Returns the visitor team win probability
32
+ # @api public
33
+ # @example
34
+ # point.visitor_pct #=> 0.48
35
+ # @return [Float] visitor win probability (0.0 to 1.0)
36
+ attribute :visitor_pct, Shale::Type::Float
37
+
38
+ # @!attribute [rw] home_pts
39
+ # Returns the home team points at this event
40
+ # @api public
41
+ # @example
42
+ # point.home_pts #=> 25
43
+ # @return [Integer] home team points
44
+ attribute :home_pts, Shale::Type::Integer
45
+
46
+ # @!attribute [rw] visitor_pts
47
+ # Returns the visitor team points at this event
48
+ # @api public
49
+ # @example
50
+ # point.visitor_pts #=> 23
51
+ # @return [Integer] visitor team points
52
+ attribute :visitor_pts, Shale::Type::Integer
53
+
54
+ # @!attribute [rw] home_score_by
55
+ # Returns points scored by home team on this event
56
+ # @api public
57
+ # @example
58
+ # point.home_score_by #=> 2
59
+ # @return [Integer] points scored
60
+ attribute :home_score_by, Shale::Type::Integer
61
+
62
+ # @!attribute [rw] visitor_score_by
63
+ # Returns points scored by visitor team on this event
64
+ # @api public
65
+ # @example
66
+ # point.visitor_score_by #=> 0
67
+ # @return [Integer] points scored
68
+ attribute :visitor_score_by, Shale::Type::Integer
69
+
70
+ # @!attribute [rw] period
71
+ # Returns the period
72
+ # @api public
73
+ # @example
74
+ # point.period #=> 1
75
+ # @return [Integer] the period number
76
+ attribute :period, Shale::Type::Integer
77
+
78
+ # @!attribute [rw] seconds_remaining
79
+ # Returns seconds remaining in the period
80
+ # @api public
81
+ # @example
82
+ # point.seconds_remaining #=> 420
83
+ # @return [Integer] seconds remaining
84
+ attribute :seconds_remaining, Shale::Type::Integer
85
+
86
+ # @!attribute [rw] home_description
87
+ # Returns the home team play description
88
+ # @api public
89
+ # @example
90
+ # point.home_description #=> "Curry 3PT Shot"
91
+ # @return [String] the description
92
+ attribute :home_description, Shale::Type::String
93
+
94
+ # @!attribute [rw] neutral_description
95
+ # Returns the neutral play description
96
+ # @api public
97
+ # @example
98
+ # point.neutral_description #=> "Jump Ball"
99
+ # @return [String] the description
100
+ attribute :neutral_description, Shale::Type::String
101
+
102
+ # @!attribute [rw] visitor_description
103
+ # Returns the visitor team play description
104
+ # @api public
105
+ # @example
106
+ # point.visitor_description #=> "James Layup"
107
+ # @return [String] the description
108
+ attribute :visitor_description, Shale::Type::String
109
+
110
+ # @!attribute [rw] location
111
+ # Returns the event location
112
+ # @api public
113
+ # @example
114
+ # point.location #=> "H"
115
+ # @return [String] the location
116
+ attribute :location, Shale::Type::String
117
+
118
+ # Returns the description for this event
119
+ #
120
+ # @api public
121
+ # @example
122
+ # point.description #=> "Curry 3PT Shot"
123
+ # @return [String, nil] the description
124
+ def description
125
+ home_description || neutral_description || visitor_description
126
+ end
127
+
128
+ # Returns the score margin (positive = home leading)
129
+ #
130
+ # @api public
131
+ # @example
132
+ # point.margin #=> 5
133
+ # @return [Integer, nil] the score margin, or nil if either score is missing
134
+ def margin
135
+ return nil unless home_pts && visitor_pts
136
+
137
+ home_pts - visitor_pts
138
+ end
139
+ end
140
+ end
data/lib/nba.rb CHANGED
@@ -1,5 +1,249 @@
1
- require 'nba/request'
2
- require 'nba/team'
3
- require 'nba/player'
4
- require 'nba/game'
5
- require 'nba/cli'
1
+ # NBA Stats API client library
2
+ #
3
+ # @api public
4
+ module NBA
5
+ end
6
+
7
+ require_relative "nba/version"
8
+ require_relative "nba/utils"
9
+ require_relative "nba/connection"
10
+ require_relative "nba/client"
11
+ require_relative "nba/collection"
12
+ require_relative "nba/response_parser"
13
+ require_relative "nba/conference"
14
+ require_relative "nba/division"
15
+ require_relative "nba/position"
16
+ require_relative "nba/team"
17
+ require_relative "nba/player"
18
+ require_relative "nba/game"
19
+ require_relative "nba/league"
20
+ require_relative "nba/games"
21
+ require_relative "nba/leader"
22
+ require_relative "nba/standing"
23
+ require_relative "nba/game_log"
24
+ require_relative "nba/career_stats"
25
+ require_relative "nba/data"
26
+ require_relative "nba/teams"
27
+ require_relative "nba/players"
28
+ require_relative "nba/roster"
29
+ require_relative "nba/scoreboard"
30
+ require_relative "nba/leaders"
31
+ require_relative "nba/standings"
32
+ require_relative "nba/player_game_log"
33
+ require_relative "nba/player_game_logs"
34
+ require_relative "nba/upcoming_game"
35
+ require_relative "nba/player_next_n_games"
36
+ require_relative "nba/player_profile_v2"
37
+ require_relative "nba/player_career_stats"
38
+ require_relative "nba/team_game_log"
39
+ require_relative "nba/franchise"
40
+ require_relative "nba/franchise_history"
41
+ require_relative "nba/franchise_leader"
42
+ require_relative "nba/franchise_leaders"
43
+ require_relative "nba/franchise_player"
44
+ require_relative "nba/franchise_players"
45
+ require_relative "nba/box_score"
46
+ require_relative "nba/box_score_traditional"
47
+ require_relative "nba/play"
48
+ require_relative "nba/play_by_play"
49
+ require_relative "nba/shot"
50
+ require_relative "nba/shot_chart"
51
+ require_relative "nba/box_score_advanced"
52
+ require_relative "nba/box_score_scoring"
53
+ require_relative "nba/box_score_misc"
54
+ require_relative "nba/box_score_usage"
55
+ require_relative "nba/box_score_four_factors"
56
+ require_relative "nba/player_awards"
57
+ require_relative "nba/player_compare"
58
+ require_relative "nba/draft_history"
59
+ require_relative "nba/draft_combine_spot_shooting_result"
60
+ require_relative "nba/draft_combine_spot_shooting"
61
+ require_relative "nba/draft_combine_stat"
62
+ require_relative "nba/draft_combine_stats"
63
+ require_relative "nba/draft_board_pick"
64
+ require_relative "nba/draft_board"
65
+ require_relative "nba/draft_combine_drill_result"
66
+ require_relative "nba/draft_combine_drill_results"
67
+ require_relative "nba/draft_combine_non_stationary_shooting_result"
68
+ require_relative "nba/draft_combine_non_stationary_shooting"
69
+ require_relative "nba/draft_combine_anthro_measurement"
70
+ require_relative "nba/draft_combine_player_anthro"
71
+ require_relative "nba/game_rotation"
72
+ require_relative "nba/league_game_log"
73
+ require_relative "nba/league_standings"
74
+ require_relative "nba/league_dash_player_stats"
75
+ require_relative "nba/team_details"
76
+ require_relative "nba/team_year_by_year_stats"
77
+ require_relative "nba/common_playoff_series"
78
+ require_relative "nba/schedule"
79
+ require_relative "nba/player_info"
80
+ require_relative "nba/common_player_info"
81
+ require_relative "nba/all_time_leader"
82
+ require_relative "nba/all_time_leaders"
83
+ require_relative "nba/league_dash_team_stat"
84
+ require_relative "nba/league_dash_team_stats"
85
+ require_relative "nba/box_score_hustle_player_stat"
86
+ require_relative "nba/box_score_hustle_team_stat"
87
+ require_relative "nba/box_score_hustle"
88
+ require_relative "nba/box_score_defensive_player_stat"
89
+ require_relative "nba/box_score_defensive_team_stat"
90
+ require_relative "nba/box_score_defensive_v2"
91
+ require_relative "nba/box_score_player_track_stat"
92
+ require_relative "nba/box_score_player_track_team_stat"
93
+ require_relative "nba/box_score_player_track"
94
+ require_relative "nba/box_score_summary"
95
+ require_relative "nba/box_score_summary_v2"
96
+ require_relative "nba/box_score_summary_v3_data"
97
+ require_relative "nba/box_score_summary_v3"
98
+ require_relative "nba/team_year"
99
+ require_relative "nba/common_team_years"
100
+ require_relative "nba/cume_stats_player_game"
101
+ require_relative "nba/cume_stats_player_total"
102
+ require_relative "nba/cume_stats_player"
103
+ require_relative "nba/cume_stats_player_games_entry"
104
+ require_relative "nba/cume_stats_player_games"
105
+ require_relative "nba/cume_stats_team_games_entry"
106
+ require_relative "nba/cume_stats_team_games"
107
+ require_relative "nba/cume_stats_team_player"
108
+ require_relative "nba/cume_stats_team_total"
109
+ require_relative "nba/cume_stats_team"
110
+ require_relative "nba/live_connection"
111
+ require_relative "nba/live_game"
112
+ require_relative "nba/live_scoreboard"
113
+ require_relative "nba/live_box_score"
114
+ require_relative "nba/live_play_by_play"
115
+ require_relative "nba/league_game_finder"
116
+ require_relative "nba/player_dashboard"
117
+ require_relative "nba/team_dashboard"
118
+ require_relative "nba/synergy_play_types"
119
+ require_relative "nba/win_probability"
120
+ require_relative "nba/shot_chart_league_wide"
121
+ require_relative "nba/box_score_starter_bench_stat"
122
+ require_relative "nba/box_score_traditional_v3"
123
+ require_relative "nba/box_score_advanced_v3"
124
+ require_relative "nba/box_score_scoring_v3"
125
+ require_relative "nba/box_score_misc_v3"
126
+ require_relative "nba/box_score_four_factors_v3"
127
+ require_relative "nba/box_score_usage_v3"
128
+ require_relative "nba/box_score_matchup_stat"
129
+ require_relative "nba/box_score_matchups_v3"
130
+ require_relative "nba/player_index"
131
+ require_relative "nba/player_career_by_college"
132
+ require_relative "nba/player_career_by_college_rollup"
133
+ require_relative "nba/player_estimated_metrics"
134
+ require_relative "nba/game_streak"
135
+ require_relative "nba/player_game_streak_finder"
136
+ require_relative "nba/pass_stat"
137
+ require_relative "nba/player_dash_pt_pass"
138
+ require_relative "nba/rebound_stat"
139
+ require_relative "nba/player_dash_pt_reb"
140
+ require_relative "nba/defensive_shot_stat"
141
+ require_relative "nba/player_dash_pt_shot_defend"
142
+ require_relative "nba/shot_stat"
143
+ require_relative "nba/player_dash_pt_shots"
144
+ require_relative "nba/fantasy_profile_stat"
145
+ require_relative "nba/player_fantasy_profile_bar_graph"
146
+ require_relative "nba/vs_player_stat"
147
+ require_relative "nba/player_vs_player"
148
+ require_relative "nba/team_info"
149
+ require_relative "nba/team_season_rank"
150
+ require_relative "nba/team_info_common"
151
+ require_relative "nba/team_estimated_metrics"
152
+ require_relative "nba/team_historical_leader"
153
+ require_relative "nba/team_historical_leaders"
154
+ require_relative "nba/team_game_streak"
155
+ require_relative "nba/team_game_streak_finder"
156
+ require_relative "nba/team_pass_stat"
157
+ require_relative "nba/team_dash_pt_pass"
158
+ require_relative "nba/team_rebound_stat"
159
+ require_relative "nba/team_dash_pt_reb"
160
+ require_relative "nba/team_shot_stat"
161
+ require_relative "nba/team_dash_pt_shots"
162
+ require_relative "nba/team_player_stat"
163
+ require_relative "nba/team_player_dashboard"
164
+ require_relative "nba/team_on_off_overall_stat"
165
+ require_relative "nba/team_on_off_player_stat"
166
+ require_relative "nba/team_player_on_off_details"
167
+ require_relative "nba/team_on_off_player_summary"
168
+ require_relative "nba/team_player_on_off_summary"
169
+ require_relative "nba/team_vs_player_stat"
170
+ require_relative "nba/team_vs_player"
171
+ require_relative "nba/team_and_players_vs_players_stat"
172
+ require_relative "nba/team_and_players_vs_players"
173
+ require_relative "nba/league_dash_player_clutch_stat"
174
+ require_relative "nba/league_dash_player_clutch"
175
+ require_relative "nba/league_dash_team_clutch_stat"
176
+ require_relative "nba/league_dash_team_clutch"
177
+ require_relative "nba/league_dash_player_pt_shot_stat"
178
+ require_relative "nba/league_dash_player_pt_shot"
179
+ require_relative "nba/league_dash_team_pt_shot_stat"
180
+ require_relative "nba/league_dash_team_pt_shot"
181
+ require_relative "nba/league_dash_opp_pt_shot"
182
+ require_relative "nba/league_dash_player_bio_stat"
183
+ require_relative "nba/league_dash_player_bio_stats"
184
+ require_relative "nba/league_dash_lineup_stat"
185
+ require_relative "nba/league_dash_lineups"
186
+ require_relative "nba/league_dash_player_shot_location_stat"
187
+ require_relative "nba/league_dash_player_shot_locations"
188
+ require_relative "nba/league_dash_team_shot_location_stat"
189
+ require_relative "nba/league_dash_team_shot_locations"
190
+ require_relative "nba/league_dash_pt_defend_stat"
191
+ require_relative "nba/league_dash_pt_defend"
192
+ require_relative "nba/league_dash_pt_team_defend_stat"
193
+ require_relative "nba/league_dash_pt_team_defend"
194
+ require_relative "nba/league_dash_pt_stats_stat"
195
+ require_relative "nba/league_dash_pt_stats"
196
+ require_relative "nba/league_lineup_viz_stat"
197
+ require_relative "nba/league_lineup_viz"
198
+ require_relative "nba/league_player_on_details_stat"
199
+ require_relative "nba/league_player_on_details"
200
+ require_relative "nba/league_season_matchup_stat"
201
+ require_relative "nba/league_season_matchups"
202
+ require_relative "nba/video_detail"
203
+ require_relative "nba/video_details_asset_entry"
204
+ require_relative "nba/video_details_asset"
205
+ require_relative "nba/video_details"
206
+ require_relative "nba/video_event"
207
+ require_relative "nba/video_events"
208
+ require_relative "nba/video_status_entry"
209
+ require_relative "nba/video_status"
210
+ require_relative "nba/assist_leader"
211
+ require_relative "nba/assist_leaders"
212
+ require_relative "nba/assist_tracker_entry"
213
+ require_relative "nba/assist_tracker"
214
+ require_relative "nba/ist_standing"
215
+ require_relative "nba/ist_standings"
216
+ require_relative "nba/play_by_play_v3"
217
+ require_relative "nba/scoreboard_v3"
218
+ require_relative "nba/playoff_matchup"
219
+ require_relative "nba/playoff_picture"
220
+ require_relative "nba/home_page_leader"
221
+ require_relative "nba/home_page_leaders"
222
+ require_relative "nba/defense_hub_stat"
223
+ require_relative "nba/defense_hub"
224
+ require_relative "nba/fantasy_widget_player"
225
+ require_relative "nba/fantasy_widget"
226
+ require_relative "nba/home_page_stat"
227
+ require_relative "nba/home_page_v2"
228
+ require_relative "nba/leaders_tile"
229
+ require_relative "nba/leaders_tiles"
230
+ require_relative "nba/matchup_rollup"
231
+ require_relative "nba/matchups_rollup"
232
+ require_relative "nba/shot_chart_lineup_detail"
233
+ require_relative "nba/box_score_similarity_score"
234
+ require_relative "nba/static"
235
+ require_relative "nba/league_hustle_stats_player_stat"
236
+ require_relative "nba/league_hustle_stats_player"
237
+ require_relative "nba/league_hustle_stats_team_stat"
238
+ require_relative "nba/league_hustle_stats_team"
239
+ require_relative "nba/hustle_stats_box_score"
240
+ require_relative "nba/team_game_log_stat"
241
+ require_relative "nba/team_game_logs"
242
+ require_relative "nba/infographic_fan_duel_player_stat"
243
+ require_relative "nba/infographic_fan_duel_player"
244
+ require_relative "nba/dunk_score_leader"
245
+ require_relative "nba/dunk_score_leaders"
246
+ require_relative "nba/video_event_asset"
247
+ require_relative "nba/video_events_asset"
248
+ require_relative "nba/schedule_international"
249
+ require_relative "nba/cli"
data/sig/equalizer.rbs ADDED
@@ -0,0 +1,3 @@
1
+ class Equalizer < Module
2
+ def self.new: (*Symbol) -> Module
3
+ end