sportdb-config 0.3.6 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 04f6537ca02571da4f1e429f3d4d2454097fda8c
4
- data.tar.gz: b6135751ae7890b58dce9b5b367ac5a5a943ddc3
3
+ metadata.gz: 064b7f927038794c7d1efecde27bbba3d7ac78fa
4
+ data.tar.gz: 0dc83a80b70db77bca25e9921182fc4a1aea0466
5
5
  SHA512:
6
- metadata.gz: e896c77e205beaa15ba43190d03f3b2da044ce2686d471b87afd5a21bf7f8b9feef354e46ddde9738f1f288be3734fd35df9087cf2f6102f4b0ff9bdfe0eeab3
7
- data.tar.gz: 15ebeac9008cce8f1dcffc27d7ef765075151cbd29ff61dc88901dd120f5ebeb6427324bf73f503a9831b7d32fef4cf58d4f954db3add33d9f2212b7fa67c17d
6
+ metadata.gz: 75d1416b8976f6bd619de196265a7ba1ac3f88c020b28489a4302732272f0e1b686f76a2dcf877e40364e240d148bf0853ba643466ff86d454060e45c9dd4da3
7
+ data.tar.gz: 1fdc13cde4020f2bc2a21da04b7df6ce25810f4f282a477862adf2af789b17d6fa009e08163fc163579478aed0ca9210588aafb09f728d2472a9711bdec90c1a
data/Manifest.txt CHANGED
@@ -17,8 +17,10 @@ lib/sportdb/config/league.rb
17
17
  lib/sportdb/config/league_reader.rb
18
18
  lib/sportdb/config/league_utils.rb
19
19
  lib/sportdb/config/season_utils.rb
20
+ lib/sportdb/config/variants.rb
20
21
  lib/sportdb/config/version.rb
21
22
  test/helper.rb
23
+ test/test_club_index.rb
22
24
  test/test_club_reader.rb
23
25
  test/test_clubs.rb
24
26
  test/test_config.rb
@@ -26,3 +28,4 @@ test/test_countries.rb
26
28
  test/test_league_reader.rb
27
29
  test/test_league_utils.rb
28
30
  test/test_season_utils.rb
31
+ test/test_variants.rb
@@ -112,16 +112,18 @@ def self.parse( txt )
112
112
  # e.g. New York FC (2011-) => New York FC (2011-)
113
113
  values = values.map { |value| value.strip.gsub( /[ \t]+/, ' ' ) }
114
114
  last_rec.alt_names += values
115
+ last_rec.add_variants( values ) # auto-add (possible) auto-generated variant names
115
116
 
116
- ## check for duplicates - simple check for now - fix/improve
117
- ## todo/fix: (auto)remove duplicates - why? why not?
118
- ## todo/fix: add canonical name too!! might get duplicated in alt names!!!
119
- count = last_rec.alt_names.size
120
- count_uniq = last_rec.alt_names.uniq.size
121
- if count != count_uniq
122
- puts
123
- puts "*** !!! WARN !!! - #{count-count_uniq} duplicate alt name(s):"
117
+ ## check for duplicates
118
+ if last_rec.duplicates?
119
+ duplicates = last_rec.duplicates
120
+ puts "*** !!! WARN !!! - #{duplicates.size} duplicate alt name mapping(s):"
121
+ pp duplicates
124
122
  pp last_rec
123
+ ##
124
+ ## todo/fix: make it only an error with exit 1
125
+ ## if (not normalized) names are the same (not unique/uniq)
126
+ ## e.g. don't exit on A.F.C. == AFC etc.
125
127
  ## exit 1
126
128
  end
127
129
  else
@@ -132,7 +134,8 @@ def self.parse( txt )
132
134
  ## strip and squish (white)spaces
133
135
  # e.g. New York FC (2011-) => New York FC (2011-)
134
136
  value = value.strip.gsub( /[ \t]+/, ' ' )
135
- rec.name = value # canoncial_name
137
+ rec.name = value # canoncial name (global unique "beautiful/long" name)
138
+ rec.add_variants( value ) # auto-add (possible) auto-generated variant names
136
139
 
137
140
  ## note:
138
141
  ## check/todo!!!!!!!!!!!!!!!!!-
