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,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