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,419 @@
1
+ require "equalizer"
2
+ require "shale"
3
+
4
+ module NBA
5
+ # Represents game summary information from V3 API
6
+ class BoxScoreSummaryV3Data < Shale::Mapper
7
+ include Equalizer.new(:game_id)
8
+
9
+ # @!attribute [rw] game_id
10
+ # Returns the game ID
11
+ # @api public
12
+ # @example
13
+ # summary.game_id #=> "0022400001"
14
+ # @return [String] the game ID
15
+ attribute :game_id, Shale::Type::String
16
+
17
+ # @!attribute [rw] game_code
18
+ # Returns the game code
19
+ # @api public
20
+ # @example
21
+ # summary.game_code #=> "20241022/LALGSW"
22
+ # @return [String] the game code
23
+ attribute :game_code, Shale::Type::String
24
+
25
+ # @!attribute [rw] game_status
26
+ # Returns the game status ID
27
+ # @api public
28
+ # @example
29
+ # summary.game_status #=> 3
30
+ # @return [Integer] the status ID
31
+ attribute :game_status, Shale::Type::Integer
32
+
33
+ # @!attribute [rw] game_status_text
34
+ # Returns the game status text
35
+ # @api public
36
+ # @example
37
+ # summary.game_status_text #=> "Final"
38
+ # @return [String] the status text
39
+ attribute :game_status_text, Shale::Type::String
40
+
41
+ # @!attribute [rw] period
42
+ # Returns the current period
43
+ # @api public
44
+ # @example
45
+ # summary.period #=> 4
46
+ # @return [Integer] the period
47
+ attribute :period, Shale::Type::Integer
48
+
49
+ # @!attribute [rw] game_clock
50
+ # Returns the game clock time
51
+ # @api public
52
+ # @example
53
+ # summary.game_clock #=> "PT00M00.00S"
54
+ # @return [String] the game clock
55
+ attribute :game_clock, Shale::Type::String
56
+
57
+ # @!attribute [rw] game_time_utc
58
+ # Returns the game time in UTC
59
+ # @api public
60
+ # @example
61
+ # summary.game_time_utc #=> "2024-10-23T02:00:00Z"
62
+ # @return [String] the game time UTC
63
+ attribute :game_time_utc, Shale::Type::String
64
+
65
+ # @!attribute [rw] game_et
66
+ # Returns the game time in Eastern Time
67
+ # @api public
68
+ # @example
69
+ # summary.game_et #=> "2024-10-22T22:00:00"
70
+ # @return [String] the game time ET
71
+ attribute :game_et, Shale::Type::String
72
+
73
+ # @!attribute [rw] duration
74
+ # Returns the game duration in minutes
75
+ # @api public
76
+ # @example
77
+ # summary.duration #=> 138
78
+ # @return [Integer] the duration
79
+ attribute :duration, Shale::Type::Integer
80
+
81
+ # @!attribute [rw] attendance
82
+ # Returns the attendance
83
+ # @api public
84
+ # @example
85
+ # summary.attendance #=> 18064
86
+ # @return [Integer] the attendance
87
+ attribute :attendance, Shale::Type::Integer
88
+
89
+ # @!attribute [rw] sellout
90
+ # Returns the sellout status
91
+ # @api public
92
+ # @example
93
+ # summary.sellout #=> "1"
94
+ # @return [String] the sellout status
95
+ attribute :sellout, Shale::Type::String
96
+
97
+ # @!attribute [rw] arena_id
98
+ # Returns the arena ID
99
+ # @api public
100
+ # @example
101
+ # summary.arena_id #=> 10
102
+ # @return [Integer] the arena ID
103
+ attribute :arena_id, Shale::Type::Integer
104
+
105
+ # @!attribute [rw] arena_name
106
+ # Returns the arena name
107
+ # @api public
108
+ # @example
109
+ # summary.arena_name #=> "Chase Center"
110
+ # @return [String] the arena name
111
+ attribute :arena_name, Shale::Type::String
112
+
113
+ # @!attribute [rw] arena_city
114
+ # Returns the arena city
115
+ # @api public
116
+ # @example
117
+ # summary.arena_city #=> "San Francisco"
118
+ # @return [String] the arena city
119
+ attribute :arena_city, Shale::Type::String
120
+
121
+ # @!attribute [rw] arena_state
122
+ # Returns the arena state
123
+ # @api public
124
+ # @example
125
+ # summary.arena_state #=> "CA"
126
+ # @return [String] the arena state
127
+ attribute :arena_state, Shale::Type::String
128
+
129
+ # @!attribute [rw] arena_country
130
+ # Returns the arena country
131
+ # @api public
132
+ # @example
133
+ # summary.arena_country #=> "US"
134
+ # @return [String] the arena country
135
+ attribute :arena_country, Shale::Type::String
136
+
137
+ # @!attribute [rw] arena_timezone
138
+ # Returns the arena timezone
139
+ # @api public
140
+ # @example
141
+ # summary.arena_timezone #=> "America/Los_Angeles"
142
+ # @return [String] the arena timezone
143
+ attribute :arena_timezone, Shale::Type::String
144
+
145
+ # @!attribute [rw] home_team_id
146
+ # Returns the home team ID
147
+ # @api public
148
+ # @example
149
+ # summary.home_team_id #=> 1610612744
150
+ # @return [Integer] the home team ID
151
+ attribute :home_team_id, Shale::Type::Integer
152
+
153
+ # @!attribute [rw] home_team_name
154
+ # Returns the home team name
155
+ # @api public
156
+ # @example
157
+ # summary.home_team_name #=> "Warriors"
158
+ # @return [String] the home team name
159
+ attribute :home_team_name, Shale::Type::String
160
+
161
+ # @!attribute [rw] home_team_city
162
+ # Returns the home team city
163
+ # @api public
164
+ # @example
165
+ # summary.home_team_city #=> "Golden State"
166
+ # @return [String] the home team city
167
+ attribute :home_team_city, Shale::Type::String
168
+
169
+ # @!attribute [rw] home_team_tricode
170
+ # Returns the home team tricode
171
+ # @api public
172
+ # @example
173
+ # summary.home_team_tricode #=> "GSW"
174
+ # @return [String] the home team tricode
175
+ attribute :home_team_tricode, Shale::Type::String
176
+
177
+ # @!attribute [rw] home_team_slug
178
+ # Returns the home team slug
179
+ # @api public
180
+ # @example
181
+ # summary.home_team_slug #=> "warriors"
182
+ # @return [String] the home team slug
183
+ attribute :home_team_slug, Shale::Type::String
184
+
185
+ # @!attribute [rw] home_team_wins
186
+ # Returns the home team wins
187
+ # @api public
188
+ # @example
189
+ # summary.home_team_wins #=> 1
190
+ # @return [Integer] the home team wins
191
+ attribute :home_team_wins, Shale::Type::Integer
192
+
193
+ # @!attribute [rw] home_team_losses
194
+ # Returns the home team losses
195
+ # @api public
196
+ # @example
197
+ # summary.home_team_losses #=> 0
198
+ # @return [Integer] the home team losses
199
+ attribute :home_team_losses, Shale::Type::Integer
200
+
201
+ # @!attribute [rw] home_pts
202
+ # Returns home team total points
203
+ # @api public
204
+ # @example
205
+ # summary.home_pts #=> 118
206
+ # @return [Integer] total points
207
+ attribute :home_pts, Shale::Type::Integer
208
+
209
+ # @!attribute [rw] home_pts_q1
210
+ # Returns home team Q1 points
211
+ # @api public
212
+ # @example
213
+ # summary.home_pts_q1 #=> 28
214
+ # @return [Integer] Q1 points
215
+ attribute :home_pts_q1, Shale::Type::Integer
216
+
217
+ # @!attribute [rw] home_pts_q2
218
+ # Returns home team Q2 points
219
+ # @api public
220
+ # @example
221
+ # summary.home_pts_q2 #=> 32
222
+ # @return [Integer] Q2 points
223
+ attribute :home_pts_q2, Shale::Type::Integer
224
+
225
+ # @!attribute [rw] home_pts_q3
226
+ # Returns home team Q3 points
227
+ # @api public
228
+ # @example
229
+ # summary.home_pts_q3 #=> 25
230
+ # @return [Integer] Q3 points
231
+ attribute :home_pts_q3, Shale::Type::Integer
232
+
233
+ # @!attribute [rw] home_pts_q4
234
+ # Returns home team Q4 points
235
+ # @api public
236
+ # @example
237
+ # summary.home_pts_q4 #=> 33
238
+ # @return [Integer] Q4 points
239
+ attribute :home_pts_q4, Shale::Type::Integer
240
+
241
+ # @!attribute [rw] away_team_id
242
+ # Returns the away team ID
243
+ # @api public
244
+ # @example
245
+ # summary.away_team_id #=> 1610612747
246
+ # @return [Integer] the away team ID
247
+ attribute :away_team_id, Shale::Type::Integer
248
+
249
+ # @!attribute [rw] away_team_name
250
+ # Returns the away team name
251
+ # @api public
252
+ # @example
253
+ # summary.away_team_name #=> "Lakers"
254
+ # @return [String] the away team name
255
+ attribute :away_team_name, Shale::Type::String
256
+
257
+ # @!attribute [rw] away_team_city
258
+ # Returns the away team city
259
+ # @api public
260
+ # @example
261
+ # summary.away_team_city #=> "Los Angeles"
262
+ # @return [String] the away team city
263
+ attribute :away_team_city, Shale::Type::String
264
+
265
+ # @!attribute [rw] away_team_tricode
266
+ # Returns the away team tricode
267
+ # @api public
268
+ # @example
269
+ # summary.away_team_tricode #=> "LAL"
270
+ # @return [String] the away team tricode
271
+ attribute :away_team_tricode, Shale::Type::String
272
+
273
+ # @!attribute [rw] away_team_slug
274
+ # Returns the away team slug
275
+ # @api public
276
+ # @example
277
+ # summary.away_team_slug #=> "lakers"
278
+ # @return [String] the away team slug
279
+ attribute :away_team_slug, Shale::Type::String
280
+
281
+ # @!attribute [rw] away_team_wins
282
+ # Returns the away team wins
283
+ # @api public
284
+ # @example
285
+ # summary.away_team_wins #=> 0
286
+ # @return [Integer] the away team wins
287
+ attribute :away_team_wins, Shale::Type::Integer
288
+
289
+ # @!attribute [rw] away_team_losses
290
+ # Returns the away team losses
291
+ # @api public
292
+ # @example
293
+ # summary.away_team_losses #=> 1
294
+ # @return [Integer] the away team losses
295
+ attribute :away_team_losses, Shale::Type::Integer
296
+
297
+ # @!attribute [rw] away_pts
298
+ # Returns away team total points
299
+ # @api public
300
+ # @example
301
+ # summary.away_pts #=> 109
302
+ # @return [Integer] total points
303
+ attribute :away_pts, Shale::Type::Integer
304
+
305
+ # @!attribute [rw] away_pts_q1
306
+ # Returns away team Q1 points
307
+ # @api public
308
+ # @example
309
+ # summary.away_pts_q1 #=> 25
310
+ # @return [Integer] Q1 points
311
+ attribute :away_pts_q1, Shale::Type::Integer
312
+
313
+ # @!attribute [rw] away_pts_q2
314
+ # Returns away team Q2 points
315
+ # @api public
316
+ # @example
317
+ # summary.away_pts_q2 #=> 28
318
+ # @return [Integer] Q2 points
319
+ attribute :away_pts_q2, Shale::Type::Integer
320
+
321
+ # @!attribute [rw] away_pts_q3
322
+ # Returns away team Q3 points
323
+ # @api public
324
+ # @example
325
+ # summary.away_pts_q3 #=> 30
326
+ # @return [Integer] Q3 points
327
+ attribute :away_pts_q3, Shale::Type::Integer
328
+
329
+ # @!attribute [rw] away_pts_q4
330
+ # Returns away team Q4 points
331
+ # @api public
332
+ # @example
333
+ # summary.away_pts_q4 #=> 26
334
+ # @return [Integer] Q4 points
335
+ attribute :away_pts_q4, Shale::Type::Integer
336
+
337
+ # @!attribute [rw] lead_changes
338
+ # Returns the number of lead changes
339
+ # @api public
340
+ # @example
341
+ # summary.lead_changes #=> 12
342
+ # @return [Integer] lead changes
343
+ attribute :lead_changes, Shale::Type::Integer
344
+
345
+ # @!attribute [rw] times_tied
346
+ # Returns the number of times tied
347
+ # @api public
348
+ # @example
349
+ # summary.times_tied #=> 8
350
+ # @return [Integer] times tied
351
+ attribute :times_tied, Shale::Type::Integer
352
+
353
+ # @!attribute [rw] largest_lead
354
+ # Returns the largest lead
355
+ # @api public
356
+ # @example
357
+ # summary.largest_lead #=> 15
358
+ # @return [Integer] largest lead
359
+ attribute :largest_lead, Shale::Type::Integer
360
+
361
+ # @!attribute [rw] officials
362
+ # Returns the game officials
363
+ # @api public
364
+ # @example
365
+ # summary.officials #=> ["Scott Foster", "Tony Brothers", "Marc Davis"]
366
+ # @return [Array<String>] the officials
367
+ attribute :officials, Shale::Type::String, collection: true
368
+
369
+ # Returns the home team object
370
+ #
371
+ # @api public
372
+ # @example
373
+ # summary.home_team #=> #<NBA::Team>
374
+ # @return [Team, nil] the home team
375
+ def home_team
376
+ Teams.find(home_team_id)
377
+ end
378
+
379
+ # Returns the away team object
380
+ #
381
+ # @api public
382
+ # @example
383
+ # summary.away_team #=> #<NBA::Team>
384
+ # @return [Team, nil] the away team
385
+ def away_team
386
+ Teams.find(away_team_id)
387
+ end
388
+
389
+ # Returns whether the game is final
390
+ #
391
+ # @api public
392
+ # @example
393
+ # summary.final? #=> true
394
+ # @return [Boolean] true if final
395
+ def final?
396
+ game_status.eql?(3)
397
+ end
398
+
399
+ # Returns whether the game is in progress
400
+ #
401
+ # @api public
402
+ # @example
403
+ # summary.in_progress? #=> false
404
+ # @return [Boolean] true if in progress
405
+ def in_progress?
406
+ game_status.eql?(2)
407
+ end
408
+
409
+ # Returns whether the game has not started
410
+ #
411
+ # @api public
412
+ # @example
413
+ # summary.scheduled? #=> false
414
+ # @return [Boolean] true if scheduled
415
+ def scheduled?
416
+ game_status.eql?(1)
417
+ end
418
+ end
419
+ end
@@ -0,0 +1,229 @@
1
+ require "equalizer"
2
+ require "shale"
3
+
4
+ module NBA
5
+ # Represents a team's box score statistics for a game
6
+ class BoxScoreTeamStat < Shale::Mapper
7
+ include Equalizer.new(:game_id, :team_id)
8
+
9
+ # @!attribute [rw] game_id
10
+ # Returns the game ID
11
+ # @api public
12
+ # @example
13
+ # stat.game_id #=> "0022400350"
14
+ # @return [String] the game ID
15
+ attribute :game_id, Shale::Type::String
16
+
17
+ # @!attribute [rw] team_id
18
+ # Returns the team ID
19
+ # @api public
20
+ # @example
21
+ # stat.team_id #=> 1610612744
22
+ # @return [Integer] the team ID
23
+ attribute :team_id, Shale::Type::Integer
24
+
25
+ # @!attribute [rw] team_name
26
+ # Returns the team name
27
+ # @api public
28
+ # @example
29
+ # stat.team_name #=> "Warriors"
30
+ # @return [String] the team name
31
+ attribute :team_name, Shale::Type::String
32
+
33
+ # @!attribute [rw] team_abbreviation
34
+ # Returns the team abbreviation
35
+ # @api public
36
+ # @example
37
+ # stat.team_abbreviation #=> "GSW"
38
+ # @return [String] the team abbreviation
39
+ attribute :team_abbreviation, Shale::Type::String
40
+
41
+ # @!attribute [rw] team_city
42
+ # Returns the team city
43
+ # @api public
44
+ # @example
45
+ # stat.team_city #=> "Golden State"
46
+ # @return [String] the team city
47
+ attribute :team_city, Shale::Type::String
48
+
49
+ # @!attribute [rw] min
50
+ # Returns total minutes played
51
+ # @api public
52
+ # @example
53
+ # stat.min #=> "240:00"
54
+ # @return [String] the minutes
55
+ attribute :min, Shale::Type::String
56
+
57
+ # @!attribute [rw] fgm
58
+ # Returns field goals made
59
+ # @api public
60
+ # @example
61
+ # stat.fgm #=> 42
62
+ # @return [Integer] field goals made
63
+ attribute :fgm, Shale::Type::Integer
64
+
65
+ # @!attribute [rw] fga
66
+ # Returns field goals attempted
67
+ # @api public
68
+ # @example
69
+ # stat.fga #=> 88
70
+ # @return [Integer] field goals attempted
71
+ attribute :fga, Shale::Type::Integer
72
+
73
+ # @!attribute [rw] fg_pct
74
+ # Returns field goal percentage
75
+ # @api public
76
+ # @example
77
+ # stat.fg_pct #=> 0.477
78
+ # @return [Float] field goal percentage
79
+ attribute :fg_pct, Shale::Type::Float
80
+
81
+ # @!attribute [rw] fg3m
82
+ # Returns three-pointers made
83
+ # @api public
84
+ # @example
85
+ # stat.fg3m #=> 15
86
+ # @return [Integer] three-pointers made
87
+ attribute :fg3m, Shale::Type::Integer
88
+
89
+ # @!attribute [rw] fg3a
90
+ # Returns three-pointers attempted
91
+ # @api public
92
+ # @example
93
+ # stat.fg3a #=> 38
94
+ # @return [Integer] three-pointers attempted
95
+ attribute :fg3a, Shale::Type::Integer
96
+
97
+ # @!attribute [rw] fg3_pct
98
+ # Returns three-point percentage
99
+ # @api public
100
+ # @example
101
+ # stat.fg3_pct #=> 0.395
102
+ # @return [Float] three-point percentage
103
+ attribute :fg3_pct, Shale::Type::Float
104
+
105
+ # @!attribute [rw] ftm
106
+ # Returns free throws made
107
+ # @api public
108
+ # @example
109
+ # stat.ftm #=> 20
110
+ # @return [Integer] free throws made
111
+ attribute :ftm, Shale::Type::Integer
112
+
113
+ # @!attribute [rw] fta
114
+ # Returns free throws attempted
115
+ # @api public
116
+ # @example
117
+ # stat.fta #=> 25
118
+ # @return [Integer] free throws attempted
119
+ attribute :fta, Shale::Type::Integer
120
+
121
+ # @!attribute [rw] ft_pct
122
+ # Returns free throw percentage
123
+ # @api public
124
+ # @example
125
+ # stat.ft_pct #=> 0.800
126
+ # @return [Float] free throw percentage
127
+ attribute :ft_pct, Shale::Type::Float
128
+
129
+ # @!attribute [rw] oreb
130
+ # Returns offensive rebounds
131
+ # @api public
132
+ # @example
133
+ # stat.oreb #=> 10
134
+ # @return [Integer] offensive rebounds
135
+ attribute :oreb, Shale::Type::Integer
136
+
137
+ # @!attribute [rw] dreb
138
+ # Returns defensive rebounds
139
+ # @api public
140
+ # @example
141
+ # stat.dreb #=> 35
142
+ # @return [Integer] defensive rebounds
143
+ attribute :dreb, Shale::Type::Integer
144
+
145
+ # @!attribute [rw] reb
146
+ # Returns total rebounds
147
+ # @api public
148
+ # @example
149
+ # stat.reb #=> 45
150
+ # @return [Integer] total rebounds
151
+ attribute :reb, Shale::Type::Integer
152
+
153
+ # @!attribute [rw] ast
154
+ # Returns assists
155
+ # @api public
156
+ # @example
157
+ # stat.ast #=> 28
158
+ # @return [Integer] assists
159
+ attribute :ast, Shale::Type::Integer
160
+
161
+ # @!attribute [rw] stl
162
+ # Returns steals
163
+ # @api public
164
+ # @example
165
+ # stat.stl #=> 9
166
+ # @return [Integer] steals
167
+ attribute :stl, Shale::Type::Integer
168
+
169
+ # @!attribute [rw] blk
170
+ # Returns blocks
171
+ # @api public
172
+ # @example
173
+ # stat.blk #=> 6
174
+ # @return [Integer] blocks
175
+ attribute :blk, Shale::Type::Integer
176
+
177
+ # @!attribute [rw] tov
178
+ # Returns turnovers
179
+ # @api public
180
+ # @example
181
+ # stat.tov #=> 14
182
+ # @return [Integer] turnovers
183
+ attribute :tov, Shale::Type::Integer
184
+
185
+ # @!attribute [rw] pf
186
+ # Returns personal fouls
187
+ # @api public
188
+ # @example
189
+ # stat.pf #=> 18
190
+ # @return [Integer] personal fouls
191
+ attribute :pf, Shale::Type::Integer
192
+
193
+ # @!attribute [rw] pts
194
+ # Returns points
195
+ # @api public
196
+ # @example
197
+ # stat.pts #=> 119
198
+ # @return [Integer] points
199
+ attribute :pts, Shale::Type::Integer
200
+
201
+ # @!attribute [rw] plus_minus
202
+ # Returns plus/minus
203
+ # @api public
204
+ # @example
205
+ # stat.plus_minus #=> 8
206
+ # @return [Integer] plus/minus
207
+ attribute :plus_minus, Shale::Type::Integer
208
+
209
+ # Returns the team object
210
+ #
211
+ # @api public
212
+ # @example
213
+ # stat.team #=> #<NBA::Team>
214
+ # @return [Team, nil] the team object
215
+ def team
216
+ Teams.find(team_id)
217
+ end
218
+
219
+ # Returns the game object for this box score
220
+ #
221
+ # @api public
222
+ # @example
223
+ # stat.game #=> #<NBA::Game>
224
+ # @return [Game, nil] the game object
225
+ def game
226
+ Games.find(game_id)
227
+ end
228
+ end
229
+ end