@@ -150,7 +153,6 @@ def self.parse( txt )
150
153
  ## e.g. New York FC (2011) => New York FC
151
154
  if rec.name =~ /\(.+?\)/ ## note: use non-greedy (?) match
152
155
  name = rec.name.gsub( /\(.+?\)/, '' ).strip
153
- rec.alt_names << name
154
156
 
155
157
  if rec.name =~ /\(([0-9]{4})-\)/ ## e.g. (2014-)
156
158
  rec.year = $1.to_i
@@ -9,21 +9,79 @@ module SportDb
9
9
  # the Team struct in sportdb-text (in SportDb::Struct::Team) !!!!
10
10
  class Club
11
11
  ## todo: use just names for alt_names - why? why not?
12
- attr_accessor :name, :alt_names, :year, :ground, :city
12
+ attr_accessor :name, :alt_names,
13
+ :year, :ground, :city
13
14
 
14
15
  ## more attribs - todo/fix - also add "upstream" to struct & model!!!!!
15
16
  attr_accessor :district, :geos, :year_end, :country
16
17
 
18
+ ## special import only attribs
19
+ attr_accessor :alt_names_auto ## auto-generated alt names
20
+
17
21
  def historic?() @year_end ? true : false; end
18
22
  alias_method :past?, :historic?
19
23
 
20
24
  def initialize
21
- @alt_names = []
25
+ @alt_names = []
26
+ @alt_names_auto = []
27
+ end
28
+
29
+
30
+ ## helper methods for import only
31
+ ## check for duplicates
32
+ def duplicates?
33
+ names = [name] + alt_names + alt_names_auto
34
+ names = names.map { |name| normalize( name ) }
35
+
36
+ names.size != names.uniq.size
37
+ end
38
+
39
+ def duplicates
40
+ names = [name] + alt_names + alt_names_auto
41
+
42
+ ## calculate (count) frequency and select if greater than one
43
+ names.reduce( Hash.new ) do |h,name|
44
+ norm = normalize( name )
45
+ h[norm] ||= []
46
+ h[norm] << name; h
47
+ end.select { |norm,names| names.size > 1 }
48
+ end
49
+
50
+ def add_variants( name_or_names )
51
+ names = name_or_names.is_a?(Array) ? name_or_names : [name_or_names]
52
+ names.each do |name|
53
+ name = sanitize( name )
54
+ self.alt_names_auto += variants( name )
55
+ end
22
56
  end
57
+
58
+ private
59
+ def sanitize( name )
60
+ ## check for year(s) e.g. (1887-1911), (-2013) etc.
61
+ name = name.gsub( /\([0-9\- ]+?\)/, '' ).strip
62
+ ## check lang codes e.g. [en], [fr], etc.
63
+ name = name.gsub( /\[[a-z]{2}\]/, '' ).strip
64
+ name
65
+ end
66
+
67
+ def normalize( name )
68
+ name = sanitize( name)
69
+
70
+ name = name.gsub( '.', '' ) # remove all dots
71
+ ## don't report duplicates that only differ with dash (-)
72
+ ## e.g. Al Ahly or Al-Ahly for now - why? why not?
73
+ name = name.gsub( '-', ' ' ) # replace - with space (e.g. - same as space)
74
+
75
+ name = name.downcase ## do NOT care about upper and lowercase for now
76
+ name
77
+ end
78
+
79
+ def variants( name ) Variant.find( name ); end
23
80
  end # class Club
24
81
 
25
82
 
26
83
 
84
+
27
85
  class ClubIndex
28
86
 
29
87
  def initialize
@@ -53,28 +111,60 @@ class ClubIndex
53
111
  @clubs[ rec.name ] = rec
54
112
  end
55
113
 
56
- ## step 2) add all names (canonical name + alt names)
114
+ ## step 2) add all names (canonical name + alt names + alt names (auto))
57
115
  names = [rec.name] + rec.alt_names
116
+ more_names = []
117
+ ## check "hand-typed" names for year (auto-add)
118
+ ## check for year(s) e.g. (1887-1911), (-2013) etc.
119
+ names.each do |name|
120
+ if name =~ /\([0-9\- ]+?\)/
121
+ more_names << name.gsub( /\([0-9\- ]+?\)/, '' ).strip
122
+ end
123
+ end
58
124
 
