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,152 @@
1
+ module NBA
2
+ # Represents player estimated metrics
3
+ class EstimatedMetricsStat < Shale::Mapper
4
+ include Equalizer.new(:player_id)
5
+
6
+ # @!attribute [rw] player_id
7
+ # Returns the player ID
8
+ # @api public
9
+ # @example
10
+ # stat.player_id #=> 201939
11
+ # @return [Integer] the player ID
12
+ attribute :player_id, Shale::Type::Integer
13
+
14
+ # @!attribute [rw] player_name
15
+ # Returns the player name
16
+ # @api public
17
+ # @example
18
+ # stat.player_name #=> "Stephen Curry"
19
+ # @return [String] the player name
20
+ attribute :player_name, Shale::Type::String
21
+
22
+ # @!attribute [rw] gp
23
+ # Returns games played
24
+ # @api public
25
+ # @example
26
+ # stat.gp #=> 74
27
+ # @return [Integer] games played
28
+ attribute :gp, Shale::Type::Integer
29
+
30
+ # @!attribute [rw] w
31
+ # Returns wins
32
+ # @api public
33
+ # @example
34
+ # stat.w #=> 46
35
+ # @return [Integer] wins
36
+ attribute :w, Shale::Type::Integer
37
+
38
+ # @!attribute [rw] l
39
+ # Returns losses
40
+ # @api public
41
+ # @example
42
+ # stat.l #=> 28
43
+ # @return [Integer] losses
44
+ attribute :l, Shale::Type::Integer
45
+
46
+ # @!attribute [rw] w_pct
47
+ # Returns win percentage
48
+ # @api public
49
+ # @example
50
+ # stat.w_pct #=> 0.622
51
+ # @return [Float] win percentage
52
+ attribute :w_pct, Shale::Type::Float
53
+
54
+ # @!attribute [rw] min
55
+ # Returns minutes per game
56
+ # @api public
57
+ # @example
58
+ # stat.min #=> 32.7
59
+ # @return [Float] minutes
60
+ attribute :min, Shale::Type::Float
61
+
62
+ # @!attribute [rw] e_off_rating
63
+ # Returns estimated offensive rating
64
+ # @api public
65
+ # @example
66
+ # stat.e_off_rating #=> 117.5
67
+ # @return [Float] estimated offensive rating
68
+ attribute :e_off_rating, Shale::Type::Float
69
+
70
+ # @!attribute [rw] e_def_rating
71
+ # Returns estimated defensive rating
72
+ # @api public
73
+ # @example
74
+ # stat.e_def_rating #=> 110.2
75
+ # @return [Float] estimated defensive rating
76
+ attribute :e_def_rating, Shale::Type::Float
77
+
78
+ # @!attribute [rw] e_net_rating
79
+ # Returns estimated net rating
80
+ # @api public
81
+ # @example
82
+ # stat.e_net_rating #=> 7.3
83
+ # @return [Float] estimated net rating
84
+ attribute :e_net_rating, Shale::Type::Float
85
+
86
+ # @!attribute [rw] e_ast_ratio
87
+ # Returns estimated assist ratio
88
+ # @api public
89
+ # @example
90
+ # stat.e_ast_ratio #=> 25.5
91
+ # @return [Float] estimated assist ratio
92
+ attribute :e_ast_ratio, Shale::Type::Float
93
+
94
+ # @!attribute [rw] e_oreb_pct
95
+ # Returns estimated offensive rebound percentage
96
+ # @api public
97
+ # @example
98
+ # stat.e_oreb_pct #=> 2.5
99
+ # @return [Float] estimated offensive rebound percentage
100
+ attribute :e_oreb_pct, Shale::Type::Float
101
+
102
+ # @!attribute [rw] e_dreb_pct
103
+ # Returns estimated defensive rebound percentage
104
+ # @api public
105
+ # @example
106
+ # stat.e_dreb_pct #=> 15.5
107
+ # @return [Float] estimated defensive rebound percentage
108
+ attribute :e_dreb_pct, Shale::Type::Float
109
+
110
+ # @!attribute [rw] e_reb_pct
111
+ # Returns estimated rebound percentage
112
+ # @api public
113
+ # @example
114
+ # stat.e_reb_pct #=> 9.5
115
+ # @return [Float] estimated rebound percentage
116
+ attribute :e_reb_pct, Shale::Type::Float
117
+
118
+ # @!attribute [rw] e_tov_pct
119
+ # Returns estimated turnover percentage
120
+ # @api public
121
+ # @example
122
+ # stat.e_tov_pct #=> 11.5
123
+ # @return [Float] estimated turnover percentage
124
+ attribute :e_tov_pct, Shale::Type::Float
125
+
126
+ # @!attribute [rw] e_usg_pct
127
+ # Returns estimated usage percentage
128
+ # @api public
129
+ # @example
130
+ # stat.e_usg_pct #=> 31.5
131
+ # @return [Float] estimated usage percentage
132
+ attribute :e_usg_pct, Shale::Type::Float
133
+
134
+ # @!attribute [rw] e_pace
135
+ # Returns estimated pace
136
+ # @api public
137
+ # @example
138
+ # stat.e_pace #=> 101.5
139
+ # @return [Float] estimated pace
140
+ attribute :e_pace, Shale::Type::Float
141
+
142
+ # Returns the player object
143
+ #
144
+ # @api public
145
+ # @example
146
+ # stat.player #=> #<NBA::Player>
147
+ # @return [Player, nil] the player object
148
+ def player
149
+ Players.find(player_id)
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,142 @@
1
+ require "equalizer"
2
+ require "shale"
3
+ require_relative "players"
4
+
5
+ module NBA
6
+ # Represents a player's fantasy profile statistics
7
+ #
8
+ # @api public
9
+ class FantasyProfileStat < Shale::Mapper
10
+ include Equalizer.new(:player_id, :player_name)
11
+
12
+ # @!attribute [rw] player_id
13
+ # Returns the player ID
14
+ # @api public
15
+ # @example
16
+ # stat.player_id #=> 201939
17
+ # @return [Integer, nil] the player's ID
18
+ attribute :player_id, Shale::Type::Integer
19
+
20
+ # @!attribute [rw] player_name
21
+ # Returns the player name
22
+ # @api public
23
+ # @example
24
+ # stat.player_name #=> "Stephen Curry"
25
+ # @return [String, nil] the player's name
26
+ attribute :player_name, Shale::Type::String
27
+
28
+ # @!attribute [rw] team_id
29
+ # Returns the team ID
30
+ # @api public
31
+ # @example
32
+ # stat.team_id #=> 1610612744
33
+ # @return [Integer, nil] the team's ID
34
+ attribute :team_id, Shale::Type::Integer
35
+
36
+ # @!attribute [rw] team_abbreviation
37
+ # Returns the team abbreviation
38
+ # @api public
39
+ # @example
40
+ # stat.team_abbreviation #=> "GSW"
41
+ # @return [String, nil] the team's abbreviation
42
+ attribute :team_abbreviation, Shale::Type::String
43
+
44
+ # @!attribute [rw] fan_duel_pts
45
+ # Returns FanDuel fantasy points
46
+ # @api public
47
+ # @example
48
+ # stat.fan_duel_pts #=> 45.2
49
+ # @return [Float, nil] FanDuel fantasy points
50
+ attribute :fan_duel_pts, Shale::Type::Float
51
+
52
+ # @!attribute [rw] nba_fantasy_pts
53
+ # Returns NBA Fantasy points
54
+ # @api public
55
+ # @example
56
+ # stat.nba_fantasy_pts #=> 52.1
57
+ # @return [Float, nil] NBA Fantasy points
58
+ attribute :nba_fantasy_pts, Shale::Type::Float
59
+
60
+ # @!attribute [rw] pts
61
+ # Returns points per game
62
+ # @api public
63
+ # @example
64
+ # stat.pts #=> 26.4
65
+ # @return [Float, nil] points per game
66
+ attribute :pts, Shale::Type::Float
67
+
68
+ # @!attribute [rw] reb
69
+ # Returns rebounds per game
70
+ # @api public
71
+ # @example
72
+ # stat.reb #=> 5.7
73
+ # @return [Float, nil] rebounds per game
74
+ attribute :reb, Shale::Type::Float
75
+
76
+ # @!attribute [rw] ast
77
+ # Returns assists per game
78
+ # @api public
79
+ # @example
80
+ # stat.ast #=> 6.1
81
+ # @return [Float, nil] assists per game
82
+ attribute :ast, Shale::Type::Float
83
+
84
+ # @!attribute [rw] fg3m
85
+ # Returns 3-point field goals made
86
+ # @api public
87
+ # @example
88
+ # stat.fg3m #=> 4.8
89
+ # @return [Float, nil] 3-point field goals made
90
+ attribute :fg3m, Shale::Type::Float
91
+
92
+ # @!attribute [rw] fg_pct
93
+ # Returns field goal percentage
94
+ # @api public
95
+ # @example
96
+ # stat.fg_pct #=> 0.472
97
+ # @return [Float, nil] field goal percentage
98
+ attribute :fg_pct, Shale::Type::Float
99
+
100
+ # @!attribute [rw] ft_pct
101
+ # Returns free throw percentage
102
+ # @api public
103
+ # @example
104
+ # stat.ft_pct #=> 0.908
105
+ # @return [Float, nil] free throw percentage
106
+ attribute :ft_pct, Shale::Type::Float
107
+
108
+ # @!attribute [rw] stl
109
+ # Returns steals per game
110
+ # @api public
111
+ # @example
112
+ # stat.stl #=> 1.2
113
+ # @return [Float, nil] steals per game
114
+ attribute :stl, Shale::Type::Float
115
+
116
+ # @!attribute [rw] blk
117
+ # Returns blocks per game
118
+ # @api public
119
+ # @example
120
+ # stat.blk #=> 0.3
121
+ # @return [Float, nil] blocks per game
122
+ attribute :blk, Shale::Type::Float
123
+
124
+ # @!attribute [rw] tov
125
+ # Returns turnovers per game
126
+ # @api public
127
+ # @example
128
+ # stat.tov #=> 3.1
129
+ # @return [Float, nil] turnovers per game
130
+ attribute :tov, Shale::Type::Float
131
+
132
+ # Returns the player
133
+ #
134
+ # @api public
135
+ # @example
136
+ # stat.player #=> #<NBA::Player id=201939 ...>
137
+ # @return [Player, nil] the player object
138
+ def player
139
+ Players.find(player_id)
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,72 @@
1
+ require "json"
2
+ require_relative "client"
3
+ require_relative "collection"
4
+ require_relative "fantasy_widget_player"
5
+ require_relative "league"
6
+ require_relative "response_parser"
7
+ require_relative "utils"
8
+
9
+ module NBA
10
+ # Provides methods to retrieve NBA fantasy widget statistics
11
+ module FantasyWidget
12
+ # Result set name for fantasy widget
13
+ # @return [String] the result set name
14
+ RESULT_SET = "FantasyWidgetResult".freeze
15
+
16
+ # Retrieves fantasy widget player statistics
17
+ #
18
+ # @api public
19
+ # @example
20
+ # players = NBA::FantasyWidget.all(season: 2023)
21
+ # players.each { |p| puts "#{p.player_name}: #{p.fan_duel_pts}" }
22
+ # @param season [Integer] the season year (defaults to current season)
23
+ # @param season_type [String] the season type (Regular Season, Playoffs, etc.)
24
+ # @param active_players [String] active players filter (Y, N)
25
+ # @param last_n_games [Integer] filter to last N games
26
+ # @param league [String, League] the league ID or League object
27
+ # @param client [Client] the API client to use
28
+ # @return [Collection] a collection of fantasy widget players
29
+ def self.all(season: Utils.current_season, season_type: "Regular Season",
30
+ active_players: "Y", last_n_games: 0, league: League::NBA, client: CLIENT)
31
+ league_id = Utils.extract_league_id(league)
32
+ opts = {season: season, season_type: season_type, active_players: active_players,
33
+ last_n_games: last_n_games, league_id: league_id}
34
+ ResponseParser.parse(client.get(build_path(opts)), result_set: RESULT_SET) do |data|
35
+ build_player(data)
36
+ end
37
+ end
38
+
39
+ # Builds the API request path
40
+ # @api private
41
+ # @return [String] the request path
42
+ def self.build_path(opts)
43
+ "fantasywidget?ActivePlayers=#{opts[:active_players]}&LastNGames=#{opts[:last_n_games]}" \
44
+ "&LeagueID=#{opts[:league_id]}&Season=#{Utils.format_season(opts[:season])}" \
45
+ "&SeasonType=#{opts[:season_type]}"
46
+ end
47
+ private_class_method :build_path
48
+
49
+ # Builds a FantasyWidgetPlayer object from raw data
50
+ # @api private
51
+ # @param data [Hash] the row data
52
+ # @return [FantasyWidgetPlayer] the player object
53
+ def self.build_player(data)
54
+ FantasyWidgetPlayer.new(**player_attributes(data))
55
+ end
56
+ private_class_method :build_player
57
+
58
+ # Extracts player attributes from data
59
+ # @api private
60
+ # @param data [Hash] the row data
61
+ # @return [Hash] player attributes
62
+ def self.player_attributes(data)
63
+ {player_id: data["PLAYER_ID"], player_name: data["PLAYER_NAME"],
64
+ player_position: data["PLAYER_POSITION"], team_id: data["TEAM_ID"],
65
+ team_abbreviation: data["TEAM_ABBREVIATION"], gp: data["GP"],
66
+ min: data["MIN"], fan_duel_pts: data["FAN_DUEL_PTS"],
67
+ nba_fantasy_pts: data["NBA_FANTASY_PTS"], pts: data["PTS"],
68
+ reb: data["REB"], ast: data["AST"]}
69
+ end
70
+ private_class_method :player_attributes
71
+ end
72
+ end
@@ -0,0 +1,98 @@
1
+ require "equalizer"
2
+ require "shale"
3
+
4
+ module NBA
5
+ # Represents a player's fantasy statistics from the fantasy widget
6
+ #
7
+ # @api public
8
+ # @example
9
+ # player.player_name #=> "Stephen Curry"
10
+ # player.fan_duel_pts #=> 45.2
11
+ class FantasyWidgetPlayer < Shale::Mapper
12
+ include Equalizer.new(:player_id)
13
+
14
+ # Returns the player ID
15
+ # @api public
16
+ # @example
17
+ # player.player_id #=> 201939
18
+ # @return [Integer, nil] the player ID
19
+ attribute :player_id, Shale::Type::Integer
20
+
21
+ # Returns the player name
22
+ # @api public
23
+ # @example
24
+ # player.player_name #=> "Stephen Curry"
25
+ # @return [String, nil] the player name
26
+ attribute :player_name, Shale::Type::String
27
+
28
+ # Returns the player position
29
+ # @api public
30
+ # @example
31
+ # player.player_position #=> "G"
32
+ # @return [String, nil] the player position
33
+ attribute :player_position, Shale::Type::String
34
+
35
+ # Returns the team ID
36
+ # @api public
37
+ # @example
38
+ # player.team_id #=> 1610612744
39
+ # @return [Integer, nil] the team ID
40
+ attribute :team_id, Shale::Type::Integer
41
+
42
+ # Returns the team abbreviation
43
+ # @api public
44
+ # @example
45
+ # player.team_abbreviation #=> "GSW"
46
+ # @return [String, nil] the team abbreviation
47
+ attribute :team_abbreviation, Shale::Type::String
48
+
49
+ # Returns games played
50
+ # @api public
51
+ # @example
52
+ # player.gp #=> 74
53
+ # @return [Integer, nil] games played
54
+ attribute :gp, Shale::Type::Integer
55
+
56
+ # Returns minutes played
57
+ # @api public
58
+ # @example
59
+ # player.min #=> 32.7
60
+ # @return [Float, nil] minutes played
61
+ attribute :min, Shale::Type::Float
62
+
63
+ # Returns FanDuel points
64
+ # @api public
65
+ # @example
66
+ # player.fan_duel_pts #=> 45.2
67
+ # @return [Float, nil] FanDuel points
68
+ attribute :fan_duel_pts, Shale::Type::Float
69
+
70
+ # Returns NBA fantasy points
71
+ # @api public
72
+ # @example
73
+ # player.nba_fantasy_pts #=> 52.8
74
+ # @return [Float, nil] NBA fantasy points
75
+ attribute :nba_fantasy_pts, Shale::Type::Float
76
+
77
+ # Returns points
78
+ # @api public
79
+ # @example
80
+ # player.pts #=> 26.4
81
+ # @return [Float, nil] points
82
+ attribute :pts, Shale::Type::Float
83
+
84
+ # Returns rebounds
85
+ # @api public
86
+ # @example
87
+ # player.reb #=> 5.1
88
+ # @return [Float, nil] rebounds
89
+ attribute :reb, Shale::Type::Float
90
+
91
+ # Returns assists
92
+ # @api public
93
+ # @example
94
+ # player.ast #=> 6.3
95
+ # @return [Float, nil] assists
96
+ attribute :ast, Shale::Type::Float
97
+ end
98
+ end