stattleship-ruby 0.1.19

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 (264) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +263 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +8 -0
  7. data/CODE_OF_CONDUCT.md +13 -0
  8. data/Gemfile +15 -0
  9. data/LICENSE +1 -0
  10. data/README.md +75 -0
  11. data/Rakefile +1 -0
  12. data/bin/console +7 -0
  13. data/bin/game_log_officials +32 -0
  14. data/bin/game_logs +69 -0
  15. data/bin/games +42 -0
  16. data/bin/in_progress +19 -0
  17. data/bin/injuries +18 -0
  18. data/bin/officials +42 -0
  19. data/bin/players +45 -0
  20. data/bin/scoreboard +43 -0
  21. data/bin/setup +7 -0
  22. data/bin/stat_leaders +25 -0
  23. data/bin/team_game_logs +35 -0
  24. data/bin/teams +29 -0
  25. data/bin/top_stats +25 -0
  26. data/bin/total_player_stat +33 -0
  27. data/bin/total_team_stat +22 -0
  28. data/examples/README.md +118 -0
  29. data/examples/baseball_feats.rb +35 -0
  30. data/examples/baseball_games.rb +32 -0
  31. data/examples/baseball_player_game_logs.rb +33 -0
  32. data/examples/baseball_stat_leaders.rb +30 -0
  33. data/examples/basketball_game_logs.rb +33 -0
  34. data/examples/basketball_injuries.rb +36 -0
  35. data/examples/basketball_season_player_performance_rankings.rb +31 -0
  36. data/examples/basketball_stat_leaders.rb +40 -0
  37. data/examples/basketball_team_game_logs.rb +38 -0
  38. data/examples/basketball_top_stats.rb +43 -0
  39. data/examples/basketball_winning_streaks.rb +27 -0
  40. data/examples/bears_team_game_logs.rb +46 -0
  41. data/examples/football_feats.rb +49 -0
  42. data/examples/football_game_logs.rb +40 -0
  43. data/examples/football_players.rb +43 -0
  44. data/examples/football_stats.rb +50 -0
  45. data/examples/football_total_player_stat.rb +32 -0
  46. data/examples/hockey_games.rb +56 -0
  47. data/examples/hockey_penalties.rb +47 -0
  48. data/examples/hockey_scoring_plays.rb +55 -0
  49. data/examples/hockey_team_ranked_streaks.rb +27 -0
  50. data/examples/hockey_teams.rb +54 -0
  51. data/examples/hockey_total_team_stat.rb +32 -0
  52. data/examples/sample.env +2 -0
  53. data/lib/stattleship.rb +117 -0
  54. data/lib/stattleship/baseball_feats.rb +15 -0
  55. data/lib/stattleship/baseball_game_logs.rb +159 -0
  56. data/lib/stattleship/baseball_games.rb +15 -0
  57. data/lib/stattleship/baseball_injuries.rb +15 -0
  58. data/lib/stattleship/baseball_penalties.rb +15 -0
  59. data/lib/stattleship/baseball_players.rb +15 -0
  60. data/lib/stattleship/baseball_scoring_plays.rb +15 -0
  61. data/lib/stattleship/baseball_stat_leaders.rb +15 -0
  62. data/lib/stattleship/baseball_stats.rb +15 -0
  63. data/lib/stattleship/baseball_team_game_logs.rb +142 -0
  64. data/lib/stattleship/baseball_team_outcome_streaks.rb +15 -0
  65. data/lib/stattleship/baseball_teams.rb +15 -0
  66. data/lib/stattleship/baseball_top_stats.rb +15 -0
  67. data/lib/stattleship/baseball_total_player_stat.rb +15 -0
  68. data/lib/stattleship/baseball_total_team_stat.rb +15 -0
  69. data/lib/stattleship/basketball_feats.rb +15 -0
  70. data/lib/stattleship/basketball_game_logs.rb +111 -0
  71. data/lib/stattleship/basketball_games.rb +15 -0
  72. data/lib/stattleship/basketball_injuries.rb +15 -0
  73. data/lib/stattleship/basketball_penalties.rb +15 -0
  74. data/lib/stattleship/basketball_players.rb +15 -0
  75. data/lib/stattleship/basketball_scoring_plays.rb +15 -0
  76. data/lib/stattleship/basketball_stat_leaders.rb +15 -0
  77. data/lib/stattleship/basketball_stats.rb +15 -0
  78. data/lib/stattleship/basketball_team_game_logs.rb +113 -0
  79. data/lib/stattleship/basketball_team_outcome_streaks.rb +15 -0
  80. data/lib/stattleship/basketball_teams.rb +15 -0
  81. data/lib/stattleship/basketball_top_stats.rb +15 -0
  82. data/lib/stattleship/basketball_total_player_stat.rb +15 -0
  83. data/lib/stattleship/basketball_total_team_stat.rb +15 -0
  84. data/lib/stattleship/client/client.rb +101 -0
  85. data/lib/stattleship/client/configuration.rb +42 -0
  86. data/lib/stattleship/endpoint.rb +208 -0
  87. data/lib/stattleship/feats.rb +150 -0
  88. data/lib/stattleship/football_feats.rb +15 -0
  89. data/lib/stattleship/football_game_logs.rb +255 -0
  90. data/lib/stattleship/football_games.rb +15 -0
  91. data/lib/stattleship/football_injuries.rb +15 -0
  92. data/lib/stattleship/football_penalties.rb +15 -0
  93. data/lib/stattleship/football_players.rb +15 -0
  94. data/lib/stattleship/football_scoring_plays.rb +15 -0
  95. data/lib/stattleship/football_stat_leaders.rb +15 -0
  96. data/lib/stattleship/football_stats.rb +15 -0
  97. data/lib/stattleship/football_team_game_logs.rb +176 -0
  98. data/lib/stattleship/football_team_outcome_streaks.rb +15 -0
  99. data/lib/stattleship/football_teams.rb +15 -0
  100. data/lib/stattleship/football_top_stats.rb +15 -0
  101. data/lib/stattleship/football_total_player_stat.rb +15 -0
  102. data/lib/stattleship/football_total_team_stat.rb +15 -0
  103. data/lib/stattleship/formatters/stat_formatter.rb +28 -0
  104. data/lib/stattleship/game_logs.rb +97 -0
  105. data/lib/stattleship/games.rb +38 -0
  106. data/lib/stattleship/hockey_feats.rb +15 -0
  107. data/lib/stattleship/hockey_game_logs.rb +107 -0
  108. data/lib/stattleship/hockey_games.rb +15 -0
  109. data/lib/stattleship/hockey_injuries.rb +15 -0
  110. data/lib/stattleship/hockey_penalties.rb +32 -0
  111. data/lib/stattleship/hockey_players.rb +15 -0
  112. data/lib/stattleship/hockey_scoring_plays.rb +15 -0
  113. data/lib/stattleship/hockey_stat_leaders.rb +15 -0
  114. data/lib/stattleship/hockey_stats.rb +15 -0
  115. data/lib/stattleship/hockey_team_game_logs.rb +128 -0
  116. data/lib/stattleship/hockey_team_outcome_streaks.rb +15 -0
  117. data/lib/stattleship/hockey_teams.rb +15 -0
  118. data/lib/stattleship/hockey_top_stats.rb +15 -0
  119. data/lib/stattleship/hockey_total_player_stat.rb +15 -0
  120. data/lib/stattleship/hockey_total_team_stat.rb +15 -0
  121. data/lib/stattleship/injuries.rb +32 -0
  122. data/lib/stattleship/models.rb +19 -0
  123. data/lib/stattleship/models/game.rb +360 -0
  124. data/lib/stattleship/models/injury.rb +22 -0
  125. data/lib/stattleship/models/league.rb +35 -0
  126. data/lib/stattleship/models/official.rb +20 -0
  127. data/lib/stattleship/models/penalty.rb +133 -0
  128. data/lib/stattleship/models/player.rb +124 -0
  129. data/lib/stattleship/models/playing_position.rb +17 -0
  130. data/lib/stattleship/models/ranking.rb +96 -0
  131. data/lib/stattleship/models/scoring_play.rb +201 -0
  132. data/lib/stattleship/models/scoring_player.rb +22 -0
  133. data/lib/stattleship/models/season.rb +18 -0
  134. data/lib/stattleship/models/team.rb +78 -0
  135. data/lib/stattleship/models/team_outcome_streak.rb +88 -0
  136. data/lib/stattleship/models/venue.rb +32 -0
  137. data/lib/stattleship/params.rb +102 -0
  138. data/lib/stattleship/params/baseball_feats_params.rb +6 -0
  139. data/lib/stattleship/params/baseball_game_logs_params.rb +6 -0
  140. data/lib/stattleship/params/baseball_games_params.rb +6 -0
  141. data/lib/stattleship/params/baseball_injuries_params.rb +6 -0
  142. data/lib/stattleship/params/baseball_penalties_params.rb +6 -0
  143. data/lib/stattleship/params/baseball_players_params.rb +6 -0
  144. data/lib/stattleship/params/baseball_scoring_plays_params.rb +6 -0
  145. data/lib/stattleship/params/baseball_stat_leaders_params.rb +6 -0
  146. data/lib/stattleship/params/baseball_stats_params.rb +6 -0
  147. data/lib/stattleship/params/baseball_team_game_logs_params.rb +6 -0
  148. data/lib/stattleship/params/baseball_team_outcome_streaks_params.rb +9 -0
  149. data/lib/stattleship/params/baseball_team_stats_params.rb +10 -0
  150. data/lib/stattleship/params/baseball_teams_params.rb +6 -0
  151. data/lib/stattleship/params/baseball_top_stats_params.rb +6 -0
  152. data/lib/stattleship/params/baseball_total_player_stat_params.rb +6 -0
  153. data/lib/stattleship/params/baseball_total_team_stat_params.rb +11 -0
  154. data/lib/stattleship/params/basketball_feats_params.rb +6 -0
  155. data/lib/stattleship/params/basketball_game_logs_params.rb +6 -0
  156. data/lib/stattleship/params/basketball_games_params.rb +6 -0
  157. data/lib/stattleship/params/basketball_injuries_params.rb +6 -0
  158. data/lib/stattleship/params/basketball_penalties_params.rb +6 -0
  159. data/lib/stattleship/params/basketball_players_params.rb +6 -0
  160. data/lib/stattleship/params/basketball_scoring_plays_params.rb +6 -0
  161. data/lib/stattleship/params/basketball_stat_leaders_params.rb +6 -0
  162. data/lib/stattleship/params/basketball_stats_params.rb +6 -0
  163. data/lib/stattleship/params/basketball_team_game_logs_params.rb +6 -0
  164. data/lib/stattleship/params/basketball_team_outcome_streaks_params.rb +9 -0
  165. data/lib/stattleship/params/basketball_team_stats_params.rb +10 -0
  166. data/lib/stattleship/params/basketball_teams_params.rb +6 -0
  167. data/lib/stattleship/params/basketball_top_stats_params.rb +6 -0
  168. data/lib/stattleship/params/basketball_total_player_stat_params.rb +6 -0
  169. data/lib/stattleship/params/basketball_total_team_stat_params.rb +11 -0
  170. data/lib/stattleship/params/feats_params.rb +23 -0
  171. data/lib/stattleship/params/football_feats_params.rb +6 -0
  172. data/lib/stattleship/params/football_game_logs_params.rb +11 -0
  173. data/lib/stattleship/params/football_games_params.rb +6 -0
  174. data/lib/stattleship/params/football_injuries_params.rb +6 -0
  175. data/lib/stattleship/params/football_penalties_params.rb +6 -0
  176. data/lib/stattleship/params/football_players_params.rb +6 -0
  177. data/lib/stattleship/params/football_scoring_plays_params.rb +6 -0
  178. data/lib/stattleship/params/football_stat_leaders_params.rb +6 -0
  179. data/lib/stattleship/params/football_stats_params.rb +6 -0
  180. data/lib/stattleship/params/football_team_game_logs_params.rb +6 -0
  181. data/lib/stattleship/params/football_team_outcome_streaks_params.rb +9 -0
  182. data/lib/stattleship/params/football_team_stats_params.rb +10 -0
  183. data/lib/stattleship/params/football_teams_params.rb +6 -0
  184. data/lib/stattleship/params/football_top_stats_params.rb +6 -0
  185. data/lib/stattleship/params/football_total_player_stat_params.rb +6 -0
  186. data/lib/stattleship/params/football_total_team_stat_params.rb +11 -0
  187. data/lib/stattleship/params/game_logs_params.rb +13 -0
  188. data/lib/stattleship/params/game_time_params.rb +17 -0
  189. data/lib/stattleship/params/games_params.rb +13 -0
  190. data/lib/stattleship/params/hockey_feats_params.rb +6 -0
  191. data/lib/stattleship/params/hockey_game_logs_params.rb +6 -0
  192. data/lib/stattleship/params/hockey_games_params.rb +6 -0
  193. data/lib/stattleship/params/hockey_injuries_params.rb +6 -0
  194. data/lib/stattleship/params/hockey_penalties_params.rb +6 -0
  195. data/lib/stattleship/params/hockey_players_params.rb +6 -0
  196. data/lib/stattleship/params/hockey_scoring_plays_params.rb +6 -0
  197. data/lib/stattleship/params/hockey_stat_leaders_params.rb +6 -0
  198. data/lib/stattleship/params/hockey_stats_params.rb +6 -0
  199. data/lib/stattleship/params/hockey_team_game_logs_params.rb +6 -0
  200. data/lib/stattleship/params/hockey_team_outcome_streaks_params.rb +9 -0
  201. data/lib/stattleship/params/hockey_team_stats_params.rb +10 -0
  202. data/lib/stattleship/params/hockey_teams_params.rb +6 -0
  203. data/lib/stattleship/params/hockey_top_stats_params.rb +6 -0
  204. data/lib/stattleship/params/hockey_total_player_stat_params.rb +6 -0
  205. data/lib/stattleship/params/hockey_total_team_stat_params.rb +11 -0
  206. data/lib/stattleship/params/injuries_params.rb +11 -0
  207. data/lib/stattleship/params/penalties_params.rb +11 -0
  208. data/lib/stattleship/params/players_params.rb +12 -0
  209. data/lib/stattleship/params/query_params.rb +50 -0
  210. data/lib/stattleship/params/rankings_params.rb +15 -0
  211. data/lib/stattleship/params/scoring_plays_params.rb +12 -0
  212. data/lib/stattleship/params/stat_leaders_params.rb +17 -0
  213. data/lib/stattleship/params/stats_params.rb +17 -0
  214. data/lib/stattleship/params/team_game_logs_params.rb +12 -0
  215. data/lib/stattleship/params/team_outcome_streaks_params.rb +24 -0
  216. data/lib/stattleship/params/teams_params.rb +9 -0
  217. data/lib/stattleship/params/top_stats_params.rb +17 -0
  218. data/lib/stattleship/params/total_player_stat_params.rb +17 -0
  219. data/lib/stattleship/params/total_team_stat_params.rb +18 -0
  220. data/lib/stattleship/penalties.rb +26 -0
  221. data/lib/stattleship/players.rb +26 -0
  222. data/lib/stattleship/rankings.rb +51 -0
  223. data/lib/stattleship/scoring_plays.rb +30 -0
  224. data/lib/stattleship/stat_leaders.rb +43 -0
  225. data/lib/stattleship/stats.rb +76 -0
  226. data/lib/stattleship/team_game_logs.rb +90 -0
  227. data/lib/stattleship/team_outcome_streaks.rb +28 -0
  228. data/lib/stattleship/teams.rb +20 -0
  229. data/lib/stattleship/top_stats.rb +58 -0
  230. data/lib/stattleship/total_player_stat.rb +37 -0
  231. data/lib/stattleship/total_team_stat.rb +30 -0
  232. data/lib/stattleship/validators.rb +33 -0
  233. data/lib/stattleship/validators/base_validator.rb +117 -0
  234. data/lib/stattleship/validators/birth_date_validator.rb +9 -0
  235. data/lib/stattleship/validators/current_validator.rb +9 -0
  236. data/lib/stattleship/validators/feat_validator.rb +9 -0
  237. data/lib/stattleship/validators/game_id_validator.rb +9 -0
  238. data/lib/stattleship/validators/interval_type_validator.rb +9 -0
  239. data/lib/stattleship/validators/level_up_validator.rb +9 -0
  240. data/lib/stattleship/validators/level_validator.rb +16 -0
  241. data/lib/stattleship/validators/on_validator.rb +9 -0
  242. data/lib/stattleship/validators/outcome_validator.rb +9 -0
  243. data/lib/stattleship/validators/page_validator.rb +9 -0
  244. data/lib/stattleship/validators/penalty_validator.rb +9 -0
  245. data/lib/stattleship/validators/per_page_validator.rb +9 -0
  246. data/lib/stattleship/validators/place_validator.rb +9 -0
  247. data/lib/stattleship/validators/player_id_validator.rb +9 -0
  248. data/lib/stattleship/validators/rank_validator.rb +9 -0
  249. data/lib/stattleship/validators/ranked_validator.rb +9 -0
  250. data/lib/stattleship/validators/ranking_validator.rb +9 -0
  251. data/lib/stattleship/validators/scoring_method_validator.rb +9 -0
  252. data/lib/stattleship/validators/scoring_type_validator.rb +9 -0
  253. data/lib/stattleship/validators/season_id_validator.rb +9 -0
  254. data/lib/stattleship/validators/since_validator.rb +9 -0
  255. data/lib/stattleship/validators/stat_validator.rb +23 -0
  256. data/lib/stattleship/validators/status_validator.rb +16 -0
  257. data/lib/stattleship/validators/streak_length_validator.rb +9 -0
  258. data/lib/stattleship/validators/team_id_validator.rb +9 -0
  259. data/lib/stattleship/validators/type_validator.rb +9 -0
  260. data/lib/stattleship/validators/week_validator.rb +9 -0
  261. data/lib/stattleship/version.rb +5 -0
  262. data/sample.env +1 -0
  263. data/stattleship-ruby.gemspec +33 -0
  264. metadata +503 -0