125
+ names += more_names
59
126
  ## check for duplicates - simple check for now - fix/improve
60
127
  ## todo/fix: (auto)remove duplicates - why? why not?
61
128
  count = names.size
62
129
  count_uniq = names.uniq.size
63
130
  if count != count_uniq
64
131
  puts "** !!! ERROR !!! - #{count-count_uniq} duplicate name(s):"
132
+ pp names
65
133
  pp rec
66
134
  exit 1
67
135
  end
68
136
 
137
+ ## check with auto-names just warn for now and do not exit
138
+ names += rec.alt_names_auto
139
+ count = names.size
140
+ count_uniq = names.uniq.size
141
+ if count != count_uniq
142
+ puts "** !!! WARN !!! - #{count-count_uniq} duplicate name(s):"
143
+ pp names
144
+ pp rec
145
+ end
146
+
147
+
69
148
  names.each_with_index do |name,i|
70
- alt_recs = @clubs_by_name[ name ]
149
+ ## check lang codes e.g. [en], [fr], etc.
150
+ name = name.gsub( /\[[a-z]{2}\]/, '' ).strip
151
+ norm = normalize( name )
152
+ alt_recs = @clubs_by_name[ norm ]
71
153
  if alt_recs
72
- msg = "** !!! WARN !!! - name conflict/duplicate - >#{name}< will overwrite >#{alt_recs[0].name}, #{alt_recs[0].country.name}< with >#{rec.name}, #{rec.country.name}<"
73
- puts msg
74
- @errors << msg
75
- alt_recs << rec
154
+ ## check if include club rec already or is new club rec
155
+ if alt_recs.include?( rec )
156
+ ## note: do NOT include duplicate club record
157
+ msg = "** !!! WARN !!! - (norm) name conflict/duplicate for club - >#{name}< normalized to >#{norm}< already included >#{rec.name}, #{rec.country.name}<"
158
+ puts msg
159
+ @errors << msg
160
+ else
161
+ msg = "** !!! WARN !!! - name conflict/duplicate - >#{name}< will overwrite >#{alt_recs[0].name}, #{alt_recs[0].country.name}< with >#{rec.name}, #{rec.country.name}<"
162
+ puts msg
163
+ @errors << msg
164
+ alt_recs << rec
165
+ end
76
166
  else
77
- @clubs_by_name[ name ] = [rec]
167
+ @clubs_by_name[ norm ] = [rec]
78
168
  end
79
169
  end
80
170
  end
@@ -87,6 +177,7 @@ class ClubIndex
87
177
 
88
178
  def match( name )
89
179
  ## todo/check: return empty array if no match!!! and NOT nil (add || []) - why? why not?
180
+ name = normalize( name )
90
181
  @clubs_by_name[ name ]
91
182
  end
92
183
 
@@ -111,14 +202,34 @@ class ClubIndex
111
202
 
112
203
 
113
204
  def dump_duplicates # debug helper - report duplicate club name records
205
+ @clubs.values.each do |club|
206
+ if club.duplicates?
207
+ duplicates = club.duplicates
208
+ puts "#{duplicates.size} (norm) name duplicate(s) for #{club.name}, #{club.country.name}:"
209
+ pp duplicates
210
+ end
211
+ end
212
+
114
213
  @clubs_by_name.each do |name, clubs|
115
214
  if clubs.size > 1
116
- puts "#{clubs.size} duplicates for >#{name}<:"
215
+ puts "#{clubs.size} matching club duplicates for >#{name}<:"
117
216
  pp clubs
118
217
  end
119
218
  end
120
219
  end
121
220
 
221
+
222
+
223
+ private
224
+ def normalize( name )
225
+ name = name.gsub( '.', '' ) # remove all dots
226
+ ## don't report duplicates that only differ with dash (-)
227
+ ## e.g. Al Ahly or Al-Ahly for now - why? why not?
228
+ name = name.gsub( '-', ' ' ) # replace - with space (e.g. - same as space)
229
+
230
+ name = name.downcase ## do NOT care about upper and lowercase for now
231
+ name
232
+ end
122
233
  end # class ClubIndex
