ahl_scraper 0.1.1

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 (94) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +85 -0
  5. data/.ruby-version +1 -0
  6. data/.solargraph.yml +15 -0
  7. data/.travis.yml +6 -0
  8. data/.vscode/settings.json +11 -0
  9. data/CODE_OF_CONDUCT.md +74 -0
  10. data/Gemfile +25 -0
  11. data/Gemfile.lock +114 -0
  12. data/LICENSE.txt +21 -0
  13. data/README.md +235 -0
  14. data/Rakefile +8 -0
  15. data/ahl_scraper.gemspec +27 -0
  16. data/bin/console +16 -0
  17. data/bin/setup +8 -0
  18. data/lib/ahl_scraper.rb +55 -0
  19. data/lib/ahl_scraper/fetchers/division_data_fetcher.rb +19 -0
  20. data/lib/ahl_scraper/fetchers/game_data_fetcher.rb +29 -0
  21. data/lib/ahl_scraper/fetchers/game_event_data_fetcher.rb +19 -0
  22. data/lib/ahl_scraper/fetchers/player_data_fetcher.rb +25 -0
  23. data/lib/ahl_scraper/fetchers/player_games/data_fetcher.rb +30 -0
  24. data/lib/ahl_scraper/fetchers/playoff_bracket_data_fetcher.rb +19 -0
  25. data/lib/ahl_scraper/fetchers/season_data_fetcher.rb +15 -0
  26. data/lib/ahl_scraper/fetchers/season_end_date_fetcher.rb +34 -0
  27. data/lib/ahl_scraper/fetchers/season_game_ids_fetcher.rb +21 -0
  28. data/lib/ahl_scraper/fetchers/season_start_date_fetcher.rb +30 -0
  29. data/lib/ahl_scraper/fetchers/season_type_fetcher.rb +33 -0
  30. data/lib/ahl_scraper/fetchers/team_data_fetcher.rb +19 -0
  31. data/lib/ahl_scraper/fetchers/team_games/data_fetcher.rb +22 -0
  32. data/lib/ahl_scraper/fetchers/team_roster_data_fetcher.rb +67 -0
  33. data/lib/ahl_scraper/fixed_games/1001050.json +2182 -0
  34. data/lib/ahl_scraper/fixed_games/1018774.json +2573 -0
  35. data/lib/ahl_scraper/fixed_games/1020527.json +2483 -0
  36. data/lib/ahl_scraper/games.rb +46 -0
  37. data/lib/ahl_scraper/games/events.rb +8 -0
  38. data/lib/ahl_scraper/helpers/birthdate_helper.rb +27 -0
  39. data/lib/ahl_scraper/helpers/elapsed_time_helper.rb +24 -0
  40. data/lib/ahl_scraper/helpers/ice_time_helper.rb +18 -0
  41. data/lib/ahl_scraper/helpers/parameterize_helper.rb +35 -0
  42. data/lib/ahl_scraper/helpers/period_time_helper.rb +25 -0
  43. data/lib/ahl_scraper/helpers/season_dates_helper.rb +14 -0
  44. data/lib/ahl_scraper/player_games.rb +19 -0
  45. data/lib/ahl_scraper/players.rb +12 -0
  46. data/lib/ahl_scraper/playoff_brackets.rb +17 -0
  47. data/lib/ahl_scraper/resource.rb +38 -0
  48. data/lib/ahl_scraper/resources/game.rb +373 -0
  49. data/lib/ahl_scraper/resources/game_list_item.rb +57 -0
  50. data/lib/ahl_scraper/resources/games/coach.rb +23 -0
  51. data/lib/ahl_scraper/resources/games/events/shot.rb +10 -0
  52. data/lib/ahl_scraper/resources/games/goal.rb +161 -0
  53. data/lib/ahl_scraper/resources/games/goalie.rb +106 -0
  54. data/lib/ahl_scraper/resources/games/info.rb +83 -0
  55. data/lib/ahl_scraper/resources/games/on_ice_skater.rb +35 -0
  56. data/lib/ahl_scraper/resources/games/overtime.rb +48 -0
  57. data/lib/ahl_scraper/resources/games/penalty.rb +101 -0
  58. data/lib/ahl_scraper/resources/games/penalty_shot.rb +82 -0
  59. data/lib/ahl_scraper/resources/games/period.rb +31 -0
  60. data/lib/ahl_scraper/resources/games/referee.rb +23 -0
  61. data/lib/ahl_scraper/resources/games/shootout_attempt.rb +61 -0
  62. data/lib/ahl_scraper/resources/games/skater.rb +94 -0
  63. data/lib/ahl_scraper/resources/games/star.rb +47 -0
  64. data/lib/ahl_scraper/resources/games/team.rb +85 -0
  65. data/lib/ahl_scraper/resources/goalie_game_list_item.rb +69 -0
  66. data/lib/ahl_scraper/resources/player.rb +71 -0
  67. data/lib/ahl_scraper/resources/playoff_bracket.rb +21 -0
  68. data/lib/ahl_scraper/resources/playoff_brackets/game.rb +43 -0
  69. data/lib/ahl_scraper/resources/playoff_brackets/round.rb +31 -0
  70. data/lib/ahl_scraper/resources/playoff_brackets/series.rb +73 -0
  71. data/lib/ahl_scraper/resources/playoff_brackets/team.rb +39 -0
  72. data/lib/ahl_scraper/resources/roster_player.rb +71 -0
  73. data/lib/ahl_scraper/resources/season.rb +93 -0
  74. data/lib/ahl_scraper/resources/season_list_item.rb +30 -0
  75. data/lib/ahl_scraper/resources/seasons/team.rb +77 -0
  76. data/lib/ahl_scraper/resources/skater_game_list_item.rb +65 -0
  77. data/lib/ahl_scraper/resources/team_game_list_item.rb +64 -0
  78. data/lib/ahl_scraper/resources/team_list_item.rb +20 -0
  79. data/lib/ahl_scraper/roster_players.rb +11 -0
  80. data/lib/ahl_scraper/seasons.rb +31 -0
  81. data/lib/ahl_scraper/services/games/create_skaters_service.rb +72 -0
  82. data/lib/ahl_scraper/services/games/on_ice_statlines_service.rb +117 -0
  83. data/lib/ahl_scraper/services/games/penalty_shot_statlines_service.rb +38 -0
  84. data/lib/ahl_scraper/services/games/penalty_shots_service.rb +30 -0
  85. data/lib/ahl_scraper/services/games/penalty_statlines_service.rb +62 -0
  86. data/lib/ahl_scraper/services/games/scoring_statlines_service.rb +115 -0
  87. data/lib/ahl_scraper/services/games/shootout_statlines_service.rb +42 -0
  88. data/lib/ahl_scraper/services/games/team_on_ice_goals_service.rb +152 -0
  89. data/lib/ahl_scraper/services/games/time_splits_service.rb +70 -0
  90. data/lib/ahl_scraper/services/seasons/teams_service.rb +20 -0
  91. data/lib/ahl_scraper/team_games.rb +17 -0
  92. data/lib/ahl_scraper/teams.rb +11 -0
  93. data/lib/ahl_scraper/version.rb +5 -0
  94. metadata +138 -0
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ module Games
5
+ class ShootoutStatlinesService
6
+ def initialize(shootout_data, team_id, skater_ids)
7
+ @shootout_data = shootout_data
8
+ @team_id = team_id
9
+ @skater_ids = skater_ids
10
+ end
11
+
12
+ def call
13
+ return {} unless @shootout_data
14
+
15
+ @shootout_data.each do |shootout_attempt|
16
+ skater_id = shootout_attempt[:shooter][:id].to_s
17
+ shootout_statlines[skater_id] ||= blank_statline
18
+
19
+ shootout_statlines[skater_id][:attempts] += 1
20
+ shootout_statlines[skater_id][:goals] += 1 if shootout_attempt[:isGoal]
21
+ shootout_statlines[skater_id][:game_winners] += 1 if shootout_attempt[:isGameWinningGoal]
22
+ end
23
+
24
+ shootout_statlines
25
+ end
26
+
27
+ private
28
+
29
+ def shootout_statlines
30
+ @shootout_statlines ||= @skater_ids.map { |s_id| [s_id.to_s, blank_statline] }.to_h
31
+ end
32
+
33
+ def blank_statline
34
+ {
35
+ attempts: 0,
36
+ goals: 0,
37
+ game_winners: 0,
38
+ }
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,152 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ module Games
5
+ class TeamOnIceGoalsService
6
+ def initialize(team_id, goal_data)
7
+ @team_id = team_id
8
+ @goal_data = goal_data
9
+ end
10
+
11
+ def call
12
+ @on_ice_statline = generate_on_ice_statline
13
+ @goal_data.each do |goal|
14
+ @team_id == goal[:team][:id] ? goal_for(goal) : goal_against(goal)
15
+ end
16
+
17
+ @on_ice_statline
18
+ end
19
+
20
+ private
21
+
22
+ def generate_on_ice_statline
23
+ {
24
+ gf_as: 0,
25
+ gf_ev: 0,
26
+ gf_pp: 0,
27
+ gf_sh: 0,
28
+ gf_ex: 0,
29
+ gf_en: 0,
30
+ gf_ps: 0,
31
+ gf_6v6: 0,
32
+ gf_6v5: 0,
33
+ gf_6v4: 0,
34
+ gf_6v3: 0,
35
+ gf_5v6: 0,
36
+ gf_5v5: 0,
37
+ gf_5v4: 0,
38
+ gf_5v3: 0,
39
+ gf_4v6: 0,
40
+ gf_4v5: 0,
41
+ gf_4v4: 0,
42
+ gf_4v3: 0,
43
+ gf_3v6: 0,
44
+ gf_3v5: 0,
45
+ gf_3v4: 0,
46
+ gf_3v3: 0,
47
+ ga_as: 0,
48
+ ga_ev: 0,
49
+ ga_pp: 0,
50
+ ga_sh: 0,
51
+ ga_ex: 0,
52
+ ga_en: 0,
53
+ ga_ps: 0,
54
+ ga_6v6: 0,
55
+ ga_6v5: 0,
56
+ ga_6v4: 0,
57
+ ga_6v3: 0,
58
+ ga_5v6: 0,
59
+ ga_5v5: 0,
60
+ ga_5v4: 0,
61
+ ga_5v3: 0,
62
+ ga_4v6: 0,
63
+ ga_4v5: 0,
64
+ ga_4v4: 0,
65
+ ga_4v3: 0,
66
+ ga_3v6: 0,
67
+ ga_3v5: 0,
68
+ ga_3v4: 0,
69
+ ga_3v3: 0,
70
+ }
71
+ end
72
+
73
+ def goal_against(goal)
74
+ @on_ice_statline[:ga_as] += 1
75
+ if goal[:plus_players].length >= 3 && goal[:minus_players].length >= 3 && goal[:plus_players].length <= 6 && goal[:minus_players].length <= 6
76
+ @on_ice_statline["ga_#{goal[:minus_players].length}v#{goal[:plus_players].length}".to_sym] += 1
77
+ end
78
+
79
+ if goal[:properties][:isPenaltyShot] == "1"
80
+ @on_ice_statline["ga_ps".to_sym] += 1
81
+ return
82
+ end
83
+
84
+ if goal[:properties][:isEmptyNet] == "1"
85
+ @on_ice_statline[:ga_ex] += 1
86
+ return
87
+ end
88
+
89
+ if goal[:plus_players].length == 6 ||
90
+ (goal[:plus_players].length > goal[:minus_players].length && !goal_is_special_teams(goal)) ||
91
+ (goal[:plus_players].length == goal[:minus_players].length && goal[:properties][:isShortHanded] == "1")
92
+
93
+ @on_ice_statline[:ga_en] += 1
94
+ return
95
+ end
96
+
97
+ if goal[:properties][:isPowerPlay] == "1"
98
+ @on_ice_statline[:ga_sh] += 1
99
+ return
100
+ end
101
+
102
+ if goal[:properties][:isShortHanded] == "1"
103
+ @on_ice_statline[:ga_pp] += 1
104
+ return
105
+ end
106
+
107
+ @on_ice_statline[:ga_ev] += 1
108
+ end
109
+
110
+ def goal_for(goal)
111
+ @on_ice_statline[:gf_as] += 1
112
+ if goal[:plus_players].length >= 3 && goal[:minus_players].length >= 3 && goal[:plus_players].length <= 6 && goal[:minus_players].length <= 6
113
+ @on_ice_statline["gf_#{goal[:plus_players].length}v#{goal[:minus_players].length}".to_sym] += 1
114
+ end
115
+
116
+ if goal[:properties][:isPenaltyShot] == "1"
117
+ @on_ice_statline[:gf_ps] += 1
118
+ return
119
+ end
120
+
121
+ if goal[:properties][:isEmptyNet] == "1"
122
+ @on_ice_statline[:gf_en] += 1
123
+ return
124
+ end
125
+
126
+ if goal[:plus_players].length == 6 ||
127
+ (goal[:plus_players].length > goal[:minus_players].length && !goal_is_special_teams(goal)) ||
128
+ (goal[:plus_players].length == goal[:minus_players].length && goal[:properties][:isShortHanded] == "1")
129
+
130
+ @on_ice_statline[:gf_ex] += 1
131
+ return
132
+ end
133
+
134
+ if goal[:properties][:isPowerPlay] == "1"
135
+ @on_ice_statline[:gf_pp] += 1
136
+ return
137
+ end
138
+
139
+ if goal[:properties][:isShortHanded] == "1"
140
+ @on_ice_statline[:gf_sh] += 1
141
+ return
142
+ end
143
+
144
+ @on_ice_statline[:gf_ev] += 1
145
+ end
146
+
147
+ def goal_is_special_teams(goal)
148
+ goal[:properties][:isPenaltyShot] == "1" || goal[:properties][:isPowerPlay] == "1" || goal[:properties][:isShortHanded] == "1"
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ module Games
5
+ class TimeSplitsService
6
+ def initialize(goals, team_id, current_state, game_properties)
7
+ @goals = goals
8
+ @team_id = team_id
9
+ @current_state = current_state
10
+ @game_properties = game_properties
11
+ end
12
+
13
+ def call
14
+ @times = { leading: 0, trailing: 0, tied: 0 }
15
+ @time_elapsed = @game_properties[:game_start_time_in_seconds] || 0
16
+ calculate_time_splits
17
+ @times
18
+ end
19
+
20
+ private
21
+
22
+ def calculate_time_splits
23
+ @score_difference = 0
24
+ @goals.each.with_index do |goal, i|
25
+ goal_time_elapsed = PeriodTimeHelper.new(goal[:time], goal[:period][:id].to_i).to_elapsed
26
+ add_time_based_on_score(@score_difference, goal_time_elapsed - @time_elapsed)
27
+ @score_difference += goal[:team][:id] == @team_id ? 1 : -1
28
+ @time_elapsed = goal_time_elapsed
29
+
30
+ next unless (i + 1) == @goals.length
31
+
32
+ add_time_remaining(@time_elapsed) if @current_state[:shootout] || !@current_state[:overtime]
33
+ end
34
+ end
35
+
36
+ def add_time_based_on_score(difference, time)
37
+ if difference.positive?
38
+ @times[:leading] += time
39
+ elsif difference.negative?
40
+ @times[:trailing] += time
41
+ else
42
+ @times[:tied] += time
43
+ end
44
+ end
45
+
46
+ def add_time_remaining(time)
47
+ to_end_of_game = (current_time || total_game_time) - time
48
+ add_time_based_on_score(@score_difference, to_end_of_game)
49
+ end
50
+
51
+ def total_game_time
52
+ return @game_properties[:game_end_time_in_seconds] if @game_properties[:game_end_time_in_seconds]
53
+
54
+ return 3600 unless @current_state[:overtime]
55
+
56
+ return 3900 unless @current_state[:playoffs]
57
+
58
+ 3600 + (1200 * @game_properties[:overtime_periods])
59
+ end
60
+
61
+ def current_time
62
+ return unless @current_state[:status] == "in_progress"
63
+
64
+ return total_game_time if @current_state[:period] =~ /SO/
65
+
66
+ PeriodTimeHelper.new(@current_state[:time], @current_state[:period_number]).to_elapsed
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ module Seasons
5
+ class TeamsService
6
+ def initialize(division_data)
7
+ @division_data = division_data
8
+ end
9
+
10
+ def call
11
+ @division_data.map do |division|
12
+ division_name = division.dig(:headers, :name, :properties, :title)
13
+ Array.new(division[:data]).map do |team|
14
+ Team.new(team, division_name)
15
+ end
16
+ end.flatten
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ahl_scraper/fetchers/team_games/data_fetcher"
4
+
5
+ module AhlScraper
6
+ module TeamGames
7
+ @season_games = {}
8
+
9
+ class << self
10
+ def list(team_id, season_id)
11
+ @season_games["#{team_id}-#{season_id}"] ||= DataFetcher.new(team_id, season_id).call&.map { |team_data| TeamGameListItem.new(team_data, { team_id: team_id }) }
12
+
13
+ @season_games["#{team_id}-#{season_id}"]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ module Teams
5
+ class << self
6
+ def list(season_id)
7
+ TeamDataFetcher.new(season_id).call&.map { |team| TeamListItem.new(team, season_id) }
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ VERSION = "0.1.1"
5
+ end
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ahl_scraper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - jefftcraig
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-06-21 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Allows users to gather game, season, and player data from the AHL website
14
+ email:
15
+ - jeffcraig35@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ".gitignore"
21
+ - ".rspec"
22
+ - ".rubocop.yml"
23
+ - ".ruby-version"
24
+ - ".solargraph.yml"
25
+ - ".travis.yml"
26
+ - ".vscode/settings.json"
27
+ - CODE_OF_CONDUCT.md
28
+ - Gemfile
29
+ - Gemfile.lock
30
+ - LICENSE.txt
31
+ - README.md
32
+ - Rakefile
33
+ - ahl_scraper.gemspec
34
+ - bin/console
35
+ - bin/setup
36
+ - lib/ahl_scraper.rb
37
+ - lib/ahl_scraper/fetchers/division_data_fetcher.rb
38
+ - lib/ahl_scraper/fetchers/game_data_fetcher.rb
39
+ - lib/ahl_scraper/fetchers/game_event_data_fetcher.rb
40
+ - lib/ahl_scraper/fetchers/player_data_fetcher.rb
41
+ - lib/ahl_scraper/fetchers/player_games/data_fetcher.rb
42
+ - lib/ahl_scraper/fetchers/playoff_bracket_data_fetcher.rb
43
+ - lib/ahl_scraper/fetchers/season_data_fetcher.rb
44
+ - lib/ahl_scraper/fetchers/season_end_date_fetcher.rb
45
+ - lib/ahl_scraper/fetchers/season_game_ids_fetcher.rb
46
+ - lib/ahl_scraper/fetchers/season_start_date_fetcher.rb
47
+ - lib/ahl_scraper/fetchers/season_type_fetcher.rb
48
+ - lib/ahl_scraper/fetchers/team_data_fetcher.rb
49
+ - lib/ahl_scraper/fetchers/team_games/data_fetcher.rb
50
+ - lib/ahl_scraper/fetchers/team_roster_data_fetcher.rb
51
+ - lib/ahl_scraper/fixed_games/1001050.json
52
+ - lib/ahl_scraper/fixed_games/1018774.json
53
+ - lib/ahl_scraper/fixed_games/1020527.json
54
+ - lib/ahl_scraper/games.rb
55
+ - lib/ahl_scraper/games/events.rb
56
+ - lib/ahl_scraper/helpers/birthdate_helper.rb
57
+ - lib/ahl_scraper/helpers/elapsed_time_helper.rb
58
+ - lib/ahl_scraper/helpers/ice_time_helper.rb
59
+ - lib/ahl_scraper/helpers/parameterize_helper.rb
60
+ - lib/ahl_scraper/helpers/period_time_helper.rb
61
+ - lib/ahl_scraper/helpers/season_dates_helper.rb
62
+ - lib/ahl_scraper/player_games.rb
63
+ - lib/ahl_scraper/players.rb
64
+ - lib/ahl_scraper/playoff_brackets.rb
65
+ - lib/ahl_scraper/resource.rb
66
+ - lib/ahl_scraper/resources/game.rb
67
+ - lib/ahl_scraper/resources/game_list_item.rb
68
+ - lib/ahl_scraper/resources/games/coach.rb
69
+ - lib/ahl_scraper/resources/games/events/shot.rb
70
+ - lib/ahl_scraper/resources/games/goal.rb
71
+ - lib/ahl_scraper/resources/games/goalie.rb
72
+ - lib/ahl_scraper/resources/games/info.rb
73
+ - lib/ahl_scraper/resources/games/on_ice_skater.rb
74
+ - lib/ahl_scraper/resources/games/overtime.rb
75
+ - lib/ahl_scraper/resources/games/penalty.rb
76
+ - lib/ahl_scraper/resources/games/penalty_shot.rb
77
+ - lib/ahl_scraper/resources/games/period.rb
78
+ - lib/ahl_scraper/resources/games/referee.rb
79
+ - lib/ahl_scraper/resources/games/shootout_attempt.rb
80
+ - lib/ahl_scraper/resources/games/skater.rb
81
+ - lib/ahl_scraper/resources/games/star.rb
82
+ - lib/ahl_scraper/resources/games/team.rb
83
+ - lib/ahl_scraper/resources/goalie_game_list_item.rb
84
+ - lib/ahl_scraper/resources/player.rb
85
+ - lib/ahl_scraper/resources/playoff_bracket.rb
86
+ - lib/ahl_scraper/resources/playoff_brackets/game.rb
87
+ - lib/ahl_scraper/resources/playoff_brackets/round.rb
88
+ - lib/ahl_scraper/resources/playoff_brackets/series.rb
89
+ - lib/ahl_scraper/resources/playoff_brackets/team.rb
90
+ - lib/ahl_scraper/resources/roster_player.rb
91
+ - lib/ahl_scraper/resources/season.rb
92
+ - lib/ahl_scraper/resources/season_list_item.rb
93
+ - lib/ahl_scraper/resources/seasons/team.rb
94
+ - lib/ahl_scraper/resources/skater_game_list_item.rb
95
+ - lib/ahl_scraper/resources/team_game_list_item.rb
96
+ - lib/ahl_scraper/resources/team_list_item.rb
97
+ - lib/ahl_scraper/roster_players.rb
98
+ - lib/ahl_scraper/seasons.rb
99
+ - lib/ahl_scraper/services/games/create_skaters_service.rb
100
+ - lib/ahl_scraper/services/games/on_ice_statlines_service.rb
101
+ - lib/ahl_scraper/services/games/penalty_shot_statlines_service.rb
102
+ - lib/ahl_scraper/services/games/penalty_shots_service.rb
103
+ - lib/ahl_scraper/services/games/penalty_statlines_service.rb
104
+ - lib/ahl_scraper/services/games/scoring_statlines_service.rb
105
+ - lib/ahl_scraper/services/games/shootout_statlines_service.rb
106
+ - lib/ahl_scraper/services/games/team_on_ice_goals_service.rb
107
+ - lib/ahl_scraper/services/games/time_splits_service.rb
108
+ - lib/ahl_scraper/services/seasons/teams_service.rb
109
+ - lib/ahl_scraper/team_games.rb
110
+ - lib/ahl_scraper/teams.rb
111
+ - lib/ahl_scraper/version.rb
112
+ homepage: http://www.ahltracker.com
113
+ licenses:
114
+ - MIT
115
+ metadata:
116
+ homepage_uri: https://github.com/notnotjeff/ahl_scraper
117
+ source_code_uri: https://github.com/notnotjeff/ahl_scraper
118
+ changelog_uri: https://github.com/notnotjeff/ahl_scraper
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: 2.3.0
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements: []
134
+ rubygems_version: 3.2.11
135
+ signing_key:
136
+ specification_version: 4
137
+ summary: Scrape data from the AHL website
138
+ test_files: []