football-sources 0.0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +6 -4
  3. data/Manifest.txt +0 -29
  4. data/README.md +30 -28
  5. data/Rakefile +32 -31
  6. data/lib/football/sources.rb +6 -6
  7. data/lib/football-sources/version.rb +19 -19
  8. data/lib/football-sources.rb +16 -46
  9. metadata +15 -58
  10. data/lib/football-sources/apis/config.rb +0 -17
  11. data/lib/football-sources/apis/convert.rb +0 -239
  12. data/lib/football-sources/apis/convert_cl.rb +0 -267
  13. data/lib/football-sources/apis/download.rb +0 -11
  14. data/lib/football-sources/apis/stat.rb +0 -59
  15. data/lib/football-sources/apis.rb +0 -86
  16. data/lib/football-sources/worldfootball/build.rb +0 -245
  17. data/lib/football-sources/worldfootball/config.rb +0 -16
  18. data/lib/football-sources/worldfootball/convert.rb +0 -100
  19. data/lib/football-sources/worldfootball/convert_reports.rb +0 -107
  20. data/lib/football-sources/worldfootball/download.rb +0 -61
  21. data/lib/football-sources/worldfootball/leagues/asia.rb +0 -53
  22. data/lib/football-sources/worldfootball/leagues/europe--british_isles.rb +0 -59
  23. data/lib/football-sources/worldfootball/leagues/europe--central.rb +0 -127
  24. data/lib/football-sources/worldfootball/leagues/europe--eastern.rb +0 -82
  25. data/lib/football-sources/worldfootball/leagues/europe--northern.rb +0 -57
  26. data/lib/football-sources/worldfootball/leagues/europe--southern.rb +0 -86
  27. data/lib/football-sources/worldfootball/leagues/europe--western.rb +0 -38
  28. data/lib/football-sources/worldfootball/leagues/europe.rb +0 -13
  29. data/lib/football-sources/worldfootball/leagues/north_america.rb +0 -44
  30. data/lib/football-sources/worldfootball/leagues/pacific.rb +0 -21
  31. data/lib/football-sources/worldfootball/leagues/south_america.rb +0 -11
  32. data/lib/football-sources/worldfootball/leagues.rb +0 -200
  33. data/lib/football-sources/worldfootball/mods.rb +0 -72
  34. data/lib/football-sources/worldfootball/tool.rb +0 -100
  35. data/lib/football-sources/worldfootball/vacuum.rb +0 -66
  36. data/lib/football-sources/worldfootball.rb +0 -24
  37. data/test/helper.rb +0 -8
  38. data/test/test_version.rb +0 -16
