sportdb-catalogs 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0e5965c765923646871f9c4b5544ea651c476614
4
+ data.tar.gz: 6387ea829d97c82a6aafada09f3caf7fa193a530
5
+ SHA512:
6
+ metadata.gz: d36f04f85b69b4163c7262b50e690679a8133f409b3712e550e4cb4aaad74c7dbba9760e3d23718ff3e13274fb7d9a9bdaa2e2c1e5c052a43e9d461fb8db94b9
7
+ data.tar.gz: aa7666f61f3ed5964e1eb29cba7cf956510d98f63e9ea3c5192a9e7321a79ee5f185e2768208adfe05784b55d2e300a8bd82433ba8142678937652016f60ae42
@@ -0,0 +1,3 @@
1
+ ### 0.0.1 / 2019-06-29
2
+
3
+ * Everything is new. First release.
@@ -0,0 +1,17 @@
1
+ CHANGELOG.md
2
+ Manifest.txt
3
+ NOTES.md
4
+ README.md
5
+ Rakefile
6
+ lib/sportdb/catalogs.rb
7
+ lib/sportdb/catalogs/catalog.rb
8
+ lib/sportdb/catalogs/config.rb
9
+ lib/sportdb/catalogs/version.rb
10
+ lib/sportdb/catalogs/wiki_index.rb
11
+ test/helper.rb
12
+ test/test_clubs.rb
13
+ test/test_clubs_history.rb
14
+ test/test_countries.rb
15
+ test/test_leagues.rb
16
+ test/test_national_teams.rb
17
+ test/test_wiki_index.rb
@@ -0,0 +1,5 @@
1
+ # Notes
2
+
3
+ ## Todos
4
+
5
+
@@ -0,0 +1,141 @@
1
+ # sportdb-catalogs - sport.db (search & find) catalogs for countries, leagues, clubs, national teams, and more
2
+
3
+
4
+ * home :: [github.com/sportdb/sport.db](https://github.com/sportdb/sport.db)
5
+ * bugs :: [github.com/sportdb/sport.db/issues](https://github.com/sportdb/sport.db/issues)
6
+ * gem :: [rubygems.org/gems/sportdb-catalogs](https://rubygems.org/gems/sportdb-catalogs)
7
+ * rdoc :: [rubydoc.info/gems/sportdb-catalogs](http://rubydoc.info/gems/sportdb-catalogs)
8
+ * forum :: [opensport](http://groups.google.com/group/opensport)
9
+
10
+
11
+
12
+
13
+ ## Usage
14
+
15
+ Let's use the [/clubs datasets](https://github.com/openfootball/clubs)
16
+ (1500+ football clubs from around the world)
17
+ to match name "variants" e.g. `Arsenal` to canonical global unique
18
+ names e.g. `Arsenal FC, London, England`:
19
+
20
+ ``` ruby
21
+ require 'sportdb/catalogs'
22
+
23
+ ## note: requires a local copy of the football.db clubs datasets
24
+ ## see https://github.com/openfootball/clubs
25
+ SportDb::Import.config.clubs_dir = './clubs'
26
+
27
+ CLUBS = SportDb::Import.catalog.clubs
28
+
29
+ m = CLUBS.match( 'Arsenal' )
30
+ m.size # 3 club matches found
31
+ #=> 3
32
+ m[0].name; m[0].city; m[0].country
33
+ #=> "Arsenal FC", "London", "England"
34
+ m[1].name; m[1].city; m[1].country
35
+ #=> "Arsenal Tula", "Tula", "Russia"
36
+ m[2].name; m[2].city; m[2].country
37
+ #=> "Arsenal de Sarandí", "Sarandí", "Argentina"
38
+
39
+
40
+ m = CLUBS.match_by( name: 'Arsenal', country: 'eng' )
41
+ # -or- try alternative names (and auto-generated spelling variants)
42
+ m = CLUBS.match_by( name: 'Arsenal FC', country: 'eng' )
43
+ m = CLUBS.match_by( name: 'Arsenal F.C.', country: 'eng' )
44
+ m = CLUBS.match_by( name: '...A.r.s.e.n.a.l... F.C...', country: 'eng' )
45
+ m.size # 1 club match found
46
+ #=> 1
47
+ m[0].name; m[0].city; m[0].country
48
+ #=> "Arsenal FC", "London", "England"
49
+
50
+ m = CLUBS.match_by( name: 'Arsenal', country: 'ar' )
51
+ # -or- try alternative names (and auto-generated spelling variants)
52
+ m = CLUBS.match_by( name: 'Arsenal Sarandí', country: 'ar' )
53
+ m = CLUBS.match_by( name: 'Arsenal Sarandi', country: 'ar' )
54
+ m.size # 1 club match found
55
+ #=> 1
56
+ m[0].name; m[0].city; m[0].country
57
+ #=> "Arsenal de Sarandí", "Sarandí", "Argentina"
58
+
59
+
60
+ # try some more
61
+ m = CLUBS.match( 'AZ' )
62
+ m[0].name; m[0].city; m[0].country
63
+ #=> "AZ Alkmaar", "Alkmaar", "Netherlands"
64
+
65
+ m = CLUBS.match( 'Bayern' )
66
+ # -or- try alternative names (and auto-generated spelling variants)
67
+ m = CLUBS.match( 'Bayern München' )
68
+ m = CLUBS.match( 'Bayern Munchen' )
69
+ m = CLUBS.match( 'Bayern Muenchen' )
70
+ m[0].name; m[0].city; m[0].country
71
+ #=> "Bayern München", "München", "Germany"
72
+
73
+ # and so on
74
+ # ...
75
+ ```
76
+
77
+ Let's print all names that have duplicate (more than one) matching club:
78
+
79
+ ``` ruby
80
+ CLUBS.mappings.each do |name, clubs|
81
+ if clubs.size > 1
82
+ puts "#{clubs.size} matching clubs for `#{name}`:"
83
+ clubs.each do |club|
84
+ puts " - #{club.name}, #{club.city}, #{club.country.name} (#{club.country.key})"
85
+ end
86
+ puts
87
+ end
88
+ end
89
+ ```
90
+
91
+ resulting in:
92
+
93
+ ```
94
+ 2 matching clubs for `valencia`:
95
+ - Valencia FC, Léogâne, Haiti (ht)
96
+ - Valencia CF, Valencia, Spain (es)
97
+
98
+ 2 matching clubs for `apollon`:
99
+ - Apollon Limassol FC, , Cyprus (cy)
100
+ - Apollon Smyrnis FC, Athens, Greece (gr)
101
+
102
+ 3 matching clubs for `arsenal`:
103
+ - Arsenal FC, London, England (eng)
104
+ - Arsenal Tula, Tula, Russia (ru)
105
+ - Arsenal de Sarandí, Sarandí, Argentina (ar)
106
+
107
+ 2 matching clubs for `liverpool`:
108
+ - Liverpool FC, Liverpool, England (eng)
109
+ - Liverpool Montevideo, Montevideo, Uruguay (uy)
110
+
111
+ 2 matching clubs for `barcelona`:
112
+ - FC Barcelona, Barcelona, Spain (es)
113
+ - Barcelona Guayaquil, Guayaquil, Ecuador (ec)
114
+
115
+ 3 matching clubs for `nacional`:
116
+ - CD Nacional Madeira, Funchal, Portugal (pt)
117
+ - Club Nacional, Asunción, Paraguay (py)
118
+ - Nacional de Montevideo, Montevideo, Uruguay (uy)
119
+
120
+ 2 matching clubs for `sanjose`:
121
+ - San Jose Earthquakes, San Jose, United States (us)
122
+ - Club Deportivo San José, Oruro, Bolivia (bo)
123
+
124
+ ...
125
+ ```
126
+
127
+ That's it.
128
+
129
+
130
+
131
+ ## License
132
+
133
+ The `sportdb-catalogs` scripts are dedicated to the public domain.
134
+ Use it as you please with no restrictions whatsoever.
135
+
136
+
137
+ ## Questions? Comments?
138
+
139
+ Send them along to the
140
+ [Open Sports & Friends Forum/Mailing List](http://groups.google.com/group/opensport).
141
+ Thanks!
@@ -0,0 +1,34 @@
1
+ require 'hoe'
2
+ require './lib/sportdb/catalogs/version.rb'
3
+
4
+ Hoe.spec 'sportdb-catalogs' do
5
+
6
+ self.version = SportDb::Module::Catalogs::VERSION
7
+
8
+ self.summary = "sportdb-catalogs - sport.db (search 'n' find) catalogs for countries, leagues, clubs, national teams, and more"
9
+ self.description = summary
10
+
11
+ self.urls = ['https://github.com/sportdb/sport.db']
12
+
13
+ self.author = 'Gerald Bauer'
14
+ self.email = 'opensport@googlegroups.com'
15
+
16
+ # switch extension to .markdown for gihub formatting
17
+ self.readme_file = 'README.md'
18
+ self.history_file = 'CHANGELOG.md'
19
+
20
+ self.licenses = ['Public Domain']
21
+
22
+ self.extra_deps = [
23
+ ['sportdb-formats', '>= 1.1.3'],
24
+ ## dataset libs / gems
25
+ ['fifa', '>= 2020.5.18'], ## for (builtin/default) countries
26
+ ['footballdb-leagues', '>= 2020.7.7'], ## for (builtin/default) leagues & cups
27
+ ['footballdb-clubs', '>= 2020.7.7'], ## for (builtin/default) clubs
28
+ ]
29
+
30
+ self.spec_extras = {
31
+ required_ruby_version: '>= 2.2.2'
32
+ }
33
+
34
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ ### our own sportdb libs / gems
4
+ require 'sportdb/formats'
5
+
6
+ ### "built-in" default dataset libs / gems
7
+ require 'fifa' ## get a list of all fifa countries with (three letter) codes
8
+ require 'footballdb/leagues'
9
+ require 'footballdb/clubs'
10
+
11
+
12
+ ###
13
+ # our own code
14
+ require 'sportdb/catalogs/version' # let version always go first
15
+ require 'sportdb/catalogs/wiki_index'
16
+ require 'sportdb/catalogs/catalog'
17
+ require 'sportdb/catalogs/config'
18
+
19
+
20
+ puts SportDb::Module::Catalogs.banner # say hello
@@ -0,0 +1,105 @@
1
+
2
+ module SportDb
3
+ module Import
4
+
5
+
6
+ class Catalog
7
+ def config() Import.config; end
8
+
9
+
10
+ ## todo/check: rename to country_mappings/index - why? why not?
11
+ ## or countries_by_code or countries_by_key
12
+ def countries() @countries ||= build_country_index; end
13
+ def national_teams() @national_teams ||= build_national_team_index; end
14
+ def clubs() @clubs ||= build_club_index; end
15
+ def clubs_history() @clubs_history ||= build_club_history_index; end ## note: used for now (only) lookups by season for now
16
+ def teams() @teams ||= build_team_index; end
17
+ def leagues() @leagues ||= build_league_index; end
18
+
19
+ def events() @events ||= build_event_index; end
20
+ def seasons() @seasons ||= build_season_index; end
21
+
22
+
23
+
24
+ def build_team_index() TeamIndex.new; end
25
+
26
+ def build_country_index ## todo/check: rename to setup_country_index or read_country_index - why? why not?
27
+ CountryIndex.new( Fifa.countries )
28
+ end
29
+
30
+ def build_national_team_index
31
+ ## auto-build national teams from Fifa.countries for now
32
+ teams = []
33
+ Fifa.countries.each do |country|
34
+ team = NationalTeam.new( key: country.code.downcase, ## note: use country code (fifa)
35
+ name: country.name,
36
+ code: country.code, ## note: use country code (fifa)
37
+ alt_names: country.alt_names )
38
+ team.country = country
39
+
40
+ teams << team
41
+ end
42
+
43
+ NationalTeamIndex.new( teams )
44
+ end
45
+
46
+ def build_club_index
47
+ ## unify team names; team (builtin/known/shared) name mappings
48
+ ## cleanup team names - use local ("native") name with umlaut etc.
49
+ ## todo/fix: add to teamreader
50
+ ## check that name and alt_names for a club are all unique (not duplicates)
51
+
52
+ clubs = if config.clubs_dir ## check if clubs_dir is defined / set (otherwise it's nil)
53
+ ClubIndex.build( config.clubs_dir )
54
+ else ## no clubs_dir set - try using builtin from footballdb-clubs
55
+ FootballDb::Import::build_club_index
56
+ end
57
+
58
+ if clubs.errors?
59
+ puts ""
60
+ puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
61
+ puts " #{clubs.errors.size} errors:"
62
+ pp clubs.errors
63
+ ## exit 1
64
+ end
65
+
66
+ clubs
67
+ end # method build_club_index
68
+
69
+ def build_club_history_index
70
+ if config.clubs_dir ## (re)use clubs dir for now - why? why not?
71
+ ClubHistoryIndex.build( config.clubs_dir )
72
+ else
73
+ puts "!! WARN - no clubs_dir set; for now NO built-in club histories in catalog; sorry - fix!!!!"
74
+ ClubHistoryIndex.new ## return empty history index
75
+ end
76
+ end
77
+
78
+
79
+ def build_league_index
80
+ leagues = if config.leagues_dir ## check if clubs_dir is defined / set (otherwise it's nil)
81
+ LeagueIndex.build( config.leagues_dir )
82
+ else ## no leagues_dir set - try using builtin from footballdb-leagues
83
+ FootballDb::Import.build_league_index
84
+ end
85
+ end
86
+
87
+
88
+ def build_event_index
89
+ if config.leagues_dir ## (re)use leagues dir for now - add separate seasons_dir - why? why not?
90
+ EventIndex.build( config.leagues_dir )
91
+ else
92
+ puts "!! WARN - no leagues_dir set; for now NO built-in events in catalog; sorry - fix!!!!"
93
+ EventIndex.new ## return empty event index
94
+ end
95
+ end
96
+
97
+ def build_season_index
98
+ # note: for now always (re)use the events from the event (info) index
99
+ SeasonIndex.new( events )
100
+ end
101
+
102
+ end # class Catalog
103
+
104
+ end # module Import
105
+ end # module SportDb
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ module SportDb
4
+ module Import
5
+
6
+ class Configuration
7
+ ## note: add more configs (open class), see sportdb-formats for original config!!!
8
+
9
+ ##
10
+ ## todo: allow configure of countries_dir like clubs_dir
11
+ ## "fallback" and use a default built-in world/countries.txt
12
+
13
+ ####
14
+ # todo/check: find a better way to configure club / team datasets - why? why not?
15
+ attr_accessor :clubs_dir
16
+ ## def clubs_dir() @clubs_dir; end ### note: return nil if NOT set on purpose for now - why? why not?
17
+
18
+ attr_accessor :leagues_dir
19
+ ## def leagues_dir() @leagues_dir; end
20
+
21
+ def catalog() @catalog ||= Catalog.new; end
22
+ end # class Configuration
23
+
24
+ end # module Import
25
+ end # module SportDb
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module SportDb
5
+ module Module
6
+ module Catalogs
7
+
8
+ MAJOR = 1 ## todo: namespace inside version or something - why? why not??
9
+ MINOR = 0
10
+ PATCH = 0
11
+ VERSION = [MAJOR,MINOR,PATCH].join('.')
12
+
13
+ def self.version
14
+ VERSION
15
+ end
16
+
17
+ def self.banner
18
+ "sportdb-catalogs/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
19
+ end
20
+
21
+ def self.root
22
+ File.expand_path( File.dirname(File.dirname(File.dirname(File.dirname(__FILE__)))) )
23
+ end
24
+
25
+ end # module Catalogs
26
+ end # module Module
27
+ end # module SportDb
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+
3
+ module SportDb
4
+ module Import
5
+
6
+
7
+ class WikiIndex
8
+
9
+ def self.build( path )
10
+ pack = Package.new( path )
11
+ recs = []
12
+ pack.each_clubs_wiki do |entry|
13
+ recs += WikiReader.parse( entry.read )
14
+ end
15
+ recs
16
+
17
+ new( recs )
18
+ end
19
+
20
+
21
+ include NameHelper
22
+ ## e.g. strip_lang, strip_year, normalize
23
+
24
+ ## fix/todo:
25
+ ## also used / duplicated in ClubIndex#add_wiki !!!
26
+ def strip_wiki( name ) # todo/check: rename to strip_wikipedia_en - why? why not?
27
+ ## note: strip disambiguationn qualifier from wikipedia page name if present
28
+ ## note: only remove year and foot... for now
29
+ ## e.g. FC Wacker Innsbruck (2002) => FC Wacker Innsbruck
30
+ ## Willem II (football club) => Willem II
31
+ ##
32
+ ## e.g. do NOT strip others !! e.g.
33
+ ## América Futebol Clube (MG)
34
+ ## only add more "special" cases on demand (that, is) if we find more
35
+ name = name.gsub( /\([12][^\)]+?\)/, '' ).strip ## starting with a digit 1 or 2 (assuming year)
36
+ name = name.gsub( /\(foot[^\)]+?\)/, '' ).strip ## starting with foot (assuming football ...)
37
+ name
38
+ end
39
+
40
+
41
+ def initialize( recs )
42
+ @pages_by_country = {}
43
+
44
+ ## todo/fix:
45
+ ## check for duplicate recs - report and exit on dupliate!!!!!!
46
+ recs.each do |rec|
47
+ h = @pages_by_country[ rec.country.key ] ||= {}
48
+ h[ normalize( strip_wiki( rec.name )) ] = rec
49
+ end
50
+ end
51
+
52
+
53
+ def find_by( club: ) ## todo/check: use find_by_club - why? why not?
54
+ find_by_club( club )
55
+ end
56
+
57
+ def find_by_club( club )
58
+ rec = nil
59
+
60
+ ## get query params from club
61
+ names = [club.name]+club.alt_names
62
+ country_key = club.country.key
63
+
64
+ h = @pages_by_country[ country_key ]
65
+ if h
66
+ ## todo/check: sort names ?
67
+ ## sort by longest first (for best match)
68
+ names.each do |name|
69
+ ## note: normalize AND sanitize (e.g. remove/string year and lang e.g. (1946-2001), [en] too)
70
+ rec = h[ normalize( strip_year( strip_lang( name ))) ]
71
+ break if rec ## bingo!! found - break on first match
72
+ end
73
+ end
74
+
75
+ rec ## note: return nil if nothing found
76
+ end
77
+ end # class WikiIndex
78
+
79
+
80
+ end # module Import
81
+ end # module SportDb
@@ -0,0 +1,13 @@
1
+ ## note: use the local version of sportdb gems
2
+ $LOAD_PATH.unshift( File.expand_path( '../sportdb-formats/lib' ))
3
+
4
+ ## minitest setup
5
+ require 'minitest/autorun'
6
+
7
+
8
+ ## our own code
9
+ require 'sportdb/catalogs'
10
+
11
+
12
+ SportDb::Import.config.clubs_dir = '../../../openfootball/clubs'
13
+ SportDb::Import.config.leagues_dir = '../../../openfootball/leagues'
@@ -0,0 +1,100 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_clubs.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+ class TestClubs < MiniTest::Test
9
+
10
+ CLUBS = SportDb::Import.catalog.clubs
11
+
12
+
13
+ def test_match
14
+ pp CLUBS.errors
15
+
16
+ CLUBS.dump_duplicates
17
+
18
+ m = CLUBS.match( 'Rapid Wien' )
19
+ assert_equal 'SK Rapid Wien', m[0].name
20
+ assert_equal 'Austria', m[0].country.name
21
+ assert_equal 'Wien', m[0].city
22
+
23
+ m = CLUBS.match( 'rapid wien' )
24
+ assert_equal 'SK Rapid Wien', m[0].name
25
+ assert_equal 'Austria', m[0].country.name
26
+ assert_equal 'Wien', m[0].city
27
+
28
+ ## note: all dots (.) get always removed
29
+ m = CLUBS.match( '...r.a.p.i.d w.i.e.n...' )
30
+ assert_equal 'SK Rapid Wien', m[0].name
31
+ assert_equal 'Austria', m[0].country.name
32
+ assert_equal 'Wien', m[0].city
33
+
34
+ ## note: all spaces and dashes (-) get always removed
35
+ m = CLUBS.match( '--- r a p i d w i e n ---' )
36
+ assert_equal 'SK Rapid Wien', m[0].name
37
+ assert_equal 'Austria', m[0].country.name
38
+ assert_equal 'Wien', m[0].city
39
+
40
+ m = CLUBS.match( 'RAPID WIEN' )
41
+ assert_equal 'SK Rapid Wien', m[0].name
42
+ assert_equal 'Austria', m[0].country.name
43
+ assert_equal 'Wien', m[0].city
44
+
45
+
46
+ c = CLUBS[ 'SK Rapid Wien' ] ## check canoncial name match (only)
47
+ assert_equal 'SK Rapid Wien', c.name
48
+ assert_equal 'Austria', c.country.name
49
+ assert_equal 'Wien', c.city
50
+
51
+
52
+ m = CLUBS.match( 'Arsenal' )
53
+ assert_equal 3, m.size
54
+
55
+ m = CLUBS.match( 'ARSENAL' )
56
+ assert_equal 3, m.size
57
+
58
+ m = CLUBS.match_by( name: 'Arsenal', country: 'eng' )
59
+ assert_equal 1, m.size
60
+ assert_equal 'Arsenal FC', m[0].name
61
+ assert_equal 'England', m[0].country.name
62
+ assert_equal 'London', m[0].city
63
+
64
+ m = CLUBS.match_by( name: 'Arsenal', country: 'ar' )
65
+ assert_equal 1, m.size
66
+ assert_equal 'Arsenal de Sarandí', m[0].name
67
+ assert_equal 'Argentina', m[0].country.name
68
+ assert_equal 'Sarandí', m[0].city
69
+
70
+ m = CLUBS.match_by( name: 'Arsenal', country: 'ru' )
71
+ assert_equal 1, m.size
72
+ assert_equal 'Arsenal Tula', m[0].name
73
+ assert_equal 'Russia', m[0].country.name
74
+ assert_equal 'Tula', m[0].city
75
+
76
+
77
+ m = CLUBS.match( 'Arsenal FC' )
78
+ assert_equal 2, m.size
79
+
80
+ m = CLUBS.match( 'Arsenal F.C.' )
81
+ assert_equal 2, m.size
82
+
83
+ m = CLUBS.match( '...A.r.s.e.n.a.l... F.C...' )
84
+ assert_equal 2, m.size
85
+ end
86
+
87
+
88
+ def test_wikipedia ## test wikipedia names and links/urls
89
+ m = CLUBS.match( 'Club Brugge KV' )
90
+ assert_equal 1, m.size
91
+ assert_equal 'Club Brugge KV', m[0].wikipedia
92
+ assert_equal 'https://en.wikipedia.org/wiki/Club_Brugge_KV', m[0].wikipedia_url
93
+
94
+ m = CLUBS.match( 'RSC Anderlecht' )
95
+ assert_equal 1, m.size
96
+ assert_equal 'R.S.C. Anderlecht', m[0].wikipedia
97
+ assert_equal 'https://en.wikipedia.org/wiki/R.S.C._Anderlecht', m[0].wikipedia_url
98
+ end
99
+
100
+ end # class TestClubs
@@ -0,0 +1,47 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_clubs_history.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+ class TestClubsHistory < MiniTest::Test
9
+
10
+ CLUBS = SportDb::Import.catalog.clubs
11
+ CLUBS_HISTORY = SportDb::Import.catalog.clubs_history
12
+
13
+
14
+ def test_at
15
+ pp CLUBS_HISTORY.mappings
16
+
17
+ puts CLUBS_HISTORY.find_name_by( name: 'WSG Tirol', season: '2019/20' )
18
+ puts CLUBS_HISTORY.find_name_by( name: 'WSG Tirol', season: '2018/9' )
19
+ puts CLUBS_HISTORY.find_name_by( name: 'WSG Tirol', season: '2017/8' )
20
+
21
+ club = CLUBS.find( 'WSG Wattens' )
22
+ pp club
23
+
24
+ assert_equal 'WSG Tirol', club.name_by_season( '2019/20' )
25
+ assert_equal 'WSG Wattens', club.name_by_season( '2018/9' )
26
+ assert_equal 'WSG Wattens', club.name_by_season( '2017/8' )
27
+
28
+
29
+ club = CLUBS.find( 'Rapid Wien' )
30
+ pp club
31
+
32
+ assert_equal 'SK Rapid Wien', club.name_by_season( '2000/1' )
33
+ assert_equal 'SK Rapid Wien', club.name_by_season( '1891/2' )
34
+ end
35
+
36
+ def test_eng
37
+ club = CLUBS.find_by( name: 'Arsenal', country: 'ENG' )
38
+ pp club
39
+
40
+ assert_equal 'Arsenal FC', club.name_by_season( '2000/1' )
41
+ assert_equal 'Arsenal FC', club.name_by_season( '1927/8' )
42
+ assert_equal 'The Arsenal FC', club.name_by_season( '1926/7' )
43
+ assert_equal 'Woolwich Arsenal FC', club.name_by_season( '1913/4' )
44
+ assert_equal 'Royal Arsenal FC', club.name_by_season( '1891/2' )
45
+ end
46
+
47
+ end # class TestClubsHistory
@@ -0,0 +1,33 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_countries.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+ class TestCountries < MiniTest::Test
9
+
10
+ COUNTRIES = SportDb::Import.catalog.countries
11
+
12
+
13
+ def test_countries
14
+ ## pp COUNTRIES
15
+
16
+ eng = COUNTRIES.find( :eng )
17
+ assert_equal 'eng', eng.key
18
+ assert_equal 'England', eng.name
19
+ assert_equal 'ENG', eng.code
20
+
21
+ at = COUNTRIES.find( :at )
22
+ assert_equal 'at', at.key
23
+ assert_equal 'Austria', at.name
24
+ assert_equal 'AUT', at.code
25
+
26
+ assert at == COUNTRIES.find( 'AT' )
27
+ assert at == COUNTRIES.find( 'at' )
28
+ assert at == COUNTRIES.find( 'AUT' )
29
+ assert at == COUNTRIES.find( 'aut' )
30
+ assert at == COUNTRIES.find( :aut )
31
+ end
32
+
33
+ end # class TestCountries
@@ -0,0 +1,38 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_leagues.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+ class TestLeagues < MiniTest::Test
9
+
10
+ LEAGUES = SportDb::Import.catalog.leagues
11
+
12
+
13
+ def test_match
14
+ pp LEAGUES.errors
15
+
16
+ LEAGUES.dump_duplicates
17
+
18
+ m = LEAGUES.match( 'English Premier League' )
19
+ pp m
20
+ assert_equal 'Premier League', m[0].name
21
+ assert_equal 'eng.1', m[0].key
22
+ assert_equal 'England', m[0].country.name
23
+ assert_equal 'eng', m[0].country.key
24
+ assert m[0].clubs?
25
+ assert m[0].domestic?
26
+ assert_equal false, m[0].intl?
27
+ assert_equal false, m[0].national_teams?
28
+
29
+ m = LEAGUES.match( 'Euro' )
30
+ pp m
31
+ assert_equal 'Euro', m[0].name
32
+ assert_equal 'euro', m[0].key
33
+ assert m[0].national_teams?
34
+ assert m[0].intl?
35
+ assert_equal false, m[0].clubs?
36
+ end
37
+
38
+ end # class TestLeagues
@@ -0,0 +1,38 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_national_teams.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+ class TestNationalTeams < MiniTest::Test
9
+
10
+ NATIONAL_TEAMS = SportDb::Import.catalog.national_teams
11
+
12
+
13
+ def test_find
14
+ t = NATIONAL_TEAMS.find( 'AUT' )
15
+ assert_equal 'Austria', t.name
16
+ assert_equal 'aut', t.key
17
+ assert_equal 'AUT', t.code
18
+
19
+
20
+ t = NATIONAL_TEAMS.find( 'England' )
21
+ assert_equal 'England', t.name
22
+ assert_equal 'eng', t.key
23
+ assert_equal 'ENG', t.code
24
+
25
+ ## note: all dots (.) get always removed
26
+ t = NATIONAL_TEAMS.find( '...e.n.g.l.a.n.d...' )
27
+ assert_equal 'England', t.name
28
+ assert_equal 'eng', t.key
29
+ assert_equal 'ENG', t.code
30
+
31
+ ## note: all spaces and dashes (-) get always removed
32
+ t = NATIONAL_TEAMS.find( '--- e n g l a n d ---' )
33
+ assert_equal 'England', t.name
34
+ assert_equal 'eng', t.key
35
+ assert_equal 'ENG', t.code
36
+ end
37
+
38
+ end # class TestNationalTeams
@@ -0,0 +1,42 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_wiki_index.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+ class TestWikiIndex < MiniTest::Test
9
+
10
+ Club = SportDb::Import::Club
11
+
12
+ COUNTRIES = SportDb::Import.catalog.countries
13
+
14
+
15
+ def test_clubs
16
+ ## note: CANNOT run if no "custom" clubs_dir set
17
+ return if SportDb::Import.config.clubs_dir.nil?
18
+
19
+ wiki = SportDb::Import::WikiIndex.build( SportDb::Import.config.clubs_dir )
20
+ ## pp wiki
21
+
22
+ ##############################################
23
+ ## test wikipedia names and links/urls
24
+ be = COUNTRIES.find( 'be' )
25
+
26
+ club = Club.new
27
+ club.name = 'Club Brugge KV'
28
+ club.country = be
29
+
30
+ rec = wiki.find_by( club: club )
31
+ assert_equal 'Club Brugge KV', rec.name
32
+
33
+
34
+ club = Club.new
35
+ club.name = 'RSC Anderlecht'
36
+ club.country = be
37
+
38
+ rec = wiki.find_by( club: club )
39
+ assert_equal 'R.S.C. Anderlecht', rec.name
40
+ end
41
+
42
+ end # class TestWikiIndex
metadata ADDED
@@ -0,0 +1,152 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sportdb-catalogs
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Gerald Bauer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-08-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sportdb-formats
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: fifa
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2020.5.18
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2020.5.18
41
+ - !ruby/object:Gem::Dependency
42
+ name: footballdb-leagues
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 2020.7.7
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 2020.7.7
55
+ - !ruby/object:Gem::Dependency
56
+ name: footballdb-clubs
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 2020.7.7
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 2020.7.7
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdoc
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: hoe
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.16'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.16'
97
+ description: sportdb-catalogs - sport.db (search 'n' find) catalogs for countries,
98
+ leagues, clubs, national teams, and more
99
+ email: opensport@googlegroups.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files:
103
+ - CHANGELOG.md
104
+ - Manifest.txt
105
+ - NOTES.md
106
+ - README.md
107
+ files:
108
+ - CHANGELOG.md
109
+ - Manifest.txt
110
+ - NOTES.md
111
+ - README.md
112
+ - Rakefile
113
+ - lib/sportdb/catalogs.rb
114
+ - lib/sportdb/catalogs/catalog.rb
115
+ - lib/sportdb/catalogs/config.rb
116
+ - lib/sportdb/catalogs/version.rb
117
+ - lib/sportdb/catalogs/wiki_index.rb
118
+ - test/helper.rb
119
+ - test/test_clubs.rb
120
+ - test/test_clubs_history.rb
121
+ - test/test_countries.rb
122
+ - test/test_leagues.rb
123
+ - test/test_national_teams.rb
124
+ - test/test_wiki_index.rb
125
+ homepage: https://github.com/sportdb/sport.db
126
+ licenses:
127
+ - Public Domain
128
+ metadata: {}
129
+ post_install_message:
130
+ rdoc_options:
131
+ - "--main"
132
+ - README.md
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: 2.2.2
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ requirements: []
146
+ rubyforge_project:
147
+ rubygems_version: 2.5.2
148
+ signing_key:
149
+ specification_version: 4
150
+ summary: sportdb-catalogs - sport.db (search 'n' find) catalogs for countries, leagues,
151
+ clubs, national teams, and more
152
+ test_files: []