123
234
 
124
235
 
@@ -6,12 +6,6 @@ module SportDb
6
6
 
7
7
  class Configuration
8
8
 
9
- ####
10
- # todo/fix: find a better way to configure shared test datasets
11
- attr_accessor :test_data_dir ## todo/check: use test_dir - why? why not?
12
- def test_data_dir() @test_data_dir ||= './datasets'; end
13
-
14
-
15
9
  ##
16
10
  ## todo: allow configure of countries_dir like clubs_dir
17
11
  ## "fallback" and use a default built-in world/countries.txt
@@ -0,0 +1,81 @@
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
+ ALPHA_SPECIALS = %w[
21
+ Ä Ö Ü
22
+ ä ö ü ß
23
+ ]
24
+
25
+ ## "simple" translation
26
+ SUB_ALPHA_SPECIALS = {
27
+ 'Ä'=>'A', 'ä'=>'a',
28
+ 'Ö'=>'O', 'ö'=>'o',
29
+ 'Ü'=>'U', 'ü'=>'u',
30
+ 'ß'=>'ss',
31
+ }
32
+
33
+ ## de,at,ch translation for umlauts
34
+ SUB_ALPHA_SPECIALS_DE = {
35
+ 'Ä'=>'Ae', 'ä'=>'ae',
36
+ 'Ö'=>'Oe', 'ö'=>'oe',
37
+ 'Ü'=>'Ue', 'ü'=>'ue',
38
+ 'ß'=>'ss',
39
+ }
40
+
41
+
42
+ def self.alpha_specials_count( freq )
43
+ ALPHA_SPECIALS.reduce(0) do |count,ch|
44
+ count += freq[ch]
45
+ count
46
+ end
47
+ end
48
+
49
+ def self.tr( name, mapping )
50
+ buf = String.new
51
+ name.each_char do |ch|
52
+ buf << if mapping[ch]
53
+ mapping[ch]
54
+ else
55
+ ch
56
+ end
57
+ end
58
+ buf
59
+ end
60
+
61
+
62
+
63
+ def self.find( name )
64
+ alt_names = []
65
+
66
+ freq = frequency_table( name )
67
+
68
+ if alpha_specials_count( freq ) > 0 # check if includes äöü etc.
69
+ alt_names << tr( name, SUB_ALPHA_SPECIALS )
70
+ alt_names << tr( name, SUB_ALPHA_SPECIALS_DE )
71
+ end
72
+
73
+ ## todo - make uniq e.g. Preußen is Preussen, Preussen 2x
74
+ alt_names = alt_names.uniq
75
+ alt_names
76
+ end
77
+ end # Variant
78
+
79
+
80
+ end ## module Import
81
+ 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 = 3
11
- PATCH = 6
10
+ MINOR = 4
11
+ PATCH = 0
12
12
  VERSION = [MAJOR,MINOR,PATCH].join('.')
13
13
 
14
14
  def self.version
@@ -22,6 +22,7 @@ require 'sportdb/config/league_utils'
22
22
  require 'sportdb/config/league'
23
23
  require 'sportdb/config/league_reader'
24
24
 
25
+ require 'sportdb/config/variants'
25
26
  require 'sportdb/config/countries'
26
27
  require 'sportdb/config/clubs'
27
28
  require 'sportdb/config/club_reader'
@@ -29,4 +30,20 @@ require 'sportdb/config/config'
29
30
 
30
31
 
31
32
 