@@ -0,0 +1,15 @@
1
+ module Stattleship
2
+ class HockeyTopStats < Stattleship::TopStats
3
+ HOCKEY_TOP_STATS = 'hockey/nhl/top_stats'.freeze
4
+
5
+ def self.fetch(params:)
6
+ super(path: HOCKEY_TOP_STATS,
7
+ params: params)
8
+ end
9
+ end
10
+
11
+ module HockeyTopStatsRepresenter
12
+ include Roar::JSON
13
+ include TopStatsRepresenter
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Stattleship
2
+ class HockeyTotalPlayerStat < Stattleship::TotalPlayerStat
3
+ HOCKEY_TOTAL_PLAYER_STAT = 'hockey/nhl/total_stats'.freeze
4
+
5
+ def self.fetch(params:)
6
+ super(path: HOCKEY_TOTAL_PLAYER_STAT,
7
+ params: params)
8
+ end
9
+ end
10
+
11
+ module HockeyTotalPlayerStatRepresenter
12
+ include Roar::JSON
13
+ include TotalPlayerStatRepresenter
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Stattleship
2
+ class HockeyTotalTeamStat < Stattleship::TotalTeamStat
3
+ HOCKEY_TOTAL_TEAM_STAT = 'hockey/nhl/total_stats'.freeze
4
+
5
+ def self.fetch(params:)
6
+ super(path: HOCKEY_TOTAL_TEAM_STAT,
7
+ params: params)
8
+ end
9
+ end
10
+
11
+ module HockeyTotalTeamStatRepresenter
12
+ include Roar::JSON
13
+ include TotalTeamStatRepresenter
14
+ end
15
+ end
@@ -0,0 +1,32 @@
1
+ module Stattleship
2
+ class Injuries < Stattleship::Endpoint
3
+ def populate
4
+ injuries.each do |injury|
5
+ populate_players(injury)
6
+ populate_season(injury)
7
+ populate_season_league(injury)
8
+ populate_teams(injury)
9
+ end
10
+ end
11
+ end
12
+
13
+ module InjuriesRepresenter
14
+ include Roar::JSON
15
+ include Stattleship::Models
16
+
17
+ collection :injuries, extend: InjuryRepresenter,
18
+ class: Injury
19
+
20
+ collection :leagues, extend: LeagueRepresenter,
21
+ class: League
22
+
23
+ collection :players, extend: PlayerRepresenter,
24
+ class: Player
25
+
26
+ collection :seasons, extend: SeasonRepresenter,
27
+ class: Season
28
+
29
+ collection :teams, extend: TeamRepresenter,
30
+ class: Team
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ require 'stattleship/models/game'
2
+ require 'stattleship/models/injury'
3
+ require 'stattleship/models/league'
4
+ require 'stattleship/models/official'
5
+ require 'stattleship/models/penalty'
6
+ require 'stattleship/models/player'
7
+ require 'stattleship/models/playing_position'
8
+ require 'stattleship/models/scoring_player'
9
+ require 'stattleship/models/scoring_play'
10
+ require 'stattleship/models/season'
11
+ require 'stattleship/models/team'
12
+ require 'stattleship/models/team_outcome_streak'
13
+ require 'stattleship/models/venue'
14
+ require 'stattleship/models/ranking'
15
+
16
+ module Stattleship
17
+ module Models
18
+ end
19
+ end
@@ -0,0 +1,360 @@
1
+ module Stattleship
2
+ module Models
3
+ class Game < OpenStruct
4
+ def city
5
+ if venue
6
+ venue.city
7
+ end
8
+ end
9
+
10
+ def colors
11
+ [away_team_colors, home_team_colors].
12
+ flatten.
13
+ compact.
14
+ uniq
15
+ end
16
+
17
+ def sport
18
+ if league
19
+ league.sport
20
+ end
21
+ end
22
+
23
+ def league_name
24
+ if league
25
+ league.name
26
+ end
27
+ end
28
+
29
+ def league_abbreviation
30
+ if league
31
+ league.abbreviation
32
+ end
33
+ end
34
+
35
+ def away_team_colors
36
+ if away_team
37
+ away_team.colors
38
+ end
39
+ end
40
+
41
+ def away_team_name
42
+ if away_team
43
+ away_team.name
44
+ end
45
+ end
46
+
47
+ def away_team_slug
48
+ if away_team
49
+ away_team.slug
50
+ end
51
+ end
52
+
53
+ def home_team_colors
54
+ if home_team
55
+ home_team.colors
56
+ end
57
+ end
58
+
59
+ def home_team_name
60
+ if home_team
61
+ home_team.name
62
+ end
63
+ end
64
+
65
+ def home_team_slug
66
+ if home_team
67
+ home_team.slug
68
+ end
69
+ end
70
+
71
+ def state
72
+ if venue
73
+ venue.state
74
+ end
75
+ end
76
+
77
+ def team_slugs
78
+ [away_team_slug,
79
+ home_team_slug].compact
80
+ end
81
+
82
+ def winning_team_colors
83
+ if winning_team
84
+ winning_team.colors
85
+ end
86
+ end
87
+
88
+ def winning_team_name
89
+ if winning_team
90
+ winning_team.name
91
+ end
92
+ end
93
+
94
+ def winning_team_slug
95
+ if winning_team
96
+ winning_team.slug
97
+ end
98
+ end
99
+
100
+ def winning_team_hash
101
+ if winning_team
102
+ winning_team.dump
103
+ end
104
+ end
105
+
106
+ def losing_team_hash
107
+ if losing_team
108
+ losing_team.dump
109
+ end
110
+ end
111
+
112
+ def losing_team_colors
113
+ if losing_team
114
+ losing_team.colors
115
+ end
116
+ end
117
+
118
+ def losing_team
119
+ if home_team_slug == winning_team_slug
120
+ away_team
121
+ else
122
+ home_team
123
+ end
124
+ end
125
+
126
+ def losing_team_name
127
+ if losing_team
128
+ losing_team.name
129
+ end
130
+ end
131
+
132
+ def losing_team_slug
133
+ if losing_team
134
+ losing_team.slug
135
+ end
136
+ end
137
+
138
+ def hockey?
139
+ league.hockey?
140
+ end
141
+
142
+ def baseball?
143
+ league.baseball?
144
+ end
145
+
146
+ def basketball?
147
+ league.basketball?
148
+ end
149
+
150
+ def football?
151
+ league.football?
152
+ end
153
+
154
+ def short_date
155
+ started_at.strftime('%m/%d/%y')
156
+ end
157
+
158
+ def venue_capacity
159
+ if venue
160
+ venue.capacity
161
+ end
162
+ end
163
+
164
+ def venue_name
165
+ if venue
166
+ venue.name
167
+ end
168
+ end
169
+
170
+ def venue_slug
171
+ if venue
172
+ venue.slug
173
+ end
174
+ end
175
+
176
+ def latitude
177
+ if venue
178
+ venue.latitude
179
+ end
180
+ end
181
+
182
+ def longitude
183
+ if venue
184
+ venue.longitude
185
+ end
186
+ end
187
+
188
+ def coordinates
189
+ [latitude, longitude]
190
+ end
191
+
192
+ def losing_score
193
+ if score
194
+ score.split('-').
195
+ map(&:to_i).
196
+ sort.
197
+ join('-')
198
+ end
199
+ end
200
+
201
+ def winning_score
202
+ if score
203
+ score.split('-').
204
+ map(&:to_i).
205
+ sort.
206
+ reverse.
207
+ join('-')
208
+ end
209
+ end
210
+
211
+ def winning_team_score
212
+ [away_team_score, home_team_score].max
213
+ end
214
+
215
+ def losing_team_score
216
+ [away_team_score, home_team_score].min
217
+ end
218
+
219
+ def winning_scoreline
220
+ if winning_team && losing_team
221
+ "#{winning_team.nickname} #{winning_team_score} - #{losing_team.nickname} #{losing_team_score}"
222
+ else
223
+ ''
224
+ end
225
+ end
226
+
227
+ def losing_scoreline
228
+ if winning_team && losing_team
229
+ "#{losing_team.nickname} #{losing_team_score} - #{winning_team.nickname} #{winning_team_score}"
230
+ else
231
+ ''
232
+ end
233
+ end
234
+
235
+ def to_sentence
236
+ "#{winning_team_name} won #{winning_score} on #{short_date}"
237
+ end
238
+
239
+ def dump
240
+ {
241
+ at_neutral_site: at_neutral_site,
242
+ away_team_colors: away_team_colors,
243
+ away_team_name: away_team_name,
244
+ away_team_outcome: away_team_outcome,
245
+ away_team_slug: away_team_slug,
246
+ city: city,
247
+ colors: colors,
248
+ coordinates: coordinates,
249
+ daytime: daytime,
250
+ home_team_colors: home_team_colors,
251
+ home_team_name: home_team_name,
252
+ home_team_outcome: home_team_outcome,
253
+ home_team_slug: home_team_slug,
254
+ interval: interval,
255
+ interval_type: interval_type,
256
+ label: label,
257
+ latitude: latitude,
258
+ longitude: longitude,
259
+ league_abbreviation: league_abbreviation,
260
+ league_name: league_name,
261
+ losing_score: losing_score,
262
+ losing_scoreline: losing_scoreline,
263
+ losing_team_colors: losing_team_colors,
264
+ losing_team_score: losing_team_score,
265
+ losing_team_slug: losing_team_slug,
266
+ losing_team: losing_team.hash,
267
+ name: name,
268
+ on: on,
269
+ score: score,
270
+ scoreline: scoreline,
271
+ sentence: to_sentence,
272
+ short_date: short_date,
273
+ slug: slug,
274
+ sport: sport,
275
+ state: state,
276
+ status: status,
277
+ team_slugs: team_slugs,
278
+ temperature_unit: temperature_unit,
279
+ title: title,
280
+ venue_capacity: venue_capacity,
281
+ venue_name: venue_name,
282
+ venue_slug: venue_slug,
283
+ weather_conditions: weather_conditions,
284
+ wind_direction: wind_direction,
285
+ wind_speed: wind_speed,
286
+ wind_speed_unit: wind_speed_unit,
287
+ winning_score: winning_score,
288
+ winning_scoreline: winning_scoreline,
289
+ winning_team_colors: winning_team_colors,
290
+ winning_team_name: winning_team_name,
291
+ winning_team_score: winning_team_score,
292
+ winning_team_slug: winning_team_slug,
293
+ winning_team: winning_team_hash,
294
+ }
295
+ end
296
+ end
297
+
298
+ module GameRepresenter
299
+ include Roar::JSON
300
+ include Roar::Coercion
301
+
302
+ [
303
+ :id,
304
+ :at_neutral_site,
305
+ :away_team_outcome,
306
+ :daytime,
307
+ :home_team_outcome,
308
+ :interval,
309
+ :interval_type,
310
+ :label,
311
+ :name,
312
+ :on,
313
+ :score,
314
+ :scoreline,
315
+ :slug,
316
+ :status,
317
+ :temperature_unit,
318
+ :title,
319
+ :weather_conditions,
320
+ :wind_direction,
321
+ :wind_speed,
322
+ :wind_speed_unit,
323
+ ].each do |attribute|
324
+ property attribute
325
+ end
326
+
327
+ [
328
+ :attendance,
329
+ :away_team_score,
330
+ :home_team_score,
331
+ :duration,
332
+ :interval_number,
333
+ :score_differential,
334
+ :temperature,
335
+ :timestamp,
336
+ ].each do |attribute|
337
+ property attribute, type: Integer
338
+ end
339
+
340
+ [
341
+ :ended_at,
342
+ :started_at,
343
+ ].each do |attribute|
344
+ property attribute, type: DateTime
345
+ end
346
+
347
+ [
348
+ :home_team_id,
349
+ :away_team_id,
350
+ :winning_team_id,
351
+ :season_id,
352
+ :venue_id,
353
+ ].each do |relationship|
354
+ property relationship
355
+ end
356
+
357
+ collection :official_ids
358
+ end
359
+ end
360
+ end