football-sources 0.0.1 → 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 (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,127 +0,0 @@
1
-
2
- module Worldfootball
3
-
4
-
5
- LEAGUES_EUROPE.merge!({
6
-
7
- # /2-bundesliga-{season}/
8
- # /2-bundesliga-2013-2014/
9
- # /dfb-pokal-2019-2020/
10
-
11
- 'de.1' => { pages: 'bundesliga' },
12
- 'de.2' => { pages: '2-bundesliga' },
13
- 'de.3' => { pages: '3-liga' },
14
- 'de.cup' => { pages: 'dfb-pokal' },
15
-
16
-
17
-
18
- ## note: use aut-2-liga !!! starting 2019-2018 !!!
19
- ## use aut-erste-liga !!! before e.g. 2010-2011 etc.
20
- #
21
- # /aut-erste-liga-{season}/
22
- # /aut-bundesliga-2010-2011/
23
- # /aut-erste-liga-2010-2011/
24
- # /aut-oefb-cup-2019-2020/
25
-
26
- =begin
27
- 2019/2020 Qualifikationsgruppe -- >/alle_spiele/aut-bundesliga-2019-2020-qualifikationsgruppe/<
28
- 2019/2020 Playoff -- >/alle_spiele/aut-bundesliga-2019-2020-playoff/<
29
- 2019/2020 Meistergruppe -- >/alle_spiele/aut-bundesliga-2019-2020-meistergruppe/<
30
- 2019/2020 -- >/alle_spiele/aut-bundesliga-2019-2020/<
31
- 2018/2019 Qualifikationsgruppe -- >/alle_spiele/aut-bundesliga-2018-2019-qualifikationsgruppe/<
32
- 2018/2019 Playoff -- >/alle_spiele/aut-bundesliga-2018-2019-playoff/<
33
- 2018/2019 Meistergruppe -- >/alle_spiele/aut-bundesliga-2018-2019-meistergruppe/<
34
- =end
35
-
36
- 'at.1' => {
37
- pages: {
38
- 'aut-bundesliga-{season}' => 'Grunddurchgang', # 1
39
- 'aut-bundesliga-{season}-meistergruppe' => 'Finaldurchgang - Meister', # 2
40
- 'aut-bundesliga-{season}-qualifikationsgruppe' => 'Finaldurchgang - Qualifikation', # 3
41
- 'aut-bundesliga-{season}-playoff' => 'Europa League Play-off', # 4
42
- },
43
- season: ->( season ) {
44
- case season
45
- when Season('2020/21') then [1]
46
- when Season('2018/19')..Season('2019/20') then [1,2,3,4]
47
- else 1 ## use simple format for the rest; note: index NOT wrapped in array
48
- end
49
- },
50
- },
51
- 'at.2' => {
52
- pages: ['aut-2-liga',
53
- 'aut-erste-liga'],
54
- season: ->(season) { season.start_year >= 2019 ? 1 : 2 }
55
- },
56
- # /aut-regionalliga-ost-2020-2021/
57
- 'at.3.o' => { pages: 'aut-regionalliga-ost' },
58
- 'at.cup' => { pages: 'aut-oefb-cup' },
59
-
60
-
61
- # /sui-super-league-2019-2020/
62
- # /sui-challenge-league-2019-2020/
63
-
64
- 'ch.1' => { pages: 'sui-super-league' },
65
- 'ch.2' => { pages: 'sui-challenge-league' },
66
-
67
- # /hun-nb-i-2020-2021/
68
- 'hu.1' => { pages: 'hun-nb-i' },
69
-
70
- # /cze-1-fotbalova-liga-2020-2021/
71
- 'cz.1' => {
72
- pages: {
73
- 'cze-1-fotbalova-liga-{season}' => 'Regular Season', # 1
74
- },
75
- season: ->( season ) {
76
- case season
77
- when Season('2020/21') then [1] # just getting started
78
- end
79
- }
80
- },
81
-
82
-
83
- # /pol-ekstraklasa-2020-2021/
84
- # /pol-ekstraklasa-2019-2020-playoffs/
85
- # /pol-ekstraklasa-2019-2020-abstieg/
86
- #
87
- # championship round (top eight teams) and
88
- # relegation round (bottom eight teams)
89
- 'pl.1' => {
90
- pages: {
91
- 'pol-ekstraklasa-{season}' => 'Regular Season', # 1
92
- 'pol-ekstraklasa-{season}-playoffs' => 'Playoffs - Championship', # 2
93
- 'pol-ekstraklasa-{season}-abstieg' => 'Playoffs - Relegation', # 3
94
- },
95
- season: ->( season ) {
96
- case season
97
- when Season('2020/21') then [1] # just getting started
98
- when Season('2019/20') then [1,2,3]
99
- when Season('2018/19') then [1,2,3]
100
- end
101
- }
102
- },
103
-
104
- # /svk-super-liga-2020-2021/
105
- # /svk-super-liga-2019-2020-meisterschaft/
106
- # /svk-super-liga-2019-2020-abstieg/
107
- # /svk-super-liga-2019-2020-europa-league/
108
- 'sk.1' => {
109
- pages: {
110
- 'svk-super-liga-{season}' => 'Regular Season', # 1
111
- 'svk-super-liga-{season}-meisterschaft' => 'Playoffs - Championship', # 2
112
- 'svk-super-liga-{season}-abstieg' => 'Playoffs - Relegation', # 3
113
- 'svk-super-liga-{season}-europa-league' => 'Europa League Finals', # 4
114
- },
115
- season: ->( season ) {
116
- case season
117
- when Season('2020/21') then [1] # getting started
118
- when Season('2019/20') then [1,2,3,4]
119
- when Season('2018/19') then [1,2,3] # note: no europa league finals / playoffs
120
- end
121
- }
122
- },
123
-
124
-
125
- })
126
-
127
- end
@@ -1,82 +0,0 @@
1
-
2
- module Worldfootball
3
-
4
- LEAGUES_EUROPE.merge!({
5
-
6
- # /rou-liga-1-2019-2020
7
- # /rou-liga-1-2019-2020-championship
8
- # /rou-liga-1-2019-2020-relegation
9
- # ..
10
- # /rom-liga-1-2015-2016
11
- # /rom-liga-1-2015-2016-championship
12
- # /rou-liga-1-2015-2016-relegation
13
-
14
-
15
- 'ro.1' => {
16
- pages: {
17
- 'rou-liga-1-{season}' => 'Regular Season',
18
- 'rou-liga-1-{season}-championship' => 'Playoffs - Championship',
19
- 'rou-liga-1-{season}-relegation' => 'Playoffs - Relegation',
20
- ## note: change of country code from rou to rom in slug in 2015/16!!!
21
- 'rom-liga-1-{season}' => 'Regular Season',
22
- 'rom-liga-1-{season}-championship' => 'Playoffs - Championship',
23
- 'rom-liga-1-{season}-relegation' => 'Playoffs - Relegation',
24
- },
25
- season: ->( season ) {
26
- case season
27
- when Season('2020/21') then [1] # just getting started
28
- when Season('2016/17')..Season('2019/20') then [1,2,3]
29
- when Season('2015/16') then [4,5,3] # handle special case with weird mixed slugs
30
- when Season('2010/11')..Season('2014/15') then 4 ## use simple format for the rest; note: index NOT wrapped in array
31
- end
32
- }
33
- },
34
-
35
- # rus-premier-liga-2020-2021
36
- # ..
37
- # rus-premier-liga-2012-2013
38
- #
39
- # rus-premier-liga-2011-2012
40
- # rus-premier-liga-2011-2012-meisterschaft
41
- # rus-premier-liga-2011-2012-relegation
42
- #
43
- # rus-premier-liga-2010
44
- 'ru.1' => {
45
- pages: {
46
- 'rus-premier-liga-{season}' => 'Regular Season',
47
- 'rus-premier-liga-{season}-meisterschaft' => 'Playoffs - Championship',
48
- 'rus-premier-liga-{season}-relegation' => 'Playoffs - Relegation',
49
- },
50
- season: ->( season ) {
51
- case season
52
- when Season('2012/13')..Season('2020/21') then 1 ## use simple format for the rest; note: index NOT wrapped in array
53
- when Season('2011/12') then [1,2,3]
54
- when Season('2004')..Season('2010') then 1 ## use simple format for the rest; note: index NOT wrapped in array
55
- end
56
- }
57
- },
58
- 'ru.2' => { pages: 'rus-1-division' },
59
-
60
- # /ukr-premyer-liga-2019-2020/
61
- # /ukr-premyer-liga-2019-2020-meisterschaft/
62
- # /ukr-premyer-liga-2019-2020-abstieg/
63
- # /ukr-premyer-liga-2019-2020-playoffs-el/
64
- 'ua.1' => {
65
- pages: {
66
- 'ukr-premyer-liga-{season}' => 'Regular Season',
67
- 'ukr-premyer-liga-{season}-meisterschaft' => 'Playoffs - Championship',
68
- 'ukr-premyer-liga-{season}-abstieg' => 'Playoffs - Relegation',
69
- 'ukr-premyer-liga-{season}-playoffs-el' => 'Europa League Finals',
70
- },
71
- season: ->( season ) {
72
- case season
73
- when Season('2019/20') then [1,2,3,4]
74
- when Season('2018/19') then [1,2,3] # note: no europa league finals / playoffs
75
- end
76
- }
77
- },
78
-
79
- })
80
-
81
- end
82
-
@@ -1,57 +0,0 @@
1
-
2
- module Worldfootball
3
-
4
- LEAGUES_EUROPE.merge!({
5
- # e.g. /isl-urvalsdeild-2020/
6
- 'is.1' => { pages: 'isl-urvalsdeild' },
7
-
8
- # e.g. /swe-allsvenskan-2020/
9
- # /swe-superettan-2020/
10
- 'se.1' => { pages: 'swe-allsvenskan' },
11
- 'se.2' => { pages: 'swe-superettan' },
12
-
13
- # e.g. /nor-eliteserien-2020/
14
- 'no.1' => { pages: 'nor-eliteserien' },
15
-
16
- # e.g. /fin-veikkausliiga-2019/
17
- # /fin-veikkausliiga-2019-meisterschaft/
18
- # /fin-veikkausliiga-2019-abstieg/
19
- # /fin-veikkausliiga-2019-playoff-el/
20
- 'fi.1' => {
21
- pages: {
22
- 'fin-veikkausliiga-{season}' => 'Regular Season',
23
- 'fin-veikkausliiga-{season}-meisterschaft' => 'Playoffs - Championship',
24
- 'fin-veikkausliiga-{season}-abstieg' => 'Playoffs - Challenger',
25
- 'fin-veikkausliiga-{season}-playoff-el' => 'Europa League Finals',
26
- },
27
- season: ->( season ) {
28
- case season
29
- when Season('2020') then [1] # just getting started
30
- when Season('2019') then [1,2,3,4]
31
- end
32
- }
33
- },
34
-
35
- # /den-superliga-2020-2021/
36
- # /den-superliga-2019-2020-meisterschaft/
37
- # /den-superliga-2019-2020-abstieg/
38
- # /den-superliga-2019-2020-europa-league/
39
- 'dk.1' => {
40
- pages: {
41
- 'den-superliga-{season}' => 'Regular Season',
42
- 'den-superliga-{season}-meisterschaft' => 'Playoffs - Championship',
43
- 'den-superliga-{season}-abstieg' => 'Playoffs - Relegation',
44
- 'den-superliga-{season}-europa-league' => 'Europa League Finals',
45
- },
46
- season: ->( season ) {
47
- case season
48
- when Season('2020/21') then [1] # just getting started
49
- when Season('2019/20') then [1,2,3,4]
50
- when Season('2018/19') then [1,2,3,4]
51
- end
52
- }
53
- },
54
-
55
- })
56
-
57
- end
@@ -1,86 +0,0 @@
1
-
2
- module Worldfootball
3
-
4
- LEAGUES_EUROPE.merge!({
5
-
6
- # /ita-serie-a-2019-2020/
7
- # /ita-serie-b-2020-2021/
8
- 'it.1' => { pages: 'ita-serie-a' },
9
- 'it.2' => { pages: 'ita-serie-b' },
10
-
11
- # /por-primeira-liga-2019-2020/
12
- # por-primeira-liga-2020-2021
13
- # por-primeira-liga-2019-2020
14
- # por-primeira-liga-2018-2019
15
- # por-primeira-liga-2017-2018
16
- # por-primeira-liga-2016-2017
17
- # por-primeira-liga-2015-2016
18
- # por-primeira-liga-2014-2015
19
- # por-primeira-liga-2013-2014
20
- # por-liga-zon-sagres-2012-2013
21
- # por-liga-zon-sagres-2011-2012
22
- # por-liga-sagres-2010-2011
23
- # ...
24
- # /por-segunda-liga-2019-2020/
25
- # note: Sponsorship names for seasons
26
- # 2002–2005: SuperLiga GalpEnergia
27
- # 2005–2006: Liga betandwin.com
28
- # 2006–2008: BWINLIGA
29
- # 2008–2010: Liga Sagres
30
- # 2010–2014: Liga ZON Sagres
31
- # 2014–2020: Liga NOS
32
- 'pt.1' => {
33
- pages: ['por-primeira-liga',
34
- 'por-liga-zon-sagres',
35
- 'por-liga-sagres'
36
- ],
37
- season: ->( season ) {
38
- case season
39
- when Season('2013/14')..Season('2020/21') then 1
40
- when Season('2011/12')..Season('2012/13') then 2
41
- when Season('2010/11') then 3
42
- end
43
- },
44
- },
45
- 'pt.2' => { pages: 'por-segunda-liga' },
46
-
47
- # /esp-primera-division-2019-2020/
48
- 'es.1' => { pages: 'esp-primera-division' },
49
- 'es.2' => { pages: 'esp-segunda-division' },
50
-
51
- # /tur-sueperlig-2020-2021/
52
- 'tr.1' => { pages: 'tur-sueperlig' },
53
- 'tr.2' => { pages: 'tur-1-lig' },
54
-
55
-
56
- # /gre-super-league-2020-2021/
57
- 'gr.1' => {
58
- pages: {
59
- ## note: change from superleague to super-league !!!
60
- 'gre-super-league' => 'Regular Season',
61
- 'gre-super-league-{season}-meisterschaft' => 'Playoffs - Championship',
62
- 'gre-super-league-{season}-abstieg' => 'Playoffs - Relegation',
63
- 'gre-superleague' => 'Regular Season',
64
- 'gre-superleague-{end_year}-playoffs' => 'Playoffs',
65
- 'gre-superleague-{end_year}-spiel-um-platz-6' => 'Match 6th Place',
66
- },
67
- season: ->( season ) {
68
- case season
69
- when Season('2020/21') then [1] ## just getting started
70
- when Season('2019/20') then [4,2,3]
71
- when Season('2017/18')..Season('2018/19') then 4
72
- when Season('2013/14')..Season('2016/17') then [4,5]
73
- when Season('2012/13') then [4,5,6]
74
- when Season('2010/11')..Season('2011/12') then [4,5]
75
- end
76
- },
77
- },
78
-
79
-
80
- ## todo/check: add europe southeastern or balkans - why? why not?
81
- # e.g. /cro-1-hnl-2020-2021/
82
- 'hr.1' => { pages: 'cro-1-hnl' },
83
-
84
- })
85
-
86
- end
@@ -1,38 +0,0 @@
1
-
2
- module Worldfootball
3
-
4
- LEAGUES_EUROPE.merge!({
5
- 'fr.1' => { pages: 'fra-ligue-1' },
6
- 'fr.2' => { pages: 'fra-ligue-2' },
7
-
8
- # e.g. /lux-nationaldivision-2020-2021/
9
- 'lu.1' => { pages: 'lux-nationaldivision' },
10
-
11
- # e.g. /ned-eredivisie-2020-2021/
12
- 'nl.1' => { pages: 'ned-eredivisie' },
13
- # Championship play-offs
14
- # Europa League play-offs (Group A + Group B / Finals )
15
-
16
- # e.g. /bel-eerste-klasse-a-2020-2021/
17
- # /bel-europa-league-playoffs-2018-2019-playoff/
18
- # - Halbfinale
19
- # - Finale
20
- 'be.1' => {
21
- pages: {
22
- 'bel-eerste-klasse-a-{season}' => 'Regular Season',
23
- 'bel-eerste-klasse-a-{season}-playoff-i' => 'Playoffs - Championship',
24
- 'bel-europa-league-playoffs-{season}' => 'Playoffs - Europa League', ## note: missing groups (A & B)
25
- 'bel-europa-league-playoffs-{season}-playoff' => 'Playoffs - Europa League - Finals',
26
- },
27
- season: ->( season ) {
28
- case season
29
- when Season('2020/21') then [1] # just getting started
30
- when Season('2019/20') then [1] # covid-19 - no championship & europa
31
- when Season('2018/19') then [1,2,3,4]
32
- end
33
- }
34
- },
35
-
36
- })
37
-
38
- end
@@ -1,13 +0,0 @@
1
-
2
- module Worldfootball
3
- LEAGUES_EUROPE = {}
4
- end
5
-
6
-
7
- require_relative 'europe--western'
8
- require_relative 'europe--british_isles'
9
- require_relative 'europe--northern'
10
- require_relative 'europe--central'
11
- require_relative 'europe--eastern'
12
- require_relative 'europe--southern'
13
-
@@ -1,44 +0,0 @@
1
- module Worldfootball
2
-
3
- LEAGUES_NORTH_AMERICA = {
4
-
5
- # todo/fix: adjust date/time by -6 or 7 hours!!!
6
- # /can-canadian-championship-2020/
7
- # - Qual. 1. Runde
8
- # - Qual. 2. Runde
9
- # - Qual. 3. Runde
10
- # todo/fix: check for leagues - premier league? championship? soccer league?
11
- # 'ca.1' => { slug: 'can-canadian-championship' },
12
-
13
-
14
-
15
- # todo/fix: adjust date/time by -7 hours!!!
16
- ## e.g. 25.07.2020 02:30 => 24.07.2020 19.30
17
- # 11.01.2020 04:00 => 10.01.2020 21.00
18
- #
19
- # e.g. /mex-primera-division-2020-2021-apertura/
20
- # /mex-primera-division-2019-2020-clausura/
21
- # /mex-primera-division-2019-2020-apertura-playoffs/
22
- # - Viertelfinale
23
- # - Halbfinale
24
- # - Finale
25
- # /mex-primera-division-2018-2019-clausura-playoffs/
26
- 'mx.1' => {
27
- pages: {
28
- 'mex-primera-division-{season}-apertura' => 'Apertura', # 1
29
- 'mex-primera-division-{season}-apertura-playoffs' => 'Apertura - Liguilla', # 2
30
- 'mex-primera-division-{season}-clausura' => 'Clausura', # 3
31
- 'mex-primera-division-{season}-clausura-playoffs' => 'Clausura - Liguilla', # 4
32
- },
33
- season: ->( season ) {
34
- case season
35
- when Season('2020/21') then [1] # just getting started
36
- when Season('2019/20') then [1,2,3] # covid-19 - no liguilla
37
- when Season('2010/11')..Season('2018/19') then [1,2,3,4]
38
- end
39
- }
40
- },
41
- }
42
-
43
- end # module Worldfootball
44
-
@@ -1,21 +0,0 @@
1
- module Worldfootball
2
-
3
- LEAGUES_PACIFIC = {
4
-
5
- # /nzl-nz-football-championship-2019-2020/
6
- # /nzl-nz-football-championship-2018-2019-playoffs/
7
- 'nz.1' => {
8
- pages: {
9
- 'nzl-nz-football-championship-{season}' => 'Regular Season', # 1
10
- 'nzl-nz-football-championship-{season}-playoffs' => 'Playoff Finals', # 2
11
- },
12
- season: ->( season ) {
13
- case season
14
- when Season('2019/20') then [1] ## covid-19 - no playoffs/finals
15
- when Season('2018/19') then [1,2]
16
- end
17
- }
18
- },
19
- }
20
-
21
- end # module Worldfootball
@@ -1,11 +0,0 @@
1
- module Worldfootball
2
-
3
- LEAGUES_SOUTH_AMERICA = {
4
-
5
- # todo/fix: adjust date/time by -6 or 7 hours!!!
6
- # /bra-serie-a-2020/
7
- 'br.1' => { pages: 'bra-serie-a' },
8
- }
9
-
10
- end # module Worldfootball
11
-
@@ -1,200 +0,0 @@
1
-
2
-
3
- require_relative 'leagues/europe'
4
- require_relative 'leagues/north_america'
5
- require_relative 'leagues/south_america'
6
- require_relative 'leagues/pacific'
7
- require_relative 'leagues/asia'
8
-
9
-
10
- module Worldfootball
11
-
12
- LEAGUES = [LEAGUES_EUROPE,
13
- LEAGUES_NORTH_AMERICA,
14
- LEAGUES_SOUTH_AMERICA,
15
- LEAGUES_PACIFIC,
16
- LEAGUES_ASIA].reduce({}) { |mem,h| mem.merge!( h ); mem }
17
-
18
-
19
- class League
20
- def initialize( key, data )
21
- @key = key
22
- ## @data = data
23
-
24
- @pages = data[:pages]
25
- @season_proc = data[:season] || ->(season) { nil }
26
- end
27
-
28
- def key() @key; end
29
-
30
- def pages( season: )
31
- ## note: return for no stages / simple case - just a string
32
- ## and for the stages case ALWAYS an array (even if it has only one page (with stage))
33
-
34
- if @pages.is_a?( String )
35
- # assume always "simple/regular" format w/o stages
36
- slug = @pages
37
- { slug: fill_slug( slug, season: season ) }
38
- else
39
- ## check for league format / stages
40
- ## return array (of strings) or nil (for no stages - "simple" format)
41
- indices = @season_proc.call( season )
42
- if indices.nil?
43
- puts "!! ERROR - no configuration found for season >#{season}< for league >#{@key}< found; sorry"
44
- exit 1
45
- elsif indices.is_a?( Integer ) ## single number - single/regular format w/o stage
46
- # note: starting with 0 (always use idx-1) !!!
47
- slug = if @pages.is_a?( Array )
48
- @pages[indices-1]
49
- else ## assume hash (and key is page slug)
50
- @pages.keys[indices-1]
51
- end
52
- { slug: fill_slug( slug, season: season ) }
53
- else ## assume regular case - array of integers
54
- recs = []
55
- indices.each do |idx|
56
- slug = key = @pages.keys[idx-1]
57
- recs << { slug: fill_slug( slug, season: season ),
58
- stage: @pages[key] } ## note: include mapping for page to stage name!!
59
- end
60
- recs
61
- end
62
- end
63
- end # pages
64
-
65
-
66
- ######
67
- # helper method
68
- def fill_slug( slug, season: )
69
- ## note: fill-in/check for place holders too
70
- slug = if slug.index( '{season}' )
71
- slug.sub( '{season}', season.to_path( :long ) ) ## e.g. 2010-2011
72
- elsif slug.index( '{end_year}' )
73
- slug.sub( '{end_year}', season.end_year.to_s ) ## e.g. 2011
74
- else
75
- ## assume convenience fallback - append regular season
76
- "#{slug}-#{season.to_path( :long )}"
77
- end
78
-
79
- puts " slug=>#{slug}<"
80
-
81
- slug
82
- end
83
- end # class League
84
-
85
-
86
-
87
- def self.find_league( key ) ## league info lookup
88
- data = LEAGUES[ key ]
89
- if data.nil?
90
- puts "!! ERROR - no league found for >#{key}<; add to leagues tables"
91
- exit 1
92
- end
93
- League.new( key, data ) ## use a convenience wrapper for now
94
- end
95
-
96
-
97
-
98
- ### "reverse" lookup by page - returns league AND season
99
- ## note: "blind" season template para - might be season or start_year etc.
100
- ## e.g. {season} or {start_year} becomes {}
101
-
102
- PAGE_VAR_RE = /{
103
- [^}]+
104
- }/x
105
-
106
-
107
- def self.norm_slug( slug )
108
- ## assume convenience fallback - append regular season
109
- slug.index( '{' ) ? slug : "#{slug}-{season}"
110
- end
111
-
112
- PAGES ||=
113
- LEAGUES.reduce( {} ) do |pages, (key, data)|
114
- if data[:pages].is_a?( String )
115
- slug = data[:pages]
116
- slug = Worldfootball.norm_slug( slug )
117
- pages[ slug.sub( PAGE_VAR_RE, '{}') ] = { league: key, slug: slug }
118
- elsif data[:pages].is_a?( Array )
119
- data[:pages].each do |slug|
120
- slug = Worldfootball.norm_slug( slug )
121
- pages[ slug.sub( PAGE_VAR_RE, '{}') ] = { league: key, slug: slug }
122
- end
123
- ## elsif data[:pages].nil?
124
- ## todo/fix: missing pages!!!
125
- else ## assume hash
126
- ## add stage to pages too - why? why not?
127
- data[:pages].each do |slug, stage|
128
- slug = Worldfootball.norm_slug( slug )
129
- pages[ slug.sub( PAGE_VAR_RE, '{}') ] = { league: key, slug: slug, stage: stage }
130
- end
131
- end
132
- pages
133
- end
134
-
135
- # e.g. 2000 or 2000-2001
136
- SEASON_RE = /[0-9]{4}
137
- (?:
138
- -[0-9]{4}
139
- )?
140
- /x
141
-
142
-
143
- def self.find_page!( slug )
144
- page = find_page( slug )
145
- if page.nil?
146
- puts "!! ERROR: no mapping for page >#{slug}< found; sorry"
147
-
148
- season_str = nil
149
- norm = slug.sub( SEASON_RE ) do |match| ## replace season with var placeholder {}
150
- season_str = match ## keep reference to season str
151
- '{}' ## replace with {}
152
- end
153
-
154
- puts " season: >#{season_str}<"
155
- puts " slug (norm): >#{norm}<"
156
- puts
157
- ## pp PAGES
158
- exit 1
159
- end
160
- page
161
- end
162
-
163
-
164
-
165
- def self.find_page( slug )
166
- ## return league key and season
167
- season_str = nil
168
- norm = slug.sub( SEASON_RE ) do |match| ## replace season with var placeholder {}
169
- season_str = match ## keep reference to season str
170
- '{}' ## replace with {}
171
- end
172
-
173
- if season_str.nil?
174
- puts "!! ERROR: no season found in page slug >#{slug}<; sorry"
175
- exit 1
176
- end
177
-
178
- rec = PAGES[ norm ]
179
- return nil if rec.nil?
180
-
181
-
182
- league_key = rec[:league]
183
- slug_tmpl = rec[:slug]
184
- season = if slug_tmpl.index( '{start_year}' )
185
- ## todo/check - season_str must be year (e.g. 2020 or such and NOT 2020-2021)
186
- Season( "#{season_str.to_i}-#{season_str.to_i+1}" )
187
- elsif slug_tmpl.index( '{end_year}' )
188
- ## todo/check - season_str must be year (e.g. 2020 or such and NOT 2020-2021)
189
- Season( "#{season_str.to_i-1}-#{season_str.to_i}" )
190
- else ## assume "regular" seasson - pass through as is
191
- Season( season_str )
192
- end
193
-
194
- ## return hash table / record
195
- { league: league_key,
196
- season: season.key }
197
- end
198
-
199
-
200
- end # module Worldfootball