sportdb-writers 0.1.1 → 0.1.2
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.
- 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
|