@@ -1,245 +0,0 @@
1
-
2
- module Worldfootball
3
-
4
-
5
- ROUND_TO_EN = {
6
- '1. Runde' => 'Round 1',
7
- '2. Runde' => 'Round 2',
8
- '3. Runde' => 'Round 3',
9
- '4. Runde' => 'Round 4',
10
- 'Achtelfinale' => 'Round of 16',
11
- 'Viertelfinale' => 'Quarterfinals',
12
- 'Halbfinale' => 'Semifinals',
13
- 'Finale' => 'Final',
14
- }
15
-
16
-
17
- ## todo/check: english league cup/trophy has NO ET - also support - make more flexible!!!
18
-
19
- ## build "standard" match records from "raw" table rows
20
- def self.build( rows, season:, league:, stage: '' ) ## rename to fixup or such - why? why not?
21
- season = Season( season ) ## cast (ensure) season class (NOT string, integer, etc.)
22
-
23
- raise ArgumentError, "league key as string expected" unless league.is_a?(String) ## note: do NOT pass in league struct! pass in key (string)
24
-
25
- print " #{rows.size} rows - build #{league} #{season}"
26
- print " - #{stage}" unless stage.empty?
27
- print "\n"
28
-
29
-
30
- ## note: use only first part from key for lookup
31
- ## e.g. at.1 => at
32
- ## eng.1 => eng
33
- ## and so on
34
- mods = MODS[ league.split('.')[0] ] || {}
35
-
36
- score_errors = SCORE_ERRORS[ league ] || {}
37
-
38
-
39
- i = 0
40
- recs = []
41
- rows.each do |row|
42
- i += 1
43
-
44
-
45
- if row[:round] =~ /Spieltag/
46
- puts
47
- print '[%03d] ' % (i+1)
48
- print row[:round]
49
-
50
- if m = row[:round].match( /([0-9]+)\. Spieltag/ )
51
- ## todo/check: always use a string even if number (as a string eg. '1' etc.)
52
- round = m[1] ## note: keep as string (NOT number)
53
- print " => #{round}"
54
- else
55
- puts "!! ERROR: cannot find matchday number"
56
- exit 1
57
- end
58
- print "\n"
59
- elsif row[:round] =~ /[1-9]\.[ ]Runde|
60
- Achtelfinale|
61
- Viertelfinale|
62
- Halbfinale|
63
- Finale
64
- /x
65
- puts
66
- print '[%03d] ' % (i+1)
67
- print row[:round]
68
-
69
-
70
- ## do NOT translate rounds (to english) - keep in german / deutsch (de)
71
- if ['at.cup', 'at.1', ## at.1 - incl. europa league playoff
72
- 'de.cup'].include?( league )
73
- round = row[:round]
74
- else
75
- round = ROUND_TO_EN[ row[:round] ]
76
- if round.nil?
77
- puts "!! ERROR: no mapping for round to english (en) found >#{row[:round]}<:"
78
- pp row
79
- exit 1
80
- end
81
- print " => #{round}"
82
- end
83
- print "\n"
84
- else
85
- puts "!! ERROR: unknown round >#{row[:round]}< for league >#{league}<:"
86
- pp row
87
- exit 1
88
- end
89
-
90
-
91
- date_str = row[:date]
92
- time_str = row[:time]
93
- team1_str = row[:team1]
94
- team2_str = row[:team2]
95
- score_str = row[:score]
96
-
97
- ## convert date from string e.g. 2019-25-10
98
- date = Date.strptime( date_str, '%Y-%m-%d' )
99
-
100
-
101
- ### check for score_error; first (step 1) lookup by date
102
- score_error = score_errors[ date.strftime('%Y-%m-%d') ]
103
- if score_error
104
- if team1_str == score_error[0] &&
105
- team2_str == score_error[1]
106
- ## check if team names match too; if yes, apply fix/patch!!
107
- if score_str != score_error[2][0]
108
- puts "!! WARN - score fix changed? - expected #{score_error[2][0]}, got #{score_str} - fixing to #{score_error[2][1]}"
109
- pp row
110
- end
111
- puts "FIX - applying score error fix - from #{score_error[2][0]} to => #{score_error[2][1]}"
112
- score_str = score_error[2][1]
113
- end
114
- end
115
-
116
-
117
- print '[%03d] ' % (i+1)
118
- print "%-10s | " % date_str
119
- print "%-5s | " % time_str
120
- print "%-22s | " % team1_str
121
- print "%-22s | " % team2_str
122
- print score_str
123
- print "\n"
124
-
125
-
126
- ## check for 0:3 Wert. - change Wert. to awd. (awarded)
127
- score_str = score_str.sub( /Wert\./i, 'awd.' )
128
-
129
- ## clean team name (e.g. remove (old))
130
- ## and asciify (e.g. ’ to ' )
131
- team1_str = norm_team( team1_str )
132
- team2_str = norm_team( team2_str )
133
-
134
- team1_str = mods[ team1_str ] if mods[ team1_str ]
135
- team2_str = mods[ team2_str ] if mods[ team2_str ]
136
-
137
-
138
-
139
-
140
- ht, ft, et, pen, comments = parse_score( score_str )
141
-
142
-
143
-
144
- recs << [stage,
145
- round,
146
- date.strftime( '%Y-%m-%d' ),
147
- time_str,
148
- team1_str,
149
- ft,
150
- ht,
151
- team2_str,
152
- et, # extra: incl. extra time
153
- pen, # extra: incl. penalties
154
- comments]
155
- end # each row
156
- recs
157
- end # build
158
-
159
-
160
-
161
- def self.parse_score( score_str )
162
- comments = String.new( '' ) ## check - rename to/use status or such - why? why not?
163
-
164
- ## split score
165
- ft = ''
166
- ht = ''
167
- et = ''
168
- pen = ''
169
- if score_str == '---' ## in the future (no score yet) - was -:-
170
- ft = ''
171
- ht = ''
172
- elsif score_str == 'n.gesp.' || ## cancelled (british) / canceled (us)
173
- score_str == 'ausg.' || ## todo/check: change to some other status ????
174
- score_str == 'annull.' ## todo/check: change to some other status (see ie 2012) ????
175
- ft = '(*)'
176
- ht = ''
177
- comments = 'cancelled'
178
- elsif score_str == 'abgebr.' ## abandoned -- waiting for replay?
179
- ft = '(*)'
180
- ht = ''
181
- comments = 'abandoned'
182
- elsif score_str == 'verl.' ## postponed
183
- ft = ''
184
- ht = ''
185
- comments = 'postponed'
186
- # 5-4 (0-0, 1-1, 2-2) i.E.
187
- elsif score_str =~ /([0-9]+) [ ]*-[ ]* ([0-9]+)
188
- [ ]*
189
- \(([0-9]+) [ ]*-[ ]* ([0-9]+)
190
- [ ]*,[ ]*
191
- ([0-9]+) [ ]*-[ ]* ([0-9]+)
192
- [ ]*,[ ]*
193
- ([0-9]+) [ ]*-[ ]* ([0-9]+)\)
194
- [ ]*
195
- i\.E\.
196
- /x
197
- pen = "#{$1}-#{$2}"
198
- ht = "#{$3}-#{$4}"
199
- ft = "#{$5}-#{$6}"
200
- et = "#{$7}-#{$8}"
201
- # 2-1 (1-0, 1-1) n.V
202
- elsif score_str =~ /([0-9]+) [ ]*-[ ]* ([0-9]+)
203
- [ ]*
204
- \(([0-9]+) [ ]*-[ ]* ([0-9]+)
205
- [ ]*,[ ]*
206
- ([0-9]+) [ ]*-[ ]* ([0-9]+)
207
- \)
208
- [ ]*
209
- n\.V\.
210
- /x
211
- et = "#{$1}-#{$2}"
212
- ht = "#{$3}-#{$4}"
213
- ft = "#{$5}-#{$6}"
214
- elsif score_str =~ /([0-9]+)
215
- [ ]*-[ ]*
216
- ([0-9]+)
217
- [ ]*
218
- \(([0-9]+)
219
- [ ]*-[ ]*
220
- ([0-9]+)
221
- \)
222
- /x
223
- ft = "#{$1}-#{$2}"
224
- ht = "#{$3}-#{$4}"
225
- elsif score_str =~ /([0-9]+)
226
- [ ]*-[ ]*
227
- ([0-9]+)
228
- [ ]*
229
- ([a-z.]+)
230
- /x
231
- ft = "#{$1}-#{$2} (*)"
232
- ht = ''
233
- comments = $3
234
- elsif score_str =~ /^([0-9]+)-([0-9]+)$/
235
- ft = "#{$1}-#{$2}" ## e.g. see luxemburg and others
236
- ht = ''
237
- else
238
- puts "!! ERROR - unsupported score format >#{score_str}< - sorry; maybe add a score error fix/patch"
239
- exit 1
240
- end
241
-
242
- [ht, ft, et, pen, comments]
243
- end
244
-
245
- end # module Worldfootball
@@ -1,16 +0,0 @@
1
- module Worldfootball
2
-
3
- ### add some more config options / settings
4
- class Configuration
5
- #########
6
- ## nested configuration classes - use - why? why not?
7
- class Convert
8
- def out_dir() @out_dir || './o'; end
9
- def out_dir=(value) @out_dir = value; end
10
- end
11
-
12
- def convert() @convert ||= Convert.new; end
13
- end # class Configuration
14
-
15
-
16
- end # module Worldfootball
@@ -1,100 +0,0 @@
1
-
2
- module Worldfootball
3
-
4
-
5
-
6
- def self.convert( league:, season:, offset: nil ) ## check: rename (optional) offset to time_offset or such?
7
- season = Season( season ) ## cast (ensure) season class (NOT string, integer, etc.)
8
-
9
- league = find_league( league )
10
-
11
- pages = league.pages( season: season )
12
-
13
- # note: assume stages if pages is an array (of hash table/records)
14
- # (and NOT a single hash table/record)
15
- if pages.is_a?(Array)
16
- recs = []
17
- pages.each do |page_meta|
18
- slug = page_meta[:slug]
19
- stage_name = page_meta[:stage]
20
- ## todo/fix: report error/check if stage.name is nil!!!
21
-
22
- print " parsing #{slug}..."
23
-
24
- # unless File.exist?( path )
25
- # puts "!! WARN - missing stage >#{stage_name}< source - >#{path}<"
26
- # next
27
- # end
28
-
29
- page = Page::Schedule.from_cache( slug )
30
- print " title=>#{page.title}<..."
31
- print "\n"
32
-
33
- rows = page.matches
34
- stage_recs = build( rows, season: season, league: league.key, stage: stage_name )
35
-
36
- pp stage_recs[0] ## check first record
37
- recs += stage_recs
38
- end
39
- else
40
- page_meta = pages
41
- slug = page_meta[:slug]
42
-
43
- print " parsing #{slug}..."
44
-
45
- page = Page::Schedule.from_cache( slug )
46
- print " title=>#{page.title}<..."
47
- print "\n"
48
-
49
- rows = page.matches
50
- recs = build( rows, season: season, league: league.key )
51
-
52
- pp recs[0] ## check first record
53
- end
54
-
55
- recs = recs.map { |rec| fix_date( rec, offset ) } if offset
56
-
57
- ## note: sort matches by date before saving/writing!!!!
58
- ## note: for now assume date in string in 1999-11-30 format (allows sort by "simple" a-z)
59
- ## note: assume date is third column!!! (stage/round/date/...)
60
- recs = recs.sort { |l,r| l[2] <=> r[2] }
61
- ## reformat date / beautify e.g. Sat Aug 7 1993
62
- recs.each { |rec| rec[2] = Date.strptime( rec[2], '%Y-%m-%d' ).strftime( '%a %b %-d %Y' ) }
63
-
64
- ## remove unused columns (e.g. stage, et, p, etc.)
65
- recs, headers = vacuum( recs )
66
-
67
- puts headers
68
- pp recs[0] ## check first record
69
-
70
- out_path = "#{config.convert.out_dir}/#{season.path}/#{league.key}.csv"
71
-
72
- puts "write #{out_path}..."
73
- Cache::CsvMatchWriter.write( out_path, recs, headers: headers )
74
- end
75
-
76
-
77
-
78
- ## helper to fix dates to use local timezone (and not utc/london time)
79
- def self.fix_date( row, offset )
80
- return row if row[3].nil? || row[3].empty? ## note: time (column) required for fix
81
-
82
- col = row[2]
83
- if col =~ /^\d{4}-\d{2}-\d{2}$/
84
- date_fmt = '%Y-%m-%d' # e.g. 2002-08-17
85
- else
86
- puts "!!! ERROR - wrong (unknown) date format >>#{col}<<; cannot continue; fix it; sorry"
87
- ## todo/fix: add to errors/warns list - why? why not?
88
- exit 1
89
- end
90
-
91
- date = DateTime.strptime( "#{row[2]} #{row[3]}", "#{date_fmt} %H:%M" )
92
- ## NOTE - MUST be -7/24.0!!!! or such to work
93
- date = date + (offset/24.0)
94
-
95
- row[2] = date.strftime( date_fmt ) ## overwrite "old"
96
- row[3] = date.strftime( '%H:%M' )
97
- row ## return row for possible pipelining - why? why not?
98
- end
99
-
100
- end # module Worldfootball
@@ -1,107 +0,0 @@
1
- module Worldfootball
2
-
3
-
4
- def self.convert_reports( league:, season: )
5
- season = Season( season ) ## cast (ensure) season class (NOT string, integer, etc.)
6
-
7
- league = find_league( league )
8
-
9
- ## note: use only first part from key for lookup
10
- ## e.g. at.1 => at
11
- ## eng.1 => eng
12
- ## and so on
13
- mods = MODS[ league.key.split('.')[0] ] || {}
14
-
15
-
16
-
17
- pages = league.pages( season: season )
18
-
19
- recs = []
20
-
21
- ## if single (simple) page setup - wrap in array
22
- pages = pages.is_a?(Array) ? pages : [pages]
23
- pages.each do |page_meta| # note: use page_info for now (or page_rec or page_meta or such)
24
-
25
- page = Page::Schedule.from_cache( page_meta[:slug] )
26
- print " page title=>#{page.title}<..."
27
- print "\n"
28
-
29
- matches = page.matches
30
-
31
- puts "matches - #{matches.size} rows:"
32
- pp matches[0]
33
-
34
- puts "#{page.generated_in_days_ago} - #{page.generated}"
35
-
36
-
37
- matches.each_with_index do |match,i|
38
-
39
- report_ref = match[:report_ref]
40
- if report_ref.nil?
41
- puts "!! WARN: no match report ref found for match:"
42
- pp match
43
- next
44
- end
45
-
46
- puts "reading #{i+1}/#{matches.size} - #{report_ref}..."
47
- report = Page::Report.from_cache( report_ref )
48
-
49
- puts
50
- puts report.title
51
- puts report.generated
52
-
53
- rows = report.goals
54
- puts "goals - #{rows.size} records"
55
- ## pp rows
56
-
57
-
58
- if rows.size > 0
59
- ## add goals
60
- date = Date.strptime( match[:date], '%Y-%m-%d')
61
-
62
- team1 = match[:team1]
63
- team2 = match[:team2]
64
-
65
- ## clean team name (e.g. remove (old))
66
- ## and asciify (e.g. ’ to ' )
67
- team1 = norm_team( team1 )
68
- team2 = norm_team( team2 )
69
-
70
- team1 = mods[ team1 ] if mods[ team1 ]
71
- team2 = mods[ team2 ] if mods[ team2 ]
72
-
73
- match_id = "#{team1} - #{team2} | #{date.strftime('%b %-d %Y')}"
74
-
75
-
76
- rows.each do |row|
77
- extra = if row[:owngoal]
78
- '(og)' ## or use OG or O.G.- why? why not?
79
- elsif row[:penalty]
80
- '(pen)' ## or use P or PEN - why? why not?
81
- else
82
- ''
83
- end
84
-
85
- rec = [match_id,
86
- row[:score],
87
- "#{row[:minute]}'",
88
- extra,
89
- row[:player],
90
- row[:notes]]
91
- recs << rec
92
- end
93
- end
94
- end # each match
95
- end # each page
96
-
97
- ## pp recs
98
-
99
- out_path = "#{config.convert.out_dir}/#{season.path}/#{league.key}~goals.csv"
100
-
101
- headers = ['Match', 'Score', 'Minute', 'Extra', 'Player', 'Notes']
102
-
103
- puts "write #{out_path}..."
104
- Cache::CsvMatchWriter.write( out_path, recs, headers: headers )
105
- end
106
- end # module Worldfootballl
107
-
@@ -1,61 +0,0 @@
1
-
2
-
3
- module Worldfootball
4
-
5
- ##
6
- ## note/fix!!!!
7
- ## do NOT allow redirects for now - report error!!!
8
- ## does NOT return 404 page not found errors; always redirects (301) to home page
9
- ## on missing pages:
10
- ## 301 Moved Permanently location=https://www.weltfussball.de/
11
- ## 301 Moved Permanently location=https://www.weltfussball.de/
12
-
13
-
14
-
15
-
16
- # url = "https://www.weltfussball.de/alle_spiele/eng-league-one-#{season}/"
17
- # url = "https://www.weltfussball.de/alle_spiele/eng-league-two-#{season}/"
18
- # https://www.weltfussball.de/alle_spiele/eng-national-league-2019-2020/
19
- # https://www.weltfussball.de/alle_spiele/eng-fa-cup-2018-2019/
20
- # https://www.weltfussball.de/alle_spiele/eng-league-cup-2019-2020/
21
-
22
- # https://www.weltfussball.de/alle_spiele/fra-ligue-2-2019-2020/
23
- # https://www.weltfussball.de/alle_spiele/ita-serie-b-2019-2020/
24
- # https://www.weltfussball.de/alle_spiele/rus-premier-liga-2019-2020/
25
- # https://www.weltfussball.de/alle_spiele/rus-1-division-2019-2020/
26
- # https://www.weltfussball.de/alle_spiele/tur-sueperlig-2019-2020/
27
- # https://www.weltfussball.de/alle_spiele/tur-1-lig-2019-2020/
28
-
29
-
30
-
31
- def self.schedule( league:, season: )
32
- season = Season( season ) ## cast (ensure) season class (NOT string, integer, etc.)
33
-
34
- league = find_league( league )
35
-
36
- pages = league.pages( season: season )
37
-
38
- ## if single (simple) page setup - wrap in array
39
- pages = pages.is_a?(Array) ? pages : [pages]
40
- pages.each do |page_meta|
41
- Metal.schedule( page_meta[:slug] )
42
- end # each page
43
- end
44
-
45
-
46
- def self.schedule_reports( league:, season:, cache: true ) ## todo/check: rename to reports_for_schedule or such - why? why not?
47
- season = Season( season ) ## cast (ensure) season class (NOT string, integer, etc.)
48
-
49
- league = find_league( league )
50
-
51
- pages = league.pages( season: season )
52
-
53
- ## if single (simple) page setup - wrap in array
54
- pages = pages.is_a?(Array) ? pages : [pages]
55
- pages.each do |page_meta|
56
- Metal.schedule_reports( page_meta[:slug], cache: cache )
57
- end # each page
58
- end
59
-
60
-
61
- end # module Worldfootball
@@ -1,53 +0,0 @@
1
- module Worldfootball
2
-
3
- LEAGUES_ASIA = {
4
-
5
- # /chn-super-league-2020/
6
- 'cn.1' => { pages: 'chn-super-league' },
7
-
8
- # /jpn-j1-league-2020/
9
- 'jp.1' => { pages: 'jpn-j1-league' },
10
-
11
-
12
- =begin
13
- 2020 -- >/alle_spiele/kor-k-league-1-2020/<
14
- 2019 Meisterschaft -- >/alle_spiele/kor-k-league-1-2019-meisterschaft/<
15
- 2019 Abstieg -- >/alle_spiele/kor-k-league-1-2019-abstieg/<
16
- 2019 -- >/alle_spiele/kor-k-league-1-2019/<
17
- 2018 Meisterschaft -- >/alle_spiele/kor-k-league-1-2018-meisterschaft/<
18
- 2018 Abstieg -- >/alle_spiele/kor-k-league-1-2018-abstieg/<
19
- 2018 -- >/alle_spiele/kor-k-league-classic-2018/<
20
- 2017 Meisterschaft -- >/alle_spiele/kor-k-league-classic-2017-meisterschaft/<
21
- 2017 Abstieg -- >/alle_spiele/kor-k-league-classic-2017-abstieg/<
22
- 2017 -- >/alle_spiele/kor-k-league-classic-2017/<
23
- 2016 Meisterschaft -- >/alle_spiele/kor-k-league-classic-2016-meisterschaft/<
24
- 2016 Abstieg -- >/alle_spiele/kor-k-league-classic-2016-abstieg/<
25
- 2016 -- >/alle_spiele/kor-k-league-2016/<
26
- 2015 Meisterschaft -- >/alle_spiele/kor-k-league-2015-meisterschaft/<
27
- 2015 Abstieg -- >/alle_spiele/kor-k-league-2015-abstieg/<
28
- 2015 -- >/alle_spiele/kor-k-league-2015/<
29
- =end
30
-
31
- ### todo/fix: time-zone offset!!!!!!!!
32
- # /kor-k-league-1-2020/
33
- # /kor-k-league-1-2019-meisterschaft/
34
- # /kor-k-league-1-2019-abstieg/
35
- 'kr.1' => {
36
- pages: {
37
- 'kor-k-league-1-{season}' => 'Regular Season', # 1
38
- 'kor-k-league-1-{season}-meisterschaft' => 'Playoffs - Championship', # 2
39
- 'kor-k-league-1-{season}-abstieg' => 'Playoffs - Relegation', # 3
40
- },
41
- season: ->( season ) {
42
- case season
43
- when Season('2020') then [1] # just getting started
44
- when Season('2019') then [1,2,3]
45
- end
46
- }
47
- },
48
-
49
- }
50
-
51
- end # module Worldfootball
52
-
53
-
@@ -1,59 +0,0 @@
1
-
2
- module Worldfootball
3
-
4
-
5
- LEAGUES_EUROPE.merge!({
6
-
7
-
8
- # /eng-national-league-2020-2021/
9
- 'eng.1' => { pages: 'eng-premier-league' },
10
- 'eng.2' => { pages: 'eng-championship' },
11
- 'eng.3' => { pages: 'eng-league-one' },
12
- 'eng.4' => { pages: 'eng-league-two' },
13
- 'eng.5' => { pages: 'eng-national-league' },
14
- 'eng.cup' => { pages: 'eng-fa-cup' }, ## change key to eng.cup.fa or such??
15
- 'eng.cup.l' => { pages: 'eng-league-cup' }, ## change key to ??
16
-
17
- 'sco.1' => {
18
- pages: {
19
- 'sco-premiership-{season}' => 'Regular Season',
20
- 'sco-premiership-{end_year}-playoff' => 'Playoffs - Championship', # note: only uses season.end_year!
21
- 'sco-premiership-{end_year}-abstieg' => 'Playoffs - Relegation', # note: only uses season.end_year!
22
- },
23
- season: ->( season ) {
24
- case season
25
- when Season('2020/21') then [1] # just getting started
26
- when Season('2019/20') then [1] # covid-19 - no championship & relegation
27
- when Season('2018/19') then [1,2,3]
28
- end
29
- }
30
- },
31
-
32
- # e.g. /irl-premier-division-2019/
33
- # irl-premier-division-2020
34
- # irl-premier-division-2019
35
- # irl-premier-division-2018
36
- # irl-premier-division-2017
37
- # irl-premier-division-2016
38
- # irl-premier-division-2015
39
- # irl-premier-division-2014
40
- # irl-premier-division-2013
41
- # irl-airtricity-league-2012
42
- # irl-airtricity-league-2011
43
- # irl-airtricity-league-2010
44
-
45
- 'ie.1' => {
46
- pages: [
47
- 'irl-premier-division',
48
- 'irl-airtricity-league'],
49
- season: ->( season ) {
50
- case season
51
- when Season('2013')..Season('2020') then 1
52
- when Season('2010')..Season('2012') then 2
53
- end
54
- }
55
- },
56
- })
57
-
58
- end
59
-