33
+
34
+ ## let's put test configuration in its own namespace / module
35
+ module SportDb
36
+
37
+ class Test ## todo/check: works with module too? use a module - why? why not?
38
+
39
+ ####
40
+ # todo/fix: find a better way to configure shared test datasets - why? why not?
41
+ def self.data_dir() @data_dir ||= './datasets'; end
42
+ def self.data_dir=( path ) @data_dir = path; end
43
+ end
44
+
45
+ end # module SportDb
46
+
47
+
48
+
32
49
  puts SportDb::Boot.banner # say hello
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_club_index.rb
6
+
7
+
8
+ require 'helper'
9
+
10
+ class TestClubIndex < MiniTest::Test
11
+
12
+ def test_clubs
13
+ pp SportDb::Import.config.clubs.errors
14
+
15
+ SportDb::Import.config.clubs.dump_duplicates
16
+
17
+ m = SportDb::Import.config.clubs.match( 'Rapid Wien' )
18
+ assert_equal 'SK Rapid Wien', m[0].name
19
+ assert_equal 'Austria', m[0].country.name
20
+ assert_equal 'Wien', m[0].city
21
+
22
+ m = SportDb::Import.config.clubs.match( 'rapid wien' )
23
+ assert_equal 'SK Rapid Wien', m[0].name
24
+ assert_equal 'Austria', m[0].country.name
25
+ assert_equal 'Wien', m[0].city
26
+
27
+ ## note: all dots (.) get always removed
28
+ m = SportDb::Import.config.clubs.match( '...r.a.p.i.d w.i.e.n...' )
29
+ assert_equal 'SK Rapid Wien', m[0].name
30
+ assert_equal 'Austria', m[0].country.name
31
+ assert_equal 'Wien', m[0].city
32
+
33
+ m = SportDb::Import.config.clubs.match( 'RAPID WIEN' )
34
+ assert_equal 'SK Rapid Wien', m[0].name
35
+ assert_equal 'Austria', m[0].country.name
36
+ assert_equal 'Wien', m[0].city
37
+
38
+
39
+ c = SportDb::Import.config.clubs[ 'SK Rapid Wien' ] ## check canoncial name match (only)
40
+ assert_equal 'SK Rapid Wien', c.name
41
+ assert_equal 'Austria', c.country.name
42
+ assert_equal 'Wien', c.city
43
+
44
+
45
+ m = SportDb::Import.config.clubs.match( 'Arsenal' )
46
+ assert_equal 3, m.size
47
+
48
+ m = SportDb::Import.config.clubs.match( 'ARSENAL' )
49
+ assert_equal 3, m.size
50
+
51
+ m = SportDb::Import.config.clubs.match_by( name: 'Arsenal', country: 'eng' )
52
+ assert_equal 1, m.size
53
+ assert_equal 'Arsenal FC', m[0].name
54
+ assert_equal 'England', m[0].country.name
55
+ assert_equal 'London', m[0].city
56
+
57
+ m = SportDb::Import.config.clubs.match_by( name: 'Arsenal', country: 'ar' )
58
+ assert_equal 1, m.size
59
+ assert_equal 'Arsenal de Sarandí', m[0].name
60
+ assert_equal 'Argentina', m[0].country.name
61
+ assert_equal 'Sarandí', m[0].city
62
+
63
+ m = SportDb::Import.config.clubs.match_by( name: 'Arsenal', country: 'ru' )
64
+ assert_equal 1, m.size
65
+ assert_equal 'Arsenal Tula', m[0].name
66
+ assert_equal 'Russia', m[0].country.name
67
+ assert_equal 'Tula', m[0].city
68
+
69
+
70
+ m = SportDb::Import.config.clubs.match( 'Arsenal FC' )
71
+ assert_equal 2, m.size
72
+
73
+ m = SportDb::Import.config.clubs.match( 'Arsenal F.C.' )
74
+ assert_equal 2, m.size
75
+
76
+ m = SportDb::Import.config.clubs.match( '...A.r.s.e.n.a.l... F.C...' )
77
+ assert_equal 2, m.size
78
+ end
79
+
80
+ end # class TestClubIndex
data/test/test_clubs.rb CHANGED
@@ -9,42 +9,22 @@ require 'helper'
9
9
 
10
10
  class TestClubs < MiniTest::Test
11
11
 
