sportdb-config 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|