sportdb-formats 1.1.6 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +2 -0
- data/Manifest.txt +4 -25
- data/Rakefile +1 -1
- data/lib/sportdb/formats/country/country_reader.rb +142 -142
- data/lib/sportdb/formats/datafile.rb +59 -59
- data/lib/sportdb/formats/event/event_reader.rb +184 -183
- data/lib/sportdb/formats/goals.rb +37 -1
- data/lib/sportdb/formats/ground/ground_reader.rb +289 -0
- data/lib/sportdb/formats/league/league_reader.rb +152 -168
- data/lib/sportdb/formats/lines_reader.rb +47 -0
- data/lib/sportdb/formats/match/match_parser.rb +102 -12
- data/lib/sportdb/formats/match/match_parser_auto_conf.rb +270 -202
- data/lib/sportdb/formats/outline_reader.rb +0 -1
- data/lib/sportdb/formats/package.rb +394 -374
- data/lib/sportdb/formats/search/sport.rb +357 -0
- data/lib/sportdb/formats/search/world.rb +139 -0
- data/lib/sportdb/formats/team/club_index_history.rb +134 -134
- data/lib/sportdb/formats/team/club_reader.rb +318 -350
- data/lib/sportdb/formats/team/club_reader_history.rb +203 -203
- data/lib/sportdb/formats/team/wiki_reader.rb +108 -108
- data/lib/sportdb/formats/version.rb +4 -7
- data/lib/sportdb/formats.rb +60 -27
- metadata +13 -35
- data/lib/sportdb/formats/country/country_index.rb +0 -192
- data/lib/sportdb/formats/event/event_index.rb +0 -141
- data/lib/sportdb/formats/league/league_index.rb +0 -178
- data/lib/sportdb/formats/team/club_index.rb +0 -338
- data/lib/sportdb/formats/team/national_team_index.rb +0 -114
- data/lib/sportdb/formats/team/team_index.rb +0 -43
- data/test/helper.rb +0 -132
- data/test/test_club_index.rb +0 -183
- data/test/test_club_index_history.rb +0 -107
- data/test/test_club_reader.rb +0 -201
- data/test/test_club_reader_history.rb +0 -212
- data/test/test_club_reader_props.rb +0 -54
- data/test/test_country_index.rb +0 -63
- data/test/test_country_reader.rb +0 -89
- data/test/test_datafile.rb +0 -30
- data/test/test_datafile_package.rb +0 -46
- data/test/test_goals.rb +0 -113
- data/test/test_league_index.rb +0 -157
- data/test/test_league_outline_reader.rb +0 -55
- data/test/test_league_reader.rb +0 -72
- data/test/test_outline_reader.rb +0 -31
- data/test/test_package.rb +0 -78
- data/test/test_package_match.rb +0 -102
- data/test/test_regex.rb +0 -67
- data/test/test_wiki_reader.rb +0 -77
@@ -1,134 +1,134 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module SportDb
|
4
|
-
module Import
|
5
|
-
|
6
|
-
|
7
|
-
class ClubHistoryIndex
|
8
|
-
|
9
|
-
def self.build( path )
|
10
|
-
pack = Package.new( path ) ## lets us use direcotry or zip archive
|
11
|
-
|
12
|
-
recs = []
|
13
|
-
pack.each_clubs_history do |entry|
|
14
|
-
recs += ClubHistoryReader.parse( entry.read )
|
15
|
-
end
|
16
|
-
recs
|
17
|
-
|
18
|
-
index = new
|
19
|
-
index.add( recs )
|
20
|
-
index
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
def catalog() Import.catalog; end
|
26
|
-
|
27
|
-
## note: keep name history for now separate from
|
28
|
-
## from club struct - why? why not?
|
29
|
-
## later yes, yes, yes, merge name history into club struct!!!!!
|
30
|
-
##
|
31
|
-
## for now the name history is experimental
|
32
|
-
|
33
|
-
|
34
|
-
def initialize
|
35
|
-
@clubs = {} ## clubs (indexed) by canonical name
|
36
|
-
@errors = []
|
37
|
-
end
|
38
|
-
|
39
|
-
attr_reader :errors
|
40
|
-
def errors?() @errors.empty? == false; end
|
41
|
-
|
42
|
-
def mappings() @clubs; end ## todo/check: rename to records or histories or something - why? why not?
|
43
|
-
|
44
|
-
|
45
|
-
def add_history( club_rec, keyword, season, args )
|
46
|
-
## note use season obj for now (and NOT key) - why? why not?
|
47
|
-
rec = @clubs[ club_rec.name ] ||= []
|
48
|
-
|
49
|
-
rec << [season, [keyword, args]]
|
50
|
-
|
51
|
-
## note: always keep records sorted by season_key for now
|
52
|
-
## check if 2010 and 2010/11 is in order using alpha sort?? (see argentina)
|
53
|
-
rec.sort! { |l,r| r[0] <=> l[0] }
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
def add( rec_or_recs ) ## add club record / alt_names
|
58
|
-
recs = rec_or_recs.is_a?( Array ) ? rec_or_recs : [rec_or_recs] ## wrap (single) rec in array
|
59
|
-
|
60
|
-
recs.each do |rec|
|
61
|
-
|
62
|
-
keyword = rec[0]
|
63
|
-
season_key = rec[1]
|
64
|
-
args = rec[2..-1] ## get rest of args e.g. one, two or more
|
65
|
-
|
66
|
-
## note: for now only add (re)name history season records,
|
67
|
-
## that is, skip MERGE and BANKRUPT for now
|
68
|
-
## and incl. only RENAME, REFORM, MOVE for now
|
69
|
-
next if ['MERGE', 'BANKRUPT'].include?( keyword )
|
70
|
-
|
71
|
-
|
72
|
-
name_old = strip_geo( args[0][0] ) ## note: strip optional geo part from name
|
73
|
-
name_new = strip_geo( args[1][0] )
|
74
|
-
|
75
|
-
country_old = args[0][1]
|
76
|
-
country_new = args[1][1]
|
77
|
-
|
78
|
-
club_old = catalog.clubs.find_by!( name: name_old, country: country_old )
|
79
|
-
club_new = catalog.clubs.find_by!( name: name_new, country: country_new )
|
80
|
-
|
81
|
-
## note use season obj for now (and NOT key) - why? why not?
|
82
|
-
season = Season.parse( season_key )
|
83
|
-
|
84
|
-
## todo/check:
|
85
|
-
## check if club_old and club_new reference different club record!!
|
86
|
-
## examples - RB II -> Liefering ?? or
|
87
|
-
## FC Pasching -> OOE Juniors ??
|
88
|
-
## Austria Salzburg -> RB Salburg ??
|
89
|
-
## for now always add name history to both - why? why not?
|
90
|
-
|
91
|
-
add_history( club_old, keyword, season, args )
|
92
|
-
## note: allow for now different club references
|
93
|
-
## but maybe warn later - why? why not?
|
94
|
-
## add history to both for now
|
95
|
-
add_history( club_new, keyword, season, args ) if club_old != club_new
|
96
|
-
end # each rec
|
97
|
-
end # method add
|
98
|
-
|
99
|
-
|
100
|
-
#### todo/check: move as method to club struct later - to always use club reference
|
101
|
-
## returns (simply) name as string for now or nil - why? why not?
|
102
|
-
#
|
103
|
-
# history entry example
|
104
|
-
# Arsenal FC"=>
|
105
|
-
# [[1927/28, ["RENAME", [["The Arsenal FC, London", "eng"], ["Arsenal FC", "eng"]]]],
|
106
|
-
# [1914/15, ["RENAME", [["Woolwich Arsenal FC, London", "eng"], ["The Arsenal FC", "eng"]]]],
|
107
|
-
# [1892/93, ["RENAME", [["Royal Arsenal FC, London", "eng"], ["Woolwich Arsenal FC", "eng"]]]]],
|
108
|
-
def find_name_by( name:, season: )
|
109
|
-
recs = @clubs[ name ]
|
110
|
-
if recs
|
111
|
-
season = Season( season ) ## make sure season is a season obj (and NOT a string)
|
112
|
-
## check season records for name; use linear search (assume only few records)
|
113
|
-
recs.each do |rec|
|
114
|
-
if season >= rec[0]
|
115
|
-
return strip_geo( rec[1][1][1][0] ) # use second arg
|
116
|
-
end
|
117
|
-
end
|
118
|
-
## if we get here use last name
|
119
|
-
strip_geo( recs[-1][1][1][0][0] ) # use first arg
|
120
|
-
else
|
121
|
-
nil
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
##################
|
126
|
-
## helpers
|
127
|
-
def strip_geo( name )
|
128
|
-
## e.g. Arsenal, London => Arsenal
|
129
|
-
name.split(',')[0].strip
|
130
|
-
end
|
131
|
-
end # class ClubHistoryIndex
|
132
|
-
|
133
|
-
end # module Import
|
134
|
-
end # module SportDb
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module SportDb
|
4
|
+
module Import
|
5
|
+
|
6
|
+
|
7
|
+
class ClubHistoryIndex
|
8
|
+
|
9
|
+
def self.build( path )
|
10
|
+
pack = Package.new( path ) ## lets us use direcotry or zip archive
|
11
|
+
|
12
|
+
recs = []
|
13
|
+
pack.each_clubs_history do |entry|
|
14
|
+
recs += ClubHistoryReader.parse( entry.read )
|
15
|
+
end
|
16
|
+
recs
|
17
|
+
|
18
|
+
index = new
|
19
|
+
index.add( recs )
|
20
|
+
index
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
def catalog() Import.catalog; end
|
26
|
+
|
27
|
+
## note: keep name history for now separate from
|
28
|
+
## from club struct - why? why not?
|
29
|
+
## later yes, yes, yes, merge name history into club struct!!!!!
|
30
|
+
##
|
31
|
+
## for now the name history is experimental
|
32
|
+
|
33
|
+
|
34
|
+
def initialize
|
35
|
+
@clubs = {} ## clubs (indexed) by canonical name
|
36
|
+
@errors = []
|
37
|
+
end
|
38
|
+
|
39
|
+
attr_reader :errors
|
40
|
+
def errors?() @errors.empty? == false; end
|
41
|
+
|
42
|
+
def mappings() @clubs; end ## todo/check: rename to records or histories or something - why? why not?
|
43
|
+
|
44
|
+
|
45
|
+
def add_history( club_rec, keyword, season, args )
|
46
|
+
## note use season obj for now (and NOT key) - why? why not?
|
47
|
+
rec = @clubs[ club_rec.name ] ||= []
|
48
|
+
|
49
|
+
rec << [season, [keyword, args]]
|
50
|
+
|
51
|
+
## note: always keep records sorted by season_key for now
|
52
|
+
## check if 2010 and 2010/11 is in order using alpha sort?? (see argentina)
|
53
|
+
rec.sort! { |l,r| r[0] <=> l[0] }
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def add( rec_or_recs ) ## add club record / alt_names
|
58
|
+
recs = rec_or_recs.is_a?( Array ) ? rec_or_recs : [rec_or_recs] ## wrap (single) rec in array
|
59
|
+
|
60
|
+
recs.each do |rec|
|
61
|
+
|
62
|
+
keyword = rec[0]
|
63
|
+
season_key = rec[1]
|
64
|
+
args = rec[2..-1] ## get rest of args e.g. one, two or more
|
65
|
+
|
66
|
+
## note: for now only add (re)name history season records,
|
67
|
+
## that is, skip MERGE and BANKRUPT for now
|
68
|
+
## and incl. only RENAME, REFORM, MOVE for now
|
69
|
+
next if ['MERGE', 'BANKRUPT'].include?( keyword )
|
70
|
+
|
71
|
+
|
72
|
+
name_old = strip_geo( args[0][0] ) ## note: strip optional geo part from name
|
73
|
+
name_new = strip_geo( args[1][0] )
|
74
|
+
|
75
|
+
country_old = args[0][1]
|
76
|
+
country_new = args[1][1]
|
77
|
+
|
78
|
+
club_old = catalog.clubs.find_by!( name: name_old, country: country_old )
|
79
|
+
club_new = catalog.clubs.find_by!( name: name_new, country: country_new )
|
80
|
+
|
81
|
+
## note use season obj for now (and NOT key) - why? why not?
|
82
|
+
season = Season.parse( season_key )
|
83
|
+
|
84
|
+
## todo/check:
|
85
|
+
## check if club_old and club_new reference different club record!!
|
86
|
+
## examples - RB II -> Liefering ?? or
|
87
|
+
## FC Pasching -> OOE Juniors ??
|
88
|
+
## Austria Salzburg -> RB Salburg ??
|
89
|
+
## for now always add name history to both - why? why not?
|
90
|
+
|
91
|
+
add_history( club_old, keyword, season, args )
|
92
|
+
## note: allow for now different club references
|
93
|
+
## but maybe warn later - why? why not?
|
94
|
+
## add history to both for now
|
95
|
+
add_history( club_new, keyword, season, args ) if club_old != club_new
|
96
|
+
end # each rec
|
97
|
+
end # method add
|
98
|
+
|
99
|
+
|
100
|
+
#### todo/check: move as method to club struct later - to always use club reference
|
101
|
+
## returns (simply) name as string for now or nil - why? why not?
|
102
|
+
#
|
103
|
+
# history entry example
|
104
|
+
# Arsenal FC"=>
|
105
|
+
# [[1927/28, ["RENAME", [["The Arsenal FC, London", "eng"], ["Arsenal FC", "eng"]]]],
|
106
|
+
# [1914/15, ["RENAME", [["Woolwich Arsenal FC, London", "eng"], ["The Arsenal FC", "eng"]]]],
|
107
|
+
# [1892/93, ["RENAME", [["Royal Arsenal FC, London", "eng"], ["Woolwich Arsenal FC", "eng"]]]]],
|
108
|
+
def find_name_by( name:, season: )
|
109
|
+
recs = @clubs[ name ]
|
110
|
+
if recs
|
111
|
+
season = Season( season ) ## make sure season is a season obj (and NOT a string)
|
112
|
+
## check season records for name; use linear search (assume only few records)
|
113
|
+
recs.each do |rec|
|
114
|
+
if season >= rec[0]
|
115
|
+
return strip_geo( rec[1][1][1][0] ) # use second arg
|
116
|
+
end
|
117
|
+
end
|
118
|
+
## if we get here use last name
|
119
|
+
strip_geo( recs[-1][1][1][0][0] ) # use first arg
|
120
|
+
else
|
121
|
+
nil
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
##################
|
126
|
+
## helpers
|
127
|
+
def strip_geo( name )
|
128
|
+
## e.g. Arsenal, London => Arsenal
|
129
|
+
name.split(',')[0].strip
|
130
|
+
end
|
131
|
+
end # class ClubHistoryIndex
|
132
|
+
|
133
|
+
end # module Import
|
134
|
+
end # module SportDb
|