12
- def test_clubs
13
- pp SportDb::Import.config.clubs.errors
14
-
15
- SportDb::Import.config.clubs.dump_duplicates
16
-
17
- m = SportDb::Import.config.clubs.match( 'Rapid Wien' )
18
- assert_equal 'SK Rapid Wien', m[0].name
19
- assert_equal 'Austria', m[0].country.name
20
- assert_equal 'Wien', m[0].city
21
-
22
- c = SportDb::Import.config.clubs[ 'SK Rapid Wien' ] ## check canoncial name match (only)
23
- assert_equal 'SK Rapid Wien', c.name
24
- assert_equal 'Austria', c.country.name
25
- assert_equal 'Wien', c.city
26
-
27
-
28
- m = SportDb::Import.config.clubs.match( 'Arsenal' )
29
- assert_equal 3, m.size
30
-
31
- m = SportDb::Import.config.clubs.match_by( name: 'Arsenal', country: 'eng' )
32
- assert_equal 1, m.size
33
- assert_equal 'Arsenal FC', m[0].name
34
- assert_equal 'England', m[0].country.name
35
- assert_equal 'London', m[0].city
36
-
37
- m = SportDb::Import.config.clubs.match_by( name: 'Arsenal', country: 'ar' )
38
- assert_equal 1, m.size
39
- assert_equal 'Arsenal de Sarandí', m[0].name
40
- assert_equal 'Argentina', m[0].country.name
41
- assert_equal 'Sarandí', m[0].city
42
-
43
- m = SportDb::Import.config.clubs.match_by( name: 'Arsenal', country: 'ru' )
44
- assert_equal 1, m.size
45
- assert_equal 'Arsenal Tula', m[0].name
46
- assert_equal 'Russia', m[0].country.name
47
- assert_equal 'Tula', m[0].city
12
+ def test_duplicats
13
+ club = SportDb::Import::Club.new
14
+ club.name = "Rapid Wien"
15
+
16
+ assert_equal false, club.duplicates?
17
+ duplicates = {}
18
+ assert_equal duplicates, club.duplicates
19
+
20
+ club.alt_names_auto += ['Rapid', 'Rapid Wien', 'SK Rapid Wien']
21
+
22
+ pp club
23
+
24
+ assert_equal true, club.duplicates?
25
+ duplicates = {'rapid wien'=>['Rapid Wien','Rapid Wien']}
26
+ pp club.duplicates
27
+ assert_equal duplicates, club.duplicates
48
28
  end
49
29
 
50
30
  end # class TestClubs
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_variants.rb
6
+
7
+
8
+ require 'helper'
9
+
10
+ class TestVariants < MiniTest::Test
11
+
12
+ def variants( name ) SportDb::Import::Variant.find( name ); end
13
+
14
+
15
+ def test_de
16
+ assert_equal [], variants( 'Augsburg' )
17
+
18
+ assert_equal ['Koln', 'Koeln'], variants( 'Köln' )
19
+ assert_equal ['1. FC Koln', '1. FC Koeln'], variants( '1. FC Köln' )
20
+
21
+ assert_equal ['Bayern Munchen', 'Bayern Muenchen'], variants( 'Bayern München' )
22
+ assert_equal ['F. Dusseldorf', 'F. Duesseldorf'], variants( 'F. Düsseldorf' )
23
+ assert_equal ['Preussen'], variants( 'Preußen' )
24
+ assert_equal ['Munster Preussen', 'Muenster Preussen'], variants( 'Münster Preußen' )
25
+ assert_equal ['Rot-Weiss Oberhausen'], variants( 'Rot-Weiß Oberhausen' )
26
+
27
+ assert_equal ['St. Polten', 'St. Poelten'], variants( 'St. Pölten' )
28
+ end
29
+
30
+
31
+ end # class TestVariants
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportdb-config
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-28 00:00:00.000000000 Z
11
+ date: 2019-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: csvreader
@@ -86,8 +86,10 @@ files:
86
86
  - lib/sportdb/config/league_reader.rb
87
87
  - lib/sportdb/config/league_utils.rb
88
88
  - lib/sportdb/config/season_utils.rb
89
+ - lib/sportdb/config/variants.rb
89
90
  - lib/sportdb/config/version.rb
90
91
  - test/helper.rb
92
+ - test/test_club_index.rb
91
93
  - test/test_club_reader.rb
92
94
  - test/test_clubs.rb
93
95
  - test/test_config.rb
@@ -95,6 +97,7 @@ files:
95
97
  - test/test_league_reader.rb
96
98
  - test/test_league_utils.rb
97
99
  - test/test_season_utils.rb
100
+ - test/test_variants.rb
98
101
  homepage: https://github.com/sportdb/sport.db
99
102
  licenses:
100
103
  - Public Domain