sportdb-config 0.4.1 → 0.5.0
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/config/leagues/fr.txt +9 -9
- data/config/leagues/gr.txt +7 -7
- data/config/leagues/sco.txt +19 -19
- data/config/world/eng.txt +162 -162
- data/lib/sportdb/config/club_reader.rb +278 -278
- data/lib/sportdb/config/clubs.rb +54 -27
- data/lib/sportdb/config/config.rb +123 -123
- data/lib/sportdb/config/league.rb +118 -118
- data/lib/sportdb/config/league_reader.rb +65 -65
- data/lib/sportdb/config/league_utils.rb +24 -24
- data/lib/sportdb/config/variants.rb +106 -91
- data/lib/sportdb/config/version.rb +2 -2
- data/test/test_club_index.rb +6 -0
- data/test/test_club_reader.rb +150 -150
- data/test/test_clubs.rb +14 -1
- data/test/test_league_reader.rb +54 -54
- data/test/test_league_utils.rb +46 -46
- data/test/test_season_utils.rb +29 -29
- metadata +6 -12
@@ -1,65 +1,65 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
|
4
|
-
module SportDb
|
5
|
-
module Import
|
6
|
-
|
7
|
-
class LeagueReader
|
8
|
-
|
9
|
-
def self.read( path )
|
10
|
-
txt = File.open( path, 'r:utf-8' ).read
|
11
|
-
parse( txt )
|
12
|
-
end
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
SEASON_REGEX = /\[
|
17
|
-
(?<season>
|
18
|
-
\d{4}
|
19
|
-
(-\d{2,4})?
|
20
|
-
)
|
21
|
-
\]/x
|
22
|
-
|
23
|
-
def self.parse( txt )
|
24
|
-
hash = {}
|
25
|
-
season = '*' ## use '*' for default/latest season
|
26
|
-
|
27
|
-
txt.each_line do |line|
|
28
|
-
line = line.strip
|
29
|
-
|
30
|
-
next if line.empty?
|
31
|
-
next if line.start_with?( '#' ) ## skip comments too
|
32
|
-
|
33
|
-
## strip inline comments too
|
34
|
-
line = line.sub( /#.*/, '' ).strip
|
35
|
-
|
36
|
-
pp line
|
37
|
-
|
38
|
-
|
39
|
-
if (m=line.match( SEASON_REGEX ))
|
40
|
-
season = m[:season]
|
41
|
-
else
|
42
|
-
key_line, values_line = line.split( '=>' )
|
43
|
-
values = values_line.split( ',' )
|
44
|
-
|
45
|
-
## remove leading and trailing spaces
|
46
|
-
key_line = key_line.strip
|
47
|
-
values = values.map { |value| value.strip }
|
48
|
-
pp values
|
49
|
-
|
50
|
-
league_key = key_line
|
51
|
-
league_basename = values[0]
|
52
|
-
|
53
|
-
hash[season] ||= {}
|
54
|
-
hash[season][league_key] = league_basename
|
55
|
-
end
|
56
|
-
end
|
57
|
-
hash
|
58
|
-
end # method read
|
59
|
-
|
60
|
-
end ## class LeagueReader
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end ## module Import
|
65
|
-
end ## module SportDb
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module SportDb
|
5
|
+
module Import
|
6
|
+
|
7
|
+
class LeagueReader
|
8
|
+
|
9
|
+
def self.read( path )
|
10
|
+
txt = File.open( path, 'r:utf-8' ).read
|
11
|
+
parse( txt )
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
SEASON_REGEX = /\[
|
17
|
+
(?<season>
|
18
|
+
\d{4}
|
19
|
+
(-\d{2,4})?
|
20
|
+
)
|
21
|
+
\]/x
|
22
|
+
|
23
|
+
def self.parse( txt )
|
24
|
+
hash = {}
|
25
|
+
season = '*' ## use '*' for default/latest season
|
26
|
+
|
27
|
+
txt.each_line do |line|
|
28
|
+
line = line.strip
|
29
|
+
|
30
|
+
next if line.empty?
|
31
|
+
next if line.start_with?( '#' ) ## skip comments too
|
32
|
+
|
33
|
+
## strip inline comments too
|
34
|
+
line = line.sub( /#.*/, '' ).strip
|
35
|
+
|
36
|
+
pp line
|
37
|
+
|
38
|
+
|
39
|
+
if (m=line.match( SEASON_REGEX ))
|
40
|
+
season = m[:season]
|
41
|
+
else
|
42
|
+
key_line, values_line = line.split( '=>' )
|
43
|
+
values = values_line.split( ',' )
|
44
|
+
|
45
|
+
## remove leading and trailing spaces
|
46
|
+
key_line = key_line.strip
|
47
|
+
values = values.map { |value| value.strip }
|
48
|
+
pp values
|
49
|
+
|
50
|
+
league_key = key_line
|
51
|
+
league_basename = values[0]
|
52
|
+
|
53
|
+
hash[season] ||= {}
|
54
|
+
hash[season][league_key] = league_basename
|
55
|
+
end
|
56
|
+
end
|
57
|
+
hash
|
58
|
+
end # method read
|
59
|
+
|
60
|
+
end ## class LeagueReader
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
end ## module Import
|
65
|
+
end ## module SportDb
|
@@ -1,24 +1,24 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
|
4
|
-
module LeagueHelper
|
5
|
-
def basename( league, country:, season: nil )
|
6
|
-
## e.g. eng-england, 2011-12, 1 returns 1-premierleague
|
7
|
-
##
|
8
|
-
## allow country code or (repo) package name
|
9
|
-
## e.g. eng-england or eng
|
10
|
-
## de-deutschland or de etc.
|
11
|
-
|
12
|
-
leagues = SportDb::Import.config.leagues
|
13
|
-
|
14
|
-
result = leagues.basename( league, country: country, season: season )
|
15
|
-
|
16
|
-
##
|
17
|
-
# note: if no mapping / nothing found return league e.g. 1, 2, 3, 3a, 3b, cup(?), etc.
|
18
|
-
result ? result : league
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
module LeagueUtils
|
23
|
-
extend LeagueHelper
|
24
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module LeagueHelper
|
5
|
+
def basename( league, country:, season: nil )
|
6
|
+
## e.g. eng-england, 2011-12, 1 returns 1-premierleague
|
7
|
+
##
|
8
|
+
## allow country code or (repo) package name
|
9
|
+
## e.g. eng-england or eng
|
10
|
+
## de-deutschland or de etc.
|
11
|
+
|
12
|
+
leagues = SportDb::Import.config.leagues
|
13
|
+
|
14
|
+
result = leagues.basename( league, country: country, season: season )
|
15
|
+
|
16
|
+
##
|
17
|
+
# note: if no mapping / nothing found return league e.g. 1, 2, 3, 3a, 3b, cup(?), etc.
|
18
|
+
result ? result : league
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module LeagueUtils
|
23
|
+
extend LeagueHelper
|
24
|
+
end
|
@@ -1,91 +1,106 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module SportDb
|
4
|
-
module Import
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
class Variant ## (spelling) variant finder / builder for names
|
9
|
-
|
10
|
-
|
11
|
-
def self.frequency_table( name ) ## todo/check: use/rename to char_frequency_table
|
12
|
-
## calculate the frequency table of letters, digits, etc.
|
13
|
-
freq = Hash.new(0)
|
14
|
-
name.each_char do |ch|
|
15
|
-
freq[ch] += 1
|
16
|
-
end
|
17
|
-
freq
|
18
|
-
end
|
19
|
-
|
20
|
-
|
21
|
-
## "simple" translation
|
22
|
-
ALPHA_SPECIALS = {
|
23
|
-
'Ä'=>'A', 'ä'=>'a',
|
24
|
-
'á'=>'a',
|
25
|
-
'à'=>'a',
|
26
|
-
|
27
|
-
'
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
'
|
32
|
-
'
|
33
|
-
'
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
'
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module SportDb
|
4
|
+
module Import
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
class Variant ## (spelling) variant finder / builder for names
|
9
|
+
|
10
|
+
|
11
|
+
def self.frequency_table( name ) ## todo/check: use/rename to char_frequency_table
|
12
|
+
## calculate the frequency table of letters, digits, etc.
|
13
|
+
freq = Hash.new(0)
|
14
|
+
name.each_char do |ch|
|
15
|
+
freq[ch] += 1
|
16
|
+
end
|
17
|
+
freq
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
## "simple" translation
|
22
|
+
ALPHA_SPECIALS = {
|
23
|
+
'Ä'=>'A', 'ä'=>'a',
|
24
|
+
'á'=>'a',
|
25
|
+
'à'=>'a',
|
26
|
+
'ã'=>'a',
|
27
|
+
'â'=>'a',
|
28
|
+
|
29
|
+
'ç'=>'c',
|
30
|
+
|
31
|
+
'É'=>'E', 'é'=>'e',
|
32
|
+
'è'=>'e',
|
33
|
+
'ê'=>'e',
|
34
|
+
|
35
|
+
'í'=>'i',
|
36
|
+
'î'=>'i',
|
37
|
+
|
38
|
+
'ñ'=>'n',
|
39
|
+
|
40
|
+
'Ö'=>'O', 'ö'=>'o',
|
41
|
+
'ó'=>'o',
|
42
|
+
'õ'=>'o',
|
43
|
+
'ô'=>'o',
|
44
|
+
|
45
|
+
'Ü'=>'U', 'ü'=>'u',
|
46
|
+
'ú'=>'u',
|
47
|
+
|
48
|
+
'ß'=>'ss',
|
49
|
+
}
|
50
|
+
|
51
|
+
## de,at,ch translation for umlauts
|
52
|
+
ALPHA_SPECIALS_DE = {
|
53
|
+
'Ä'=>'Ae', 'ä'=>'ae',
|
54
|
+
'Ö'=>'Oe', 'ö'=>'oe',
|
55
|
+
'Ü'=>'Ue', 'ü'=>'ue',
|
56
|
+
'ß'=>'ss',
|
57
|
+
}
|
58
|
+
|
59
|
+
## add ALPHA_SPECIALS_ES - why? why not? is Espanyol catalan spelling or spanish (castillian)?
|
60
|
+
# 'ñ'=>'ny', ## e.g. Español => Espanyol
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
def self.alpha_specials_count( freq, mapping )
|
65
|
+
mapping.keys.reduce(0) do |count,ch|
|
66
|
+
count += freq[ch]
|
67
|
+
count
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.tr( name, mapping )
|
72
|
+
buf = String.new
|
73
|
+
name.each_char do |ch|
|
74
|
+
buf << if mapping[ch]
|
75
|
+
mapping[ch]
|
76
|
+
else
|
77
|
+
ch
|
78
|
+
end
|
79
|
+
end
|
80
|
+
buf
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
def self.find( name )
|
86
|
+
alt_names = []
|
87
|
+
|
88
|
+
freq = frequency_table( name )
|
89
|
+
|
90
|
+
if alpha_specials_count( freq, ALPHA_SPECIALS ) > 0 # check if includes äöü etc.
|
91
|
+
alt_names << tr( name, ALPHA_SPECIALS )
|
92
|
+
end
|
93
|
+
|
94
|
+
if alpha_specials_count( freq, ALPHA_SPECIALS_DE ) > 0 ## todo/fix: add / pass-in language/country code and check - why? why not?
|
95
|
+
alt_names << tr( name, ALPHA_SPECIALS_DE )
|
96
|
+
end
|
97
|
+
|
98
|
+
## todo - make uniq e.g. Preußen is Preussen, Preussen 2x
|
99
|
+
alt_names = alt_names.uniq
|
100
|
+
alt_names
|
101
|
+
end
|
102
|
+
end # Variant
|
103
|
+
|
104
|
+
|
105
|
+
end ## module Import
|
106
|
+
end ## module SportDb
|
@@ -7,8 +7,8 @@ module Boot ## note: use a different module than Config to avoid confusion
|
|
7
7
|
## maybe rename later gem itself to sportdb-boot - why? why not?
|
8
8
|
|
9
9
|
MAJOR = 0 ## todo: namespace inside version or something - why? why not??
|
10
|
-
MINOR =
|
11
|
-
PATCH =
|
10
|
+
MINOR = 5
|
11
|
+
PATCH = 0
|
12
12
|
VERSION = [MAJOR,MINOR,PATCH].join('.')
|
13
13
|
|
14
14
|
def self.version
|
data/test/test_club_index.rb
CHANGED
@@ -30,6 +30,12 @@ class TestClubIndex < MiniTest::Test
|
|
30
30
|
assert_equal 'Austria', m[0].country.name
|
31
31
|
assert_equal 'Wien', m[0].city
|
32
32
|
|
33
|
+
## note: all spaces and dashes (-) get always removed
|
34
|
+
m = SportDb::Import.config.clubs.match( '--- r a p i d w i e n ---' )
|
35
|
+
assert_equal 'SK Rapid Wien', m[0].name
|
36
|
+
assert_equal 'Austria', m[0].country.name
|
37
|
+
assert_equal 'Wien', m[0].city
|
38
|
+
|
33
39
|
m = SportDb::Import.config.clubs.match( 'RAPID WIEN' )
|
34
40
|
assert_equal 'SK Rapid Wien', m[0].name
|
35
41
|
assert_equal 'Austria', m[0].country.name
|