sportdb-writers 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1 -1
- data/Manifest.txt +6 -9
- data/bin/fbgen +93 -9
- data/config/leagues_america.csv +6 -0
- data/config/leagues_europe.csv +85 -0
- data/config/leagues_world.csv +4 -0
- data/config/openfootball.csv +52 -0
- data/lib/sportdb/writers/github.rb +26 -138
- data/lib/sportdb/writers/github_config.rb +97 -0
- data/lib/sportdb/writers/league_config.rb +83 -0
- data/lib/sportdb/writers/version.rb +1 -1
- data/lib/sportdb/writers/write.rb +11 -8
- data/lib/sportdb/writers.rb +50 -12
- metadata +8 -11
- data/lib/sportdb/leagues/leagues_at.rb +0 -35
- data/lib/sportdb/leagues/leagues_de.rb +0 -21
- data/lib/sportdb/leagues/leagues_eng.rb +0 -58
- data/lib/sportdb/leagues/leagues_es.rb +0 -15
- data/lib/sportdb/leagues/leagues_europe.rb +0 -185
- data/lib/sportdb/leagues/leagues_it.rb +0 -16
- data/lib/sportdb/leagues/leagues_mx.rb +0 -23
- data/lib/sportdb/leagues/leagues_south_america.rb +0 -17
- data/lib/sportdb/leagues/leagues_world.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e6c426324cdb4d759fd741cc287435dc10a16f7aabbaf699295132c0f38a6e1
|
4
|
+
data.tar.gz: 70b7dc48369a7b822cd2b800dcb9dc05f1188cf18559bb43a5654d3fd63dc304
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f78877c0169b086b0e3b8d0e5357b0b24a729a12f294a5344d7797ffe6f7be29eb0d4ed7557181429c07b959c4ddce7528bbdeb272e7e8da4396a5d037c17f0
|
7
|
+
data.tar.gz: 24502014e49eb97679ab177b893f44a375f796185155da9ee4a5e7d705d5d3e43e171b14a6c494ef3cb3087961f769fc09aa646e4e48a50cc6b426d961839789
|
data/CHANGELOG.md
CHANGED
data/Manifest.txt
CHANGED
@@ -4,18 +4,15 @@ README.md
|
|
4
4
|
Rakefile
|
5
5
|
bin/fbgen
|
6
6
|
bin/fbtxt
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
lib/sportdb/leagues/leagues_europe.rb
|
12
|
-
lib/sportdb/leagues/leagues_it.rb
|
13
|
-
lib/sportdb/leagues/leagues_mx.rb
|
14
|
-
lib/sportdb/leagues/leagues_south_america.rb
|
15
|
-
lib/sportdb/leagues/leagues_world.rb
|
7
|
+
config/leagues_america.csv
|
8
|
+
config/leagues_europe.csv
|
9
|
+
config/leagues_world.csv
|
10
|
+
config/openfootball.csv
|
16
11
|
lib/sportdb/writers.rb
|
17
12
|
lib/sportdb/writers/github.rb
|
13
|
+
lib/sportdb/writers/github_config.rb
|
18
14
|
lib/sportdb/writers/goals.rb
|
15
|
+
lib/sportdb/writers/league_config.rb
|
19
16
|
lib/sportdb/writers/txt_writer.rb
|
20
17
|
lib/sportdb/writers/version.rb
|
21
18
|
lib/sportdb/writers/write.rb
|
data/bin/fbgen
CHANGED
@@ -14,13 +14,42 @@ args=ARGV
|
|
14
14
|
|
15
15
|
|
16
16
|
opts = {
|
17
|
+
source_path: [],
|
18
|
+
push: false,
|
19
|
+
dry: false, ## dry run (no write)
|
20
|
+
debug: true,
|
17
21
|
}
|
18
22
|
|
23
|
+
|
24
|
+
|
19
25
|
parser = OptionParser.new do |parser|
|
20
|
-
parser.banner = "Usage: #{$PROGRAM_NAME} [options]"
|
26
|
+
parser.banner = "Usage: #{$PROGRAM_NAME} [options] [args]"
|
27
|
+
|
28
|
+
parser.on( "-p", "--push",
|
29
|
+
"fast forward sync and commit & push changes to git repo - default is (#{opts[:push]})" ) do |push|
|
30
|
+
opts[:push] = push
|
31
|
+
end
|
32
|
+
parser.on( "--dry",
|
33
|
+
"dry run; do NOT write - default is (#{opts[:dry]})" ) do |dry|
|
34
|
+
opts[:dry] = dry
|
35
|
+
end
|
36
|
+
parser.on( "-q", "--quiet",
|
37
|
+
"less debug output/messages - default is (#{!opts[:debug]})" ) do |debug|
|
38
|
+
opts[:debug] = !debug
|
39
|
+
end
|
21
40
|
end
|
22
41
|
parser.parse!( args )
|
23
42
|
|
43
|
+
|
44
|
+
|
45
|
+
if opts[:source_path].empty? &&
|
46
|
+
File.exist?( '/sports/cache.api.fbdat') &&
|
47
|
+
File.exist?( '/sports/cache.wfb' )
|
48
|
+
opts[:source_path] << '/sports/cache.api.fbdat'
|
49
|
+
opts[:source_path] << '/sports/cache.wfb'
|
50
|
+
end
|
51
|
+
|
52
|
+
|
24
53
|
puts "OPTS:"
|
25
54
|
p opts
|
26
55
|
puts "ARGV:"
|
@@ -56,6 +85,47 @@ end
|
|
56
85
|
pp datasets
|
57
86
|
|
58
87
|
|
88
|
+
|
89
|
+
def find_file( filename, path: )
|
90
|
+
path.each do |src_dir|
|
91
|
+
path = "#{src_dir}/#{filename}"
|
92
|
+
return path if File.exist?( path )
|
93
|
+
end
|
94
|
+
|
95
|
+
## fix - raise file not found error!!!
|
96
|
+
nil ## not found - raise filenot found error - why? why not?
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
source_path = opts[:source_path]
|
101
|
+
source_path = ['.'] if source_path.empty? ## use ./ as default
|
102
|
+
|
103
|
+
|
104
|
+
root_dir = if opts[:push]
|
105
|
+
SportDb::GitHubSync.root # e.g. "/sports"
|
106
|
+
else
|
107
|
+
'./o'
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
puts " (output) root_dir: >#{root_dir}<"
|
112
|
+
|
113
|
+
|
114
|
+
sync = if opts[:push]
|
115
|
+
repos = SportDb::GitHubSync.find_repos( datasets )
|
116
|
+
puts " #{repos.size} repo(s):"
|
117
|
+
pp repos
|
118
|
+
SportDb::GitHubSync.new( repos )
|
119
|
+
else
|
120
|
+
nil
|
121
|
+
end
|
122
|
+
puts " sync:"
|
123
|
+
pp sync
|
124
|
+
|
125
|
+
sync.git_fast_forward_if_clean if sync
|
126
|
+
|
127
|
+
|
128
|
+
|
59
129
|
datasets.each do |league_key, seasons|
|
60
130
|
seasons = [ Season('2024/25') ] if seasons.empty?
|
61
131
|
|
@@ -66,15 +136,22 @@ datasets.each do |league_key, seasons|
|
|
66
136
|
|
67
137
|
seasons.each do |season|
|
68
138
|
### get matches
|
69
|
-
|
70
|
-
|
139
|
+
|
140
|
+
filename = "#{season.to_path}/#{league_key}.csv"
|
141
|
+
path = find_file( filename, path: source_path )
|
142
|
+
|
143
|
+
if path.nil?
|
144
|
+
puts "!! no source found for #{filename}; sorry"
|
145
|
+
exit 1
|
146
|
+
end
|
147
|
+
|
71
148
|
puts " ---> reading matches in #{path} ..."
|
72
149
|
matches = SportDb::CsvMatchParser.read( path )
|
73
150
|
puts " #{matches.size} matches"
|
74
151
|
|
75
152
|
## build
|
76
153
|
txt = SportDb::TxtMatchWriter.build( matches )
|
77
|
-
puts txt
|
154
|
+
puts txt if opts[:debug]
|
78
155
|
|
79
156
|
league_name = league_info[ :name ] # e.g. Brasileiro Série A
|
80
157
|
basename = league_info[ :basename] #.e.g 1-seriea
|
@@ -86,14 +163,21 @@ datasets.each do |league_key, seasons|
|
|
86
163
|
buf << "= #{league_name} #{season}\n\n"
|
87
164
|
buf << txt
|
88
165
|
|
89
|
-
|
90
|
-
|
91
|
-
repo_path
|
166
|
+
repo = SportDb::GitHubSync::REPOS[ league_key ]
|
167
|
+
repo_path = "#{repo['owner']}/#{repo['name']}"
|
168
|
+
repo_path << "/#{repo['path']}" if repo['path'] ## note: do NOT forget to add optional extra path!!!
|
92
169
|
|
93
|
-
outpath = "
|
94
|
-
|
170
|
+
outpath = "#{root_dir}/#{repo_path}/#{season.to_path}/#{basename}.txt"
|
171
|
+
if opts[:dry]
|
172
|
+
puts " (dry) writing to >#{outpath}<..."
|
173
|
+
else
|
174
|
+
write_text( outpath, buf )
|
175
|
+
end
|
95
176
|
end
|
96
177
|
end
|
97
178
|
|
98
179
|
|
180
|
+
sync.git_push_if_changes if sync
|
181
|
+
|
182
|
+
|
99
183
|
puts "bye"
|
@@ -0,0 +1,85 @@
|
|
1
|
+
key, name, basename, start_season, end_season, comments
|
2
|
+
|
3
|
+
at.1, Österr. Bundesliga, 1-bundesliga,,,
|
4
|
+
at.2, Österr. 2. Liga, 2-liga2, 2018/19,,
|
5
|
+
at.2, Österr. Erste Liga, 2-liga1, , 2017/18,
|
6
|
+
at.3.o, Österr. Regionalliga Ost, 3-regionalliga-ost,,,
|
7
|
+
at.cup, ÖFB Cup, cup,,,
|
8
|
+
|
9
|
+
|
10
|
+
de.1, Deutsche Bundesliga, 1-bundesliga,,,
|
11
|
+
de.2, Deutsche 2. Bundesliga, 2-bundesliga2,,,
|
12
|
+
de.3, Deutsche 3. Liga, 3-liga3,,,
|
13
|
+
de.cup, DFB Pokal, cup,,,
|
14
|
+
|
15
|
+
it.1, Italian Serie A, 1-seriea,,,
|
16
|
+
it.2, Italian Serie B, 2-serieb,,,
|
17
|
+
|
18
|
+
es.1, Primera División de España, 1-liga,,,
|
19
|
+
es.2, Segunda División de España, 2-liga2,,,
|
20
|
+
|
21
|
+
fr.1, French Ligue 1, 1-ligue1,,,
|
22
|
+
fr.2, French Ligue 2, 2-ligue2,,,
|
23
|
+
|
24
|
+
|
25
|
+
eng.1, English Premier League, 1-premierleague, 1992/93,,
|
26
|
+
eng.1, English Division One, 1-division1, 1892/93, 1991/92, ## start of division 1 & 2
|
27
|
+
eng.1, English Football League, 1-footballleague, 1888/89, 1891/92, ## single league (no divisions)
|
28
|
+
|
29
|
+
eng.2, English Championship, 2-championship, 2004/05,, ## rebranding divsion 1 => championship
|
30
|
+
eng.2, English Division One, 2-division1, 1992/93, 2003/04, ## start of premier league
|
31
|
+
eng.2, English Division Two, 2-division2, 1892/93, 1991/92, ## or use English Football League Second Division ???
|
32
|
+
|
33
|
+
eng.3, English League One, 3-league1,,,
|
34
|
+
eng.4, English League Two, 4-league2,,,
|
35
|
+
eng.5, English National League, 5-nationalleague,,,
|
36
|
+
eng.cup, English FA Cup, facup,,,
|
37
|
+
|
38
|
+
|
39
|
+
hu.1, Hungarian NB I, 1-nbi,,,
|
40
|
+
|
41
|
+
gr.1, Super League Greece, 1-superleague,,,
|
42
|
+
|
43
|
+
pt.1, Portuguese Primeira Liga, 1-primeiraliga,,,
|
44
|
+
pt.2, Portuguese Segunda Liga, 2-segundaliga,,,
|
45
|
+
|
46
|
+
ch.1, Swiss Super League, 1-superleague,,,
|
47
|
+
ch.2, Swiss Challenge League, 2-challengeleague,,,
|
48
|
+
|
49
|
+
tr.1, Turkish Süper Lig, 1-superlig,,,
|
50
|
+
tr.2, Turkish 1. Lig, 2-lig1,,,
|
51
|
+
|
52
|
+
is.1, Iceland Urvalsdeild, 1-urvalsdeild,,,
|
53
|
+
|
54
|
+
sco.1, Scottish Premiership, 1-premiership,,,
|
55
|
+
|
56
|
+
ie.1, Irish Premier Division, 1-premierdivision,,,
|
57
|
+
|
58
|
+
fi.1, Finland Veikkausliiga, 1-veikkausliiga,,,
|
59
|
+
|
60
|
+
se.1, Sweden Allsvenskan, 1-allsvenskan,,,
|
61
|
+
se.2, Sweden Superettan, 2-superettan,,,
|
62
|
+
|
63
|
+
no.1, Norwegian Eliteserien, 1-eliteserien,,,
|
64
|
+
dk.1, Denmark Superligaen, 1-superligaen,,,
|
65
|
+
|
66
|
+
lu.1, Luxembourger First Division, 1-nationaldivision,,,
|
67
|
+
|
68
|
+
be.1, Belgian First Division A, 1-firstdivisiona,,,
|
69
|
+
|
70
|
+
nl.1, Dutch Eredivisie, 1-eredivisie,,,
|
71
|
+
|
72
|
+
cz.1, Czech First League, 1-firstleague,,,
|
73
|
+
sk.1, Slovakia First League, 1-superliga,,,
|
74
|
+
hr.1, Croatia 1. HNL, 1-hnl,,,
|
75
|
+
|
76
|
+
pl.1, Poland Ekstraklasa, 1-ekstraklasa,,,
|
77
|
+
|
78
|
+
ro.1, Romanian Liga 1, 1-liga1,,,
|
79
|
+
|
80
|
+
ua.1, Ukraine Premier League, 1-premierleague,,,
|
81
|
+
|
82
|
+
ru.1, Russian Premier League, 1-premierliga,,,
|
83
|
+
ru.2, Russian 1. Division, 2-division1,,,
|
84
|
+
|
85
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
key, path
|
2
|
+
|
3
|
+
at, austria
|
4
|
+
|
5
|
+
de, deutschland
|
6
|
+
eng, england
|
7
|
+
es, espana
|
8
|
+
it, italy
|
9
|
+
|
10
|
+
fr, europe/france
|
11
|
+
|
12
|
+
hu, europe/hungary
|
13
|
+
gr, europe/greece
|
14
|
+
pt, europe/portugal
|
15
|
+
|
16
|
+
ch, europe/switzerland
|
17
|
+
|
18
|
+
tr, europe/turkey
|
19
|
+
|
20
|
+
is, europe/iceland
|
21
|
+
sco, europe/scotland
|
22
|
+
ie, europe/ireland
|
23
|
+
|
24
|
+
fi, europe/finland
|
25
|
+
se, europe/sweden
|
26
|
+
no, europe/norway
|
27
|
+
dk, europe/denmark
|
28
|
+
|
29
|
+
lu, europe/luxembourg
|
30
|
+
be, europe/belgium
|
31
|
+
nl, europe/netherlands
|
32
|
+
cz, europe/czech-republic
|
33
|
+
|
34
|
+
sk, europe/slovakia
|
35
|
+
hr, europe/croatia
|
36
|
+
pl, europe/poland
|
37
|
+
|
38
|
+
ro, europe/romania
|
39
|
+
|
40
|
+
ua, europe/ukraine
|
41
|
+
|
42
|
+
ru, europe/russia
|
43
|
+
|
44
|
+
|
45
|
+
mx, mexico
|
46
|
+
|
47
|
+
ar, south-america/argentina
|
48
|
+
br, south-america/brazil
|
49
|
+
|
50
|
+
cn, world/asia/china
|
51
|
+
jp, world/asia/japan
|
52
|
+
|
@@ -6,118 +6,47 @@ module SportDb
|
|
6
6
|
## add -i/--interactive flag
|
7
7
|
## will prompt yes/no before git operations (with consequences)!!!
|
8
8
|
|
9
|
+
|
10
|
+
|
9
11
|
class GitHubSync
|
10
12
|
|
11
|
-
|
12
|
-
## e.g. fr.1 => europe/france
|
13
|
-
## eng..1 => england
|
14
|
-
REPOS = {
|
15
|
-
'at.1' => 'austria',
|
16
|
-
'at.2' => 'austria',
|
17
|
-
'at.3.o' => 'austria',
|
18
|
-
'at.cup' => 'austria',
|
19
|
-
|
20
|
-
'de.1' => 'deutschland',
|
21
|
-
'de.2' => 'deutschland',
|
22
|
-
'de.3' => 'deutschland',
|
23
|
-
'de.cup' => 'deutschland',
|
24
|
-
|
25
|
-
'eng.1' => 'england',
|
26
|
-
'eng.2' => 'england',
|
27
|
-
'eng.3' => 'england',
|
28
|
-
'eng.4' => 'england',
|
29
|
-
'eng.5' => 'england',
|
30
|
-
'eng.cup' => 'england', # English FA Cup
|
31
|
-
|
32
|
-
'es.1' => 'espana',
|
33
|
-
'es.2' => 'espana',
|
34
|
-
|
35
|
-
'fr.1' => 'europe/france',
|
36
|
-
'fr.2' => 'europe/france',
|
37
|
-
|
38
|
-
'hu.1' => 'europe/hungary',
|
39
|
-
'gr.1' => 'europe/greece',
|
40
|
-
'pt.1' => 'europe/portugal',
|
41
|
-
'pt.2' => 'europe/portugal',
|
42
|
-
|
43
|
-
'ch.1' => 'europe/switzerland',
|
44
|
-
'ch.2' => 'europe/switzerland',
|
45
|
-
|
46
|
-
'tr.1' => 'europe/turkey',
|
47
|
-
'tr.2' => 'europe/turkey',
|
48
|
-
|
49
|
-
'is.1' => 'europe/iceland',
|
50
|
-
'sco.1' => 'europe/scotland',
|
51
|
-
'ie.1' => 'europe/ireland',
|
52
|
-
|
53
|
-
'fi.1' => 'europe/finland',
|
54
|
-
'se.1' => 'europe/sweden',
|
55
|
-
'se.2' => 'europe/sweden',
|
56
|
-
'no.1' => 'europe/norway',
|
57
|
-
'dk.1' => 'europe/denmark',
|
58
|
-
|
59
|
-
'lu.1' => 'europe/luxembourg',
|
60
|
-
'be.1' => 'europe/belgium',
|
61
|
-
'nl.1' => 'europe/netherlands',
|
62
|
-
'cz.1' => 'europe/czech-republic',
|
63
|
-
|
64
|
-
'sk.1' => 'europe/slovakia',
|
65
|
-
'hr.1' => 'europe/croatia',
|
66
|
-
'pl.1' => 'europe/poland',
|
67
|
-
|
68
|
-
'ro.1' => 'europe/romania',
|
69
|
-
|
70
|
-
'ua.1' => 'europe/ukraine',
|
71
|
-
|
72
|
-
'ru.1' => 'europe/russia',
|
73
|
-
'ru.2' => 'europe/russia',
|
74
|
-
|
75
|
-
'it.1' => 'italy',
|
76
|
-
'it.2' => 'italy',
|
77
|
-
|
78
|
-
'mx.1' => 'mexico',
|
79
|
-
|
80
|
-
'ar.1' => 'south-america/argentina',
|
81
|
-
'br.1' => 'south-america/brazil',
|
82
|
-
|
83
|
-
'cn.1' => 'world/asia/china',
|
84
|
-
'jp.1' => 'world/asia/japan',
|
85
|
-
}
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
########
|
13
|
+
########
|
90
14
|
## (auto)default to Writer.config.out_dir - why? why not?
|
91
15
|
##
|
92
|
-
## note - is
|
93
|
-
|
94
|
-
def self.root
|
16
|
+
## note - is monotree (that is, requires openfootball/england etc.
|
17
|
+
## for repo pathspecs)
|
18
|
+
def self.root() @root || "/sports"; end
|
19
|
+
def self.root=( dir ) @root = dir; end
|
95
20
|
## use root_dir (alias) - why? why not?
|
96
21
|
|
97
22
|
|
98
|
-
def initialize(
|
99
|
-
@repos =
|
23
|
+
def initialize( repos )
|
24
|
+
@repos = repos
|
100
25
|
end
|
101
26
|
|
102
27
|
|
103
|
-
def git_push_if_changes
|
104
|
-
|
105
|
-
|
106
|
-
|
28
|
+
def git_push_if_changes
|
29
|
+
message = "auto-update week #{Date.today.cweek}" ## add /#{Date.today.cday - why? why not?
|
30
|
+
puts message
|
31
|
+
|
32
|
+
@repos.each do |pathspec|
|
33
|
+
_git_push_if_changes( pathspec, message: message )
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
107
37
|
def git_fast_forward_if_clean
|
108
|
-
|
38
|
+
@repos.each do |pathspec|
|
39
|
+
_git_fast_forward_if_clean( pathspec )
|
40
|
+
end
|
109
41
|
end
|
110
42
|
|
111
43
|
|
44
|
+
|
112
45
|
## todo/fix: rename to something like
|
113
46
|
## git_(auto_)commit_and_push_if_changes/if_dirty()
|
114
47
|
|
115
|
-
def _git_push_if_changes(
|
116
|
-
|
117
|
-
puts message
|
118
|
-
|
119
|
-
names.each do |name|
|
120
|
-
path = "#{self.class.root}/#{name}"
|
48
|
+
def _git_push_if_changes( pathspec, message: )
|
49
|
+
path = "#{self.class.root}/#{pathspec}"
|
121
50
|
|
122
51
|
Gitti::GitProject.open( path ) do |proj|
|
123
52
|
puts ''
|
@@ -133,13 +62,11 @@ def _git_push_if_changes( names ) ## optenfootball repo names e.g. world, engl
|
|
133
62
|
proj.push
|
134
63
|
end
|
135
64
|
end
|
136
|
-
end
|
137
65
|
end
|
138
66
|
|
139
67
|
|
140
|
-
def _git_fast_forward_if_clean(
|
141
|
-
|
142
|
-
path = "#{self.class.root}/#{name}"
|
68
|
+
def _git_fast_forward_if_clean( pathspec )
|
69
|
+
path = "#{self.class.root}/#{pathspec}"
|
143
70
|
|
144
71
|
Gitti::GitProject.open( path ) do |proj|
|
145
72
|
output = proj.changes
|
@@ -151,45 +78,6 @@ def _git_fast_forward_if_clean( names )
|
|
151
78
|
|
152
79
|
proj.fast_forward
|
153
80
|
end
|
154
|
-
end
|
155
81
|
end
|
156
|
-
|
157
|
-
|
158
|
-
## todo/check: find a better name for helper?
|
159
|
-
## note: datasets of format
|
160
|
-
##
|
161
|
-
## DATASETS = [
|
162
|
-
## ['it.1', %w[2020/21 2019/20]],
|
163
|
-
## ['it.2', %w[2019/20]],
|
164
|
-
## ['es.1', %w[2019/20]],
|
165
|
-
## ['es.2', %w[2019/20]],
|
166
|
-
## ]
|
167
|
-
|
168
|
-
|
169
|
-
def _find_repos( datasets )
|
170
|
-
repos = []
|
171
|
-
datasets.each do |dataset|
|
172
|
-
league_key = dataset[0]
|
173
|
-
path = REPOS[ league_key ]
|
174
|
-
## pp path
|
175
|
-
if path.nil?
|
176
|
-
puts "!! ERROR - no repo path found for league >#{league_key}<; sorry"
|
177
|
-
exit 1
|
178
|
-
end
|
179
|
-
|
180
|
-
## auto-add
|
181
|
-
## openfootball/ org here
|
182
|
-
## and keep root "generic" to monoroot - why? why not?
|
183
|
-
|
184
|
-
## use only first part e.g. europe/belgium => europe
|
185
|
-
repos << path.split( '/' )[0]
|
186
|
-
end
|
187
|
-
pp repos
|
188
|
-
repos.uniq ## note: remove duplicates (e.g. europe or world or such)
|
189
|
-
end
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
82
|
end # class GitHub
|
195
83
|
end # module SportDb
|
@@ -0,0 +1,97 @@
|
|
1
|
+
|
2
|
+
module SportDb
|
3
|
+
class GitHubConfig
|
4
|
+
|
5
|
+
## map leagues to repo+path
|
6
|
+
## e.g. fr.1 => europe/france
|
7
|
+
## eng..1 => england
|
8
|
+
##
|
9
|
+
## for other than openfootball (default)
|
10
|
+
## use @
|
11
|
+
## e.g. myorg@austria
|
12
|
+
## austria@myorg ??
|
13
|
+
##
|
14
|
+
## myorg@europe/france
|
15
|
+
## europe/france@myorg
|
16
|
+
|
17
|
+
|
18
|
+
def self.read( path )
|
19
|
+
recs = read_csv( path )
|
20
|
+
new( recs )
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize( recs=nil )
|
24
|
+
@table = {}
|
25
|
+
add( recs ) if recs
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def add( recs )
|
30
|
+
recs.each do |rec|
|
31
|
+
path = rec['path'] ## use pathspec - why? why not?
|
32
|
+
## or repospec or such
|
33
|
+
|
34
|
+
## auto-expand to openfootball as default org if no @ specified
|
35
|
+
owner, path = if path.index( '@')
|
36
|
+
path.split( '@', 2 )
|
37
|
+
else
|
38
|
+
['openfootball', path ]
|
39
|
+
end
|
40
|
+
name, path = path.split( '/', 2 )
|
41
|
+
|
42
|
+
|
43
|
+
## openfootball@europe/france
|
44
|
+
## =>
|
45
|
+
## owner: openfootball
|
46
|
+
## name: europe
|
47
|
+
## path: france
|
48
|
+
##
|
49
|
+
## openfootball@austria
|
50
|
+
## =>
|
51
|
+
## owner: openfootball
|
52
|
+
## name: austria
|
53
|
+
## path: nil
|
54
|
+
@table[ rec['key'] ] = { 'owner' => owner, ## (required)
|
55
|
+
'name' => name, ## (required)
|
56
|
+
'path' => path ## extra/inner/inside/local path (optional)
|
57
|
+
}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
##
|
63
|
+
## todo/fix:
|
64
|
+
## make key lookup more flexible
|
65
|
+
## auto-add more variants!!!
|
66
|
+
## e.g. at.1 AT1, AT or such
|
67
|
+
##
|
68
|
+
|
69
|
+
## find (full) record by key
|
70
|
+
def find( key )
|
71
|
+
key = key.to_s.downcase
|
72
|
+
|
73
|
+
## first check for 1:1 match
|
74
|
+
rec = @table[key]
|
75
|
+
if rec.nil?
|
76
|
+
## try match by (country / first) code
|
77
|
+
## split by .
|
78
|
+
key, _ = key.split( '.' )
|
79
|
+
rec = @table[key]
|
80
|
+
end
|
81
|
+
|
82
|
+
rec
|
83
|
+
end
|
84
|
+
alias_method :[], :find ## keep alias - why? why not?
|
85
|
+
|
86
|
+
|
87
|
+
def find_repo( key )
|
88
|
+
rec = _find( key )
|
89
|
+
|
90
|
+
rec ? "#{rec['owner']}/#{rec['name']}" : nil
|
91
|
+
end
|
92
|
+
|
93
|
+
end # class GitHubConfig
|
94
|
+
end # module SportDb
|
95
|
+
|
96
|
+
|
97
|
+
|
@@ -0,0 +1,83 @@
|
|
1
|
+
|
2
|
+
module SportDb
|
3
|
+
class LeagueConfig
|
4
|
+
|
5
|
+
def self.read( path )
|
6
|
+
recs = read_csv( path )
|
7
|
+
new( recs )
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize( recs=nil )
|
11
|
+
@table = {}
|
12
|
+
add( recs ) if recs
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
class LeagueItem
|
17
|
+
def initialize
|
18
|
+
@recs = []
|
19
|
+
end
|
20
|
+
def add( rec ) @recs << rec; end
|
21
|
+
alias_method :<<, :add
|
22
|
+
|
23
|
+
def find_by_season( season )
|
24
|
+
@recs.each do |rec|
|
25
|
+
start_season = rec['start_season']
|
26
|
+
end_season = rec['end_season']
|
27
|
+
return rec if (start_season.nil? || start_season <= season) &&
|
28
|
+
(end_season.nil? || end_season >= season)
|
29
|
+
end
|
30
|
+
nil
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def name_by_season( season )
|
35
|
+
rec = find_by_season( season )
|
36
|
+
rec ? rec['name'] : nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def basename_by_season( season )
|
40
|
+
rec = find_by_season( season )
|
41
|
+
rec ? rec['basename'] : nil
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def [](key)
|
46
|
+
## short cut - if only one or zero rec
|
47
|
+
## return directly
|
48
|
+
if @recs.empty?
|
49
|
+
nil
|
50
|
+
elsif @recs.size == 1 &&
|
51
|
+
@recs[0]['start_season'].nil? &&
|
52
|
+
@recs[0]['end_season'].nil?
|
53
|
+
@recs[0][key.to_s]
|
54
|
+
else ### return proc that requires season arg
|
55
|
+
case key.to_sym
|
56
|
+
when :name then method(:name_by_season).to_proc
|
57
|
+
when :basename then method(:basename_by_season).to_proc
|
58
|
+
else
|
59
|
+
nil ## return nil - why? why not?
|
60
|
+
## raise ArgumentError, "invalid key #{key}; use :name or :basename"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def add( recs )
|
67
|
+
recs.each do |rec|
|
68
|
+
@table[ rec['key'] ] ||= LeagueItem.new
|
69
|
+
|
70
|
+
## note: auto-change seasons to season object or nil
|
71
|
+
@table[ rec['key'] ] << { 'name' => rec['name'],
|
72
|
+
'basename' => rec['basename'],
|
73
|
+
'start_season' => rec['start_season'].empty? ? nil : Season.parse( rec['start_season'] ),
|
74
|
+
'end_season' => rec['end_season'].empty? ? nil : Season.parse( rec['end_season'] ),
|
75
|
+
}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
def [](key) @table[ key.to_s.downcase ]; end
|
81
|
+
|
82
|
+
end # class LeagueConfig
|
83
|
+
end # module SportDb
|
@@ -53,7 +53,7 @@ def self.write( league:, season:,
|
|
53
53
|
source:,
|
54
54
|
extra: nil,
|
55
55
|
split: false,
|
56
|
-
normalize: false,
|
56
|
+
normalize: false,
|
57
57
|
rounds: true )
|
58
58
|
season = Season( season ) ## normalize season
|
59
59
|
|
@@ -71,7 +71,7 @@ def self.write( league:, season:,
|
|
71
71
|
exit 1
|
72
72
|
end
|
73
73
|
source_info = { path: source } ## wrap in "plain" source dir in source info
|
74
|
-
|
74
|
+
|
75
75
|
source_path = source_info[:path]
|
76
76
|
|
77
77
|
## format lets you specify directory layout
|
@@ -106,14 +106,14 @@ def self.write( league:, season:,
|
|
106
106
|
if normalize.is_a?(Proc)
|
107
107
|
matches = normalize.call( matches, league: league,
|
108
108
|
season: season )
|
109
|
-
else
|
109
|
+
else
|
110
110
|
puts "!! ERROR - normalize; expected proc got #{normalize.inspect}"
|
111
111
|
exit 1
|
112
|
-
end
|
112
|
+
end
|
113
113
|
end
|
114
|
-
|
115
114
|
|
116
|
-
|
115
|
+
|
116
|
+
|
117
117
|
league_name = league_info[ :name ] # e.g. Brasileiro Série A
|
118
118
|
basename = league_info[ :basename] #.e.g 1-seriea
|
119
119
|
|
@@ -122,7 +122,10 @@ def self.write( league:, season:,
|
|
122
122
|
|
123
123
|
## note - repo_path moved!!!
|
124
124
|
## repo_path = league_info[ :path ] # e.g. brazil or world/europe/portugal etc.
|
125
|
-
|
125
|
+
repo = SportDb::GitHubSync::REPOS[ league ]
|
126
|
+
repo_path = "#{repo['owner']}/#{repo['name']}"
|
127
|
+
repo_path << "/#{repo['path']}" if repo['path'] ## note: do NOT forget to add optional extra path!!!
|
128
|
+
|
126
129
|
|
127
130
|
|
128
131
|
season_path = String.new ## note: allow extra path for output!!!! e.g. archive/2000s etc.
|
@@ -175,7 +178,7 @@ def self.write( league:, season:,
|
|
175
178
|
)
|
176
179
|
|
177
180
|
## note: might be empty!!! if no matches skip (do NOT write)
|
178
|
-
write_text( "#{config.out_dir}/#{repo_path}/#{season_path}/#{stage_basename}.txt",
|
181
|
+
write_text( "#{config.out_dir}/#{repo_path}/#{season_path}/#{stage_basename}.txt",
|
179
182
|
buf ) unless buf.empty?
|
180
183
|
end
|
181
184
|
else ## no stages - assume "regular" plain vanilla season
|
data/lib/sportdb/writers.rb
CHANGED
@@ -29,29 +29,67 @@ require_relative 'writers/goals'
|
|
29
29
|
require_relative 'writers/write'
|
30
30
|
|
31
31
|
|
32
|
+
## setup leagues (info) table
|
33
|
+
require_relative 'writers/league_config'
|
34
|
+
|
35
|
+
module Writer
|
36
|
+
LEAGUES = SportDb::LeagueConfig.new
|
37
|
+
|
38
|
+
['leagues_europe',
|
39
|
+
'leagues_america',
|
40
|
+
'leagues_world'
|
41
|
+
].each do |name|
|
42
|
+
recs = read_csv( "#{SportDb::Module::Writers.root}/config/#{name}.csv" )
|
43
|
+
LEAGUES.add( recs )
|
44
|
+
end
|
45
|
+
end # module Writer
|
46
|
+
|
47
|
+
|
32
48
|
|
33
49
|
########################
|
34
50
|
# push & pull github scripts
|
35
51
|
require 'gitti' ## note - requires git machinery
|
36
52
|
|
53
|
+
require_relative 'writers/github_config'
|
37
54
|
require_relative 'writers/github' ## github helpers/update machinery
|
38
55
|
|
39
56
|
|
57
|
+
module SportDb
|
58
|
+
class GitHubSync
|
59
|
+
REPOS = GitHubConfig.new
|
60
|
+
recs = read_csv( "#{SportDb::Module::Writers.root}/config/openfootball.csv" )
|
61
|
+
REPOS.add( recs )
|
40
62
|
|
41
|
-
##
|
42
|
-
|
43
|
-
|
63
|
+
## todo/check: find a better name for helper?
|
64
|
+
## note: datasets of format
|
65
|
+
##
|
66
|
+
## DATASETS = [
|
67
|
+
## ['it.1', %w[2020/21 2019/20]],
|
68
|
+
## ['it.2', %w[2019/20]],
|
69
|
+
## ['es.1', %w[2019/20]],
|
70
|
+
## ['es.2', %w[2019/20]],
|
71
|
+
## ]
|
72
|
+
|
73
|
+
def self.find_repos( datasets )
|
74
|
+
repos = []
|
75
|
+
datasets.each do |dataset|
|
76
|
+
league_key = dataset[0]
|
77
|
+
repo = REPOS[ league_key ]
|
78
|
+
## pp repo
|
79
|
+
if repo.nil?
|
80
|
+
puts "!! ERROR - no repo config/path found for league >#{league_key}<; sorry"
|
81
|
+
exit 1
|
82
|
+
end
|
83
|
+
|
84
|
+
repos << "#{repo['owner']}/#{repo['name']}"
|
85
|
+
end
|
86
|
+
|
87
|
+
pp repos
|
88
|
+
repos.uniq ## note: remove duplicates (e.g. europe or world or such)
|
44
89
|
end
|
90
|
+
end # class GitHubSync
|
91
|
+
end # module SportDb
|
45
92
|
|
46
|
-
require_relative 'leagues/leagues_at'
|
47
|
-
require_relative 'leagues/leagues_de'
|
48
|
-
require_relative 'leagues/leagues_eng'
|
49
|
-
require_relative 'leagues/leagues_es'
|
50
|
-
require_relative 'leagues/leagues_europe'
|
51
|
-
require_relative 'leagues/leagues_it'
|
52
|
-
require_relative 'leagues/leagues_mx'
|
53
|
-
require_relative 'leagues/leagues_south_america'
|
54
|
-
require_relative 'leagues/leagues_world'
|
55
93
|
|
56
94
|
|
57
95
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sportdb-writers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-09-
|
11
|
+
date: 2024-09-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sportdb-quick
|
@@ -90,18 +90,15 @@ files:
|
|
90
90
|
- Rakefile
|
91
91
|
- bin/fbgen
|
92
92
|
- bin/fbtxt
|
93
|
-
-
|
94
|
-
-
|
95
|
-
-
|
96
|
-
-
|
97
|
-
- lib/sportdb/leagues/leagues_europe.rb
|
98
|
-
- lib/sportdb/leagues/leagues_it.rb
|
99
|
-
- lib/sportdb/leagues/leagues_mx.rb
|
100
|
-
- lib/sportdb/leagues/leagues_south_america.rb
|
101
|
-
- lib/sportdb/leagues/leagues_world.rb
|
93
|
+
- config/leagues_america.csv
|
94
|
+
- config/leagues_europe.csv
|
95
|
+
- config/leagues_world.csv
|
96
|
+
- config/openfootball.csv
|
102
97
|
- lib/sportdb/writers.rb
|
103
98
|
- lib/sportdb/writers/github.rb
|
99
|
+
- lib/sportdb/writers/github_config.rb
|
104
100
|
- lib/sportdb/writers/goals.rb
|
101
|
+
- lib/sportdb/writers/league_config.rb
|
105
102
|
- lib/sportdb/writers/txt_writer.rb
|
106
103
|
- lib/sportdb/writers/version.rb
|
107
104
|
- lib/sportdb/writers/write.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
module Writer
|
2
|
-
|
3
|
-
########################
|
4
|
-
# Austria
|
5
|
-
|
6
|
-
LEAGUES.merge!(
|
7
|
-
'at.1' => { name: 'Österr. Bundesliga',
|
8
|
-
basename: '1-bundesliga',
|
9
|
-
stages: ->(season) {
|
10
|
-
if season.start_year >= 2018
|
11
|
-
[['Grunddurchgang'],
|
12
|
-
['Finaldurchgang - Meister',
|
13
|
-
'Finaldurchgang - Qualifikation',
|
14
|
-
'Europa League Play-off']]
|
15
|
-
else
|
16
|
-
nil
|
17
|
-
end
|
18
|
-
},
|
19
|
-
},
|
20
|
-
'at.2' => { name: ->(season) { season.start_year >= 2018 ?
|
21
|
-
'Österr. 2. Liga' :
|
22
|
-
'Österr. Erste Liga' },
|
23
|
-
basename: ->(season) { season.start_year >= 2018 ?
|
24
|
-
'2-liga2' :
|
25
|
-
'2-liga1' },
|
26
|
-
},
|
27
|
-
'at.3.o' => { name: 'Österr. Regionalliga Ost',
|
28
|
-
basename: '3-regionalliga-ost',
|
29
|
-
},
|
30
|
-
'at.cup' => { name: 'ÖFB Cup',
|
31
|
-
basename: 'cup',
|
32
|
-
}
|
33
|
-
)
|
34
|
-
|
35
|
-
end # module Writer
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Writer
|
2
|
-
|
3
|
-
############################
|
4
|
-
# Germany / Deutschland
|
5
|
-
|
6
|
-
LEAGUES.merge!(
|
7
|
-
'de.1' => { name: 'Deutsche Bundesliga',
|
8
|
-
basename: '1-bundesliga',
|
9
|
-
},
|
10
|
-
'de.2' => { name: 'Deutsche 2. Bundesliga',
|
11
|
-
basename: '2-bundesliga2',
|
12
|
-
},
|
13
|
-
'de.3' => { name: 'Deutsche 3. Liga',
|
14
|
-
basename: '3-liga3',
|
15
|
-
},
|
16
|
-
'de.cup' => { name: 'DFB Pokal',
|
17
|
-
basename: 'cup',
|
18
|
-
}
|
19
|
-
)
|
20
|
-
|
21
|
-
end # module Writer
|
@@ -1,58 +0,0 @@
|
|
1
|
-
module Writer
|
2
|
-
|
3
|
-
####################
|
4
|
-
# England
|
5
|
-
|
6
|
-
|
7
|
-
def self.eng1( season )
|
8
|
-
case season ## todo/fix: - use cast e.g. Season(season) - make sure it's a season obj
|
9
|
-
when Season('1888/89')..Season('1891/92') ## single league (no divisions)
|
10
|
-
{name: 'English Football League',
|
11
|
-
basename: '1-footballleague'}
|
12
|
-
when Season('1892/93')..Season('1991/92') ## start of division 1 & 2
|
13
|
-
{name: 'English Division One',
|
14
|
-
basename: '1-division1'}
|
15
|
-
else ## starts in season 1992/93
|
16
|
-
{name: 'English Premier League',
|
17
|
-
basename: '1-premierleague'}
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.eng2( season )
|
22
|
-
case season
|
23
|
-
when Season('1892/93')..Season('1991/92')
|
24
|
-
{name: 'English Division Two', ## or use English Football League Second Division ???
|
25
|
-
basename: '2-division2'}
|
26
|
-
when Season('1992/93')..Season('2003/04') ## start of premier league
|
27
|
-
{name: 'English Division One',
|
28
|
-
basename: '2-division1'}
|
29
|
-
else # starts in 2004/05
|
30
|
-
{name: 'English Championship', ## rebranding divsion 1 => championship
|
31
|
-
basename: '2-championship'}
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
LEAGUES.merge!(
|
37
|
-
'eng.1' => { name: ->(season) { eng1( season )[ :name ] },
|
38
|
-
basename: ->(season) { eng1( season )[ :basename ] },
|
39
|
-
},
|
40
|
-
'eng.2' => { name: ->(season) { eng2( season )[ :name ] },
|
41
|
-
basename: ->(season) { eng2( season )[ :basename ] },
|
42
|
-
},
|
43
|
-
'eng.3' => { name: 'English League One',
|
44
|
-
basename: '3-league1',
|
45
|
-
},
|
46
|
-
'eng.4' => { name: 'English League Two',
|
47
|
-
basename: '4-league2',
|
48
|
-
},
|
49
|
-
'eng.5' => { name: 'English National League',
|
50
|
-
basename: '5-nationalleague',
|
51
|
-
},
|
52
|
-
'eng.cup' => { name: 'English FA Cup',
|
53
|
-
basename: 'facup',
|
54
|
-
}
|
55
|
-
)
|
56
|
-
|
57
|
-
end # module Writer
|
58
|
-
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Writer
|
2
|
-
|
3
|
-
LEAGUES.merge!(
|
4
|
-
###################
|
5
|
-
# Spain / Espana
|
6
|
-
'es.1' => { name: 'Primera División de España',
|
7
|
-
basename: '1-liga',
|
8
|
-
},
|
9
|
-
'es.2' => { name: 'Segunda División de España',
|
10
|
-
basename: '2-liga2',
|
11
|
-
},
|
12
|
-
)
|
13
|
-
|
14
|
-
end # module Writer
|
15
|
-
|
@@ -1,185 +0,0 @@
|
|
1
|
-
module Writer
|
2
|
-
|
3
|
-
LEAGUES.merge!(
|
4
|
-
|
5
|
-
###
|
6
|
-
# Uefa
|
7
|
-
## quick and dirty add for champions league
|
8
|
-
'uefa.cl' => { name: 'UEFA Champions League',
|
9
|
-
basename: 'cl',
|
10
|
-
},
|
11
|
-
|
12
|
-
########################
|
13
|
-
# France
|
14
|
-
'fr.1' => { name: 'French Ligue 1',
|
15
|
-
basename: '1-ligue1',
|
16
|
-
},
|
17
|
-
'fr.2' => { name: 'French Ligue 2',
|
18
|
-
basename: '2-ligue2',
|
19
|
-
},
|
20
|
-
|
21
|
-
'hu.1' => { name: 'Hungarian NB I',
|
22
|
-
basename: '1-nbi',
|
23
|
-
},
|
24
|
-
'gr.1' => { name: 'Super League Greece',
|
25
|
-
basename: '1-superleague',
|
26
|
-
stages: ->(season) {
|
27
|
-
if season.start_year >= 2019 # new league system starting with 2015/16 season
|
28
|
-
[['Regular Season'],
|
29
|
-
['Playoffs - Championship',
|
30
|
-
'Playoffs - Relegation']]
|
31
|
-
elsif [2017,2018].include?( season.start_year ) ## 2017/18, 2018/19
|
32
|
-
nil
|
33
|
-
elsif [2013,2014,2015,2016].include?( season.start_year )
|
34
|
-
[['Regular Season'],
|
35
|
-
['Playoffs']]
|
36
|
-
elsif season.start_year == 2012
|
37
|
-
[['Regular Season'],
|
38
|
-
['Playoffs',
|
39
|
-
'Match 6th Place']]
|
40
|
-
elsif [2010,2011].include?( season.start_year )
|
41
|
-
[['Regular Season'],
|
42
|
-
['Playoffs']]
|
43
|
-
else
|
44
|
-
nil
|
45
|
-
end
|
46
|
-
},
|
47
|
-
},
|
48
|
-
|
49
|
-
'pt.1' => { name: 'Portuguese Primeira Liga',
|
50
|
-
basename: '1-primeiraliga',
|
51
|
-
},
|
52
|
-
'pt.2' => { name: 'Portuguese Segunda Liga',
|
53
|
-
basename: '2-segundaliga',
|
54
|
-
},
|
55
|
-
|
56
|
-
'ch.1' => { name: 'Swiss Super League',
|
57
|
-
basename: '1-superleague',
|
58
|
-
},
|
59
|
-
'ch.2' => { name: 'Swiss Challenge League',
|
60
|
-
basename: '2-challengeleague',
|
61
|
-
},
|
62
|
-
'tr.1' => { name: 'Turkish Süper Lig',
|
63
|
-
basename: '1-superlig',
|
64
|
-
},
|
65
|
-
'tr.2' => { name: 'Turkish 1. Lig',
|
66
|
-
basename: '2-lig1',
|
67
|
-
},
|
68
|
-
|
69
|
-
|
70
|
-
'is.1' => { name: 'Iceland Urvalsdeild',
|
71
|
-
basename: '1-urvalsdeild',
|
72
|
-
},
|
73
|
-
'sco.1' => { name: 'Scottish Premiership',
|
74
|
-
basename: '1-premiership',
|
75
|
-
stages: [['Regular Season'],
|
76
|
-
['Playoffs - Championship',
|
77
|
-
'Playoffs - Relegation' ]]
|
78
|
-
},
|
79
|
-
'ie.1' => { name: 'Irish Premier Division',
|
80
|
-
basename: '1-premierdivision',
|
81
|
-
},
|
82
|
-
|
83
|
-
'fi.1' => { name: 'Finland Veikkausliiga', ## note: make optional!!! override here (otherwise (re)use "regular" lookup "canonical" name from league!!!)
|
84
|
-
basename: '1-veikkausliiga',
|
85
|
-
stages: [['Regular Season'],
|
86
|
-
['Playoffs - Championship',
|
87
|
-
'Playoffs - Challenger',
|
88
|
-
'Europa League Finals' ]]
|
89
|
-
},
|
90
|
-
'se.1' => { name: 'Sweden Allsvenskan',
|
91
|
-
basename: '1-allsvenskan',
|
92
|
-
},
|
93
|
-
'se.2' => { name: 'Sweden Superettan',
|
94
|
-
basename: '2-superettan',
|
95
|
-
},
|
96
|
-
'no.1' => { name: 'Norwegian Eliteserien',
|
97
|
-
basename: '1-eliteserien',
|
98
|
-
},
|
99
|
-
'dk.1' => { name: 'Denmark Superligaen',
|
100
|
-
basename: '1-superligaen',
|
101
|
-
stages: [['Regular Season'],
|
102
|
-
['Playoffs - Championship',
|
103
|
-
'Playoffs - Relegation',
|
104
|
-
'Europa League Finals']]
|
105
|
-
},
|
106
|
-
|
107
|
-
'lu.1' => { name: 'Luxembourger First Division',
|
108
|
-
basename: '1-nationaldivision',
|
109
|
-
},
|
110
|
-
'be.1' => { name: 'Belgian First Division A',
|
111
|
-
basename: '1-firstdivisiona',
|
112
|
-
stages: [['Regular Season'],
|
113
|
-
['Playoffs - Championship',
|
114
|
-
'Playoffs - Europa League',
|
115
|
-
'Playoffs - Europa League - Finals']]
|
116
|
-
},
|
117
|
-
'nl.1' => { name: 'Dutch Eredivisie',
|
118
|
-
basename: '1-eredivisie',
|
119
|
-
},
|
120
|
-
'cz.1' => { name: 'Czech First League',
|
121
|
-
basename: '1-firstleague',
|
122
|
-
stages: [['Regular Season'],
|
123
|
-
['Playoffs - Championship',
|
124
|
-
'Europa League Play-off',
|
125
|
-
'Playoffs - Relegation'
|
126
|
-
]]
|
127
|
-
},
|
128
|
-
'sk.1' => { name: 'Slovakia First League',
|
129
|
-
basename: '1-superliga',
|
130
|
-
stages: [['Regular Season'],
|
131
|
-
['Playoffs - Championship',
|
132
|
-
'Playoffs - Relegation',
|
133
|
-
'Europa League Finals']]
|
134
|
-
},
|
135
|
-
'hr.1' => { name: 'Croatia 1. HNL',
|
136
|
-
basename: '1-hnl',
|
137
|
-
},
|
138
|
-
'pl.1' => { name: 'Poland Ekstraklasa',
|
139
|
-
basename: '1-ekstraklasa',
|
140
|
-
stages: [['Regular Season'],
|
141
|
-
['Playoffs - Championship',
|
142
|
-
'Playoffs - Relegation']]
|
143
|
-
},
|
144
|
-
|
145
|
-
'ro.1' => { name: 'Romanian Liga 1',
|
146
|
-
basename: '1-liga1',
|
147
|
-
stages: ->(season) {
|
148
|
-
if season.start_year >= 2015 # new league system starting with 2015/16 season
|
149
|
-
[['Regular Season'],
|
150
|
-
['Playoffs - Championship',
|
151
|
-
'Playoffs - Relegation']]
|
152
|
-
else
|
153
|
-
nil
|
154
|
-
end
|
155
|
-
},
|
156
|
-
},
|
157
|
-
|
158
|
-
'ua.1' => { name: 'Ukraine Premier League',
|
159
|
-
basename: '1-premierleague',
|
160
|
-
stages: [['Regular Season'],
|
161
|
-
['Playoffs - Championship',
|
162
|
-
'Playoffs - Relegation',
|
163
|
-
'Europa League Finals']]
|
164
|
-
},
|
165
|
-
|
166
|
-
|
167
|
-
'ru.1' => { name: 'Russian Premier League',
|
168
|
-
basename: '1-premierliga',
|
169
|
-
stages: ->(season) {
|
170
|
-
if season.start_year == 2011 # 2011/12 - new (transition) league system during season switch from calendar year to academic
|
171
|
-
[['Regular Season'],
|
172
|
-
['Playoffs - Championship',
|
173
|
-
'Playoffs - Relegation']]
|
174
|
-
else
|
175
|
-
nil
|
176
|
-
end
|
177
|
-
},
|
178
|
-
},
|
179
|
-
'ru.2' => { name: 'Russian 1. Division',
|
180
|
-
basename: '2-division1',
|
181
|
-
},
|
182
|
-
)
|
183
|
-
|
184
|
-
|
185
|
-
end # module Writer
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Writer
|
2
|
-
|
3
|
-
LEAGUES.merge!(
|
4
|
-
|
5
|
-
##############################
|
6
|
-
# Mexico
|
7
|
-
#
|
8
|
-
# - Viertelfinale
|
9
|
-
# - Halbfinale
|
10
|
-
# - Finale
|
11
|
-
|
12
|
-
'mx.1' => { name: 'Liga MX',
|
13
|
-
basename: '1-ligamx', ## note: gets "overwritten" by stages (see below)
|
14
|
-
stages: [{basename: '1-apertura', names: ['Apertura']},
|
15
|
-
{basename: '1-apertura_liguilla', names: ['Apertura - Liguilla']},
|
16
|
-
{basename: '1-clausura', names: ['Clausura']},
|
17
|
-
{basename: '1-clausura_liguilla', names: ['Clausura - Liguilla']},
|
18
|
-
],
|
19
|
-
},
|
20
|
-
)
|
21
|
-
|
22
|
-
|
23
|
-
end # module Writer
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Writer
|
2
|
-
|
3
|
-
|
4
|
-
LEAGUES.merge!(
|
5
|
-
'ar.1' => { name: 'Argentina Primera Division',
|
6
|
-
basename: '1-primeradivision',
|
7
|
-
},
|
8
|
-
|
9
|
-
############################
|
10
|
-
# Brazil
|
11
|
-
'br.1' => { name: 'Brasileiro Série A', ## league name
|
12
|
-
basename: '1-seriea',
|
13
|
-
},
|
14
|
-
)
|
15
|
-
|
16
|
-
|
17
|
-
end # module Writer
|