sportdb-formats 1.1.6 → 1.2.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 +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
data/lib/sportdb/formats.rb
CHANGED
@@ -9,15 +9,49 @@ require 'zip' ## todo/check: if zip is alreay included in a required module
|
|
9
9
|
|
10
10
|
###
|
11
11
|
# our own code
|
12
|
-
|
12
|
+
require_relative 'formats/version' # let version always go first
|
13
|
+
|
14
|
+
require_relative 'formats/outline_reader'
|
15
|
+
require_relative 'formats/datafile'
|
16
|
+
require_relative 'formats/datafile_package'
|
17
|
+
require_relative 'formats/package'
|
18
|
+
|
19
|
+
|
20
|
+
require_relative 'formats/parser_helper'
|
21
|
+
|
22
|
+
require_relative 'formats/lines_reader'
|
23
|
+
|
24
|
+
|
25
|
+
###
|
26
|
+
# define search services apis (move to its own gem later - why? why not?)
|
27
|
+
|
28
|
+
module SportDb
|
29
|
+
module Import
|
30
|
+
|
31
|
+
class Configuration
|
32
|
+
## note: add more configs (open class), see sportdb-structs for original config!!!
|
33
|
+
|
34
|
+
## add
|
35
|
+
def world() @world ||= WorldSearch.new( countries: DummyCountrySearch.new ); end
|
36
|
+
def world=(world) @world = world; end
|
37
|
+
|
38
|
+
## tood/fix - add/move catalog here from sportdb-catalogs!!!
|
39
|
+
## def catalog() @catalog ||= Catalog.new; end
|
40
|
+
## def catalog(catalog) @catalog = catalog; end
|
41
|
+
end # class Configuration
|
42
|
+
|
43
|
+
## e.g. use config.catalog -- keep Import.catalog as a shortcut (for "read-only" access)
|
44
|
+
## def self.catalog() config.catalog; end
|
45
|
+
def self.world() config.world; end
|
46
|
+
end # module Import
|
47
|
+
end # module SportDb
|
48
|
+
|
49
|
+
require_relative 'formats/search/world'
|
50
|
+
require_relative 'formats/search/sport'
|
51
|
+
|
13
52
|
|
14
|
-
require 'sportdb/formats/outline_reader'
|
15
|
-
require 'sportdb/formats/datafile'
|
16
|
-
require 'sportdb/formats/datafile_package'
|
17
|
-
require 'sportdb/formats/package'
|
18
53
|
|
19
54
|
|
20
|
-
require 'sportdb/formats/parser_helper'
|
21
55
|
|
22
56
|
|
23
57
|
module SportDb
|
@@ -39,7 +73,11 @@ module SportDb
|
|
39
73
|
Standings = ::Sports::Standings
|
40
74
|
TeamUsage = ::Sports::TeamUsage
|
41
75
|
|
76
|
+
Ground = ::Sports::Ground
|
77
|
+
|
78
|
+
Player = ::Sports::Player
|
42
79
|
|
80
|
+
|
43
81
|
class Team
|
44
82
|
## add convenience lookup helper / method for name by season for now
|
45
83
|
## use clubs history - for now kept separate from struct - why? why not?
|
@@ -53,20 +91,19 @@ module SportDb
|
|
53
91
|
end # module SportDb
|
54
92
|
|
55
93
|
|
56
|
-
|
94
|
+
require_relative 'formats/goals'
|
57
95
|
|
58
96
|
|
59
97
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
98
|
+
require_relative 'formats/match/mapper'
|
99
|
+
require_relative 'formats/match/mapper_teams'
|
100
|
+
require_relative 'formats/match/match_parser'
|
101
|
+
require_relative 'formats/match/match_parser_auto_conf'
|
102
|
+
require_relative 'formats/match/conf_parser'
|
65
103
|
|
66
104
|
|
67
105
|
|
68
|
-
|
69
|
-
require 'sportdb/formats/country/country_index'
|
106
|
+
require_relative 'formats/country/country_reader'
|
70
107
|
|
71
108
|
|
72
109
|
## add convenience helper
|
@@ -80,9 +117,8 @@ end # module Import
|
|
80
117
|
end # module SportDb
|
81
118
|
|
82
119
|
|
83
|
-
|
84
|
-
|
85
|
-
require 'sportdb/formats/league/league_outline_reader'
|
120
|
+
require_relative 'formats/league/league_reader'
|
121
|
+
require_relative 'formats/league/league_outline_reader'
|
86
122
|
|
87
123
|
##
|
88
124
|
## add convenience helper / short-cuts
|
@@ -96,15 +132,12 @@ end # module Import
|
|
96
132
|
end # module SportDb
|
97
133
|
|
98
134
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
require 'sportdb/formats/team/wiki_reader'
|
103
|
-
require 'sportdb/formats/team/national_team_index'
|
104
|
-
require 'sportdb/formats/team/team_index'
|
135
|
+
require_relative 'formats/team/club_reader'
|
136
|
+
require_relative 'formats/team/club_reader_props'
|
137
|
+
require_relative 'formats/team/wiki_reader'
|
105
138
|
|
106
|
-
|
107
|
-
|
139
|
+
require_relative 'formats/team/club_reader_history'
|
140
|
+
require_relative 'formats/team/club_index_history'
|
108
141
|
|
109
142
|
|
110
143
|
###
|
@@ -125,8 +158,7 @@ end # module Import
|
|
125
158
|
end # module SportDb
|
126
159
|
|
127
160
|
|
128
|
-
|
129
|
-
require 'sportdb/formats/event/event_index'
|
161
|
+
require_relative 'formats/event/event_reader'
|
130
162
|
|
131
163
|
## add convenience helper
|
132
164
|
module SportDb
|
@@ -140,6 +172,7 @@ end # module SportDb
|
|
140
172
|
|
141
173
|
|
142
174
|
|
175
|
+
require_relative 'formats/ground/ground_reader'
|
143
176
|
|
144
177
|
|
145
178
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sportdb-formats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sportdb-structs
|
@@ -64,16 +64,16 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
67
|
+
version: '4.1'
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
74
|
+
version: '4.1'
|
75
75
|
description: sportdb-formats - sport.db format and text utilities
|
76
|
-
email:
|
76
|
+
email: gerald.bauer@gmail.com
|
77
77
|
executables: []
|
78
78
|
extensions: []
|
79
79
|
extra_rdoc_files:
|
@@ -86,16 +86,15 @@ files:
|
|
86
86
|
- README.md
|
87
87
|
- Rakefile
|
88
88
|
- lib/sportdb/formats.rb
|
89
|
-
- lib/sportdb/formats/country/country_index.rb
|
90
89
|
- lib/sportdb/formats/country/country_reader.rb
|
91
90
|
- lib/sportdb/formats/datafile.rb
|
92
91
|
- lib/sportdb/formats/datafile_package.rb
|
93
|
-
- lib/sportdb/formats/event/event_index.rb
|
94
92
|
- lib/sportdb/formats/event/event_reader.rb
|
95
93
|
- lib/sportdb/formats/goals.rb
|
96
|
-
- lib/sportdb/formats/
|
94
|
+
- lib/sportdb/formats/ground/ground_reader.rb
|
97
95
|
- lib/sportdb/formats/league/league_outline_reader.rb
|
98
96
|
- lib/sportdb/formats/league/league_reader.rb
|
97
|
+
- lib/sportdb/formats/lines_reader.rb
|
99
98
|
- lib/sportdb/formats/match/conf_parser.rb
|
100
99
|
- lib/sportdb/formats/match/mapper.rb
|
101
100
|
- lib/sportdb/formats/match/mapper_teams.rb
|
@@ -104,39 +103,19 @@ files:
|
|
104
103
|
- lib/sportdb/formats/outline_reader.rb
|
105
104
|
- lib/sportdb/formats/package.rb
|
106
105
|
- lib/sportdb/formats/parser_helper.rb
|
107
|
-
- lib/sportdb/formats/
|
106
|
+
- lib/sportdb/formats/search/sport.rb
|
107
|
+
- lib/sportdb/formats/search/world.rb
|
108
108
|
- lib/sportdb/formats/team/club_index_history.rb
|
109
109
|
- lib/sportdb/formats/team/club_reader.rb
|
110
110
|
- lib/sportdb/formats/team/club_reader_history.rb
|
111
111
|
- lib/sportdb/formats/team/club_reader_props.rb
|
112
|
-
- lib/sportdb/formats/team/national_team_index.rb
|
113
|
-
- lib/sportdb/formats/team/team_index.rb
|
114
112
|
- lib/sportdb/formats/team/wiki_reader.rb
|
115
113
|
- lib/sportdb/formats/version.rb
|
116
|
-
- test/helper.rb
|
117
|
-
- test/test_club_index.rb
|
118
|
-
- test/test_club_index_history.rb
|
119
|
-
- test/test_club_reader.rb
|
120
|
-
- test/test_club_reader_history.rb
|
121
|
-
- test/test_club_reader_props.rb
|
122
|
-
- test/test_country_index.rb
|
123
|
-
- test/test_country_reader.rb
|
124
|
-
- test/test_datafile.rb
|
125
|
-
- test/test_datafile_package.rb
|
126
|
-
- test/test_goals.rb
|
127
|
-
- test/test_league_index.rb
|
128
|
-
- test/test_league_outline_reader.rb
|
129
|
-
- test/test_league_reader.rb
|
130
|
-
- test/test_outline_reader.rb
|
131
|
-
- test/test_package.rb
|
132
|
-
- test/test_package_match.rb
|
133
|
-
- test/test_regex.rb
|
134
|
-
- test/test_wiki_reader.rb
|
135
114
|
homepage: https://github.com/sportdb/sport.db
|
136
115
|
licenses:
|
137
116
|
- Public Domain
|
138
117
|
metadata: {}
|
139
|
-
post_install_message:
|
118
|
+
post_install_message:
|
140
119
|
rdoc_options:
|
141
120
|
- "--main"
|
142
121
|
- README.md
|
@@ -153,9 +132,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
153
132
|
- !ruby/object:Gem::Version
|
154
133
|
version: '0'
|
155
134
|
requirements: []
|
156
|
-
|
157
|
-
|
158
|
-
signing_key:
|
135
|
+
rubygems_version: 3.4.10
|
136
|
+
signing_key:
|
159
137
|
specification_version: 4
|
160
138
|
summary: sportdb-formats - sport.db format and text utilities
|
161
139
|
test_files: []
|
@@ -1,192 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module SportDb
|
4
|
-
module Import
|
5
|
-
|
6
|
-
## built-in countries for (quick starter) auto-add
|
7
|
-
class CountryIndex
|
8
|
-
|
9
|
-
attr_reader :countries ## all country records
|
10
|
-
|
11
|
-
def initialize( recs )
|
12
|
-
@countries = []
|
13
|
-
@countries_by_code = {}
|
14
|
-
@countries_by_name = {}
|
15
|
-
|
16
|
-
add( recs )
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
## helpers from country - use a helper module for includes (share with clubs etc.) - why? why not?
|
21
|
-
include NameHelper
|
22
|
-
## incl. strip_year( name )
|
23
|
-
## has_year?( name)
|
24
|
-
## strip_lang( name )
|
25
|
-
## normalize( name )
|
26
|
-
|
27
|
-
|
28
|
-
def add( recs )
|
29
|
-
###########################################
|
30
|
-
## auto-fill countries
|
31
|
-
## pp recs
|
32
|
-
recs.each do |rec|
|
33
|
-
## rec e.g. { key:'af', code:'AFG', name:'Afghanistan'}
|
34
|
-
|
35
|
-
@countries << rec
|
36
|
-
|
37
|
-
## add codes lookups - key, code, ...
|
38
|
-
if @countries_by_code[ rec.key ]
|
39
|
-
puts "** !! ERROR !! country code (key) >#{rec.key}< already exits!!"
|
40
|
-
exit 1
|
41
|
-
else
|
42
|
-
@countries_by_code[ rec.key ] = rec
|
43
|
-
end
|
44
|
-
|
45
|
-
## add code (only) if different from key
|
46
|
-
if rec.key != rec.code.downcase
|
47
|
-
if @countries_by_code[ rec.code.downcase ]
|
48
|
-
puts "** !! ERROR !! country code >#{rec.code.downcase}< already exits!!"
|
49
|
-
exit 1
|
50
|
-
else
|
51
|
-
@countries_by_code[ rec.code.downcase ] = rec
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
|
56
|
-
## add all names (canonical name + alt names
|
57
|
-
names = [rec.name] + rec.alt_names
|
58
|
-
more_names = []
|
59
|
-
## check "hand-typed" names for year (auto-add)
|
60
|
-
## check for year(s) e.g. (1887-1911), (-2013),
|
61
|
-
## (1946-2001,2013-) etc.
|
62
|
-
names.each do |name|
|
63
|
-
if has_year?( name )
|
64
|
-
more_names << strip_year( name )
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
names += more_names
|
69
|
-
## check for duplicates - simple check for now - fix/improve
|
70
|
-
## todo/fix: (auto)remove duplicates - why? why not?
|
71
|
-
count = names.size
|
72
|
-
count_uniq = names.uniq.size
|
73
|
-
if count != count_uniq
|
74
|
-
puts "** !!! ERROR !!! - #{count-count_uniq} duplicate name(s):"
|
75
|
-
pp names
|
76
|
-
pp rec
|
77
|
-
exit 1
|
78
|
-
end
|
79
|
-
|
80
|
-
names.each_with_index do |name,i|
|
81
|
-
## check lang codes e.g. [en], [fr], etc.
|
82
|
-
## todo/check/fix: move strip_lang up in the chain - check for duplicates (e.g. only lang code marker different etc.) - why? why not?
|
83
|
-
name = strip_lang( name )
|
84
|
-
norm = normalize( name )
|
85
|
-
old_rec = @countries_by_name[ norm ]
|
86
|
-
if old_rec
|
87
|
-
## check if country name already is included or is new country rec
|
88
|
-
msg = "** !!! ERROR !!! - name conflict/duplicate - >#{name}< will overwrite >#{old_rec.name}< with >#{rec.name}<"
|
89
|
-
puts msg
|
90
|
-
exit 1
|
91
|
-
else
|
92
|
-
@countries_by_name[ norm ] = rec
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
end ## each record
|
97
|
-
end # method initialize
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
## fix/todo: add find_by (alias for find_by_name/find_by_code)
|
102
|
-
def find_by_code( code )
|
103
|
-
code = code.to_s.downcase ## allow symbols (and always downcase e.g. AUT to aut etc.)
|
104
|
-
@countries_by_code[ code ]
|
105
|
-
end
|
106
|
-
|
107
|
-
def find_by_name( name )
|
108
|
-
name = normalize( name.to_s ) ## allow symbols too (e.g. use to.s first)
|
109
|
-
@countries_by_name[ name ]
|
110
|
-
end
|
111
|
-
|
112
|
-
def find( key )
|
113
|
-
country = find_by_code( key )
|
114
|
-
country = find_by_name( key ) if country.nil? ## try lookup / find by (normalized) name
|
115
|
-
country
|
116
|
-
end
|
117
|
-
alias_method :[], :find
|
118
|
-
|
119
|
-
|
120
|
-
###
|
121
|
-
## split/parse country line
|
122
|
-
##
|
123
|
-
## split on bullet e.g.
|
124
|
-
## split into name and code with regex - make code optional
|
125
|
-
##
|
126
|
-
## Examples:
|
127
|
-
## Österreich • Austria (at)
|
128
|
-
## Österreich • Austria
|
129
|
-
## Austria
|
130
|
-
## Deutschland (de) • Germany
|
131
|
-
##
|
132
|
-
## todo/check: support more formats - why? why not?
|
133
|
-
## e.g. Austria, AUT (e.g. with comma - why? why not?)
|
134
|
-
def parse( line )
|
135
|
-
values = line.split( '•' ) ## use/support multi-lingual separator
|
136
|
-
country = nil
|
137
|
-
values.each do |value|
|
138
|
-
value = value.strip
|
139
|
-
## check for trailing country code e.g. (at), (eng), etc.
|
140
|
-
if value =~ /[ ]+\((?<code>[a-z]{1,4})\)$/ ## e.g. Austria (at)
|
141
|
-
code = $~[:code]
|
142
|
-
name = value[0...(value.size-code.size-2)].strip ## note: add -2 for brackets
|
143
|
-
candidates = [ find_by_code( code ), find_by_name( name ) ]
|
144
|
-
if candidates[0].nil?
|
145
|
-
puts "** !!! ERROR !!! country - unknown code >#{code}< in line: #{line}"
|
146
|
-
pp line
|
147
|
-
exit 1
|
148
|
-
end
|
149
|
-
if candidates[1].nil?
|
150
|
-
puts "** !!! ERROR !!! country - unknown name >#{code}< in line: #{line}"
|
151
|
-
pp line
|
152
|
-
exit 1
|
153
|
-
end
|
154
|
-
if candidates[0] != candidates[1]
|
155
|
-
puts "** !!! ERROR !!! country - name and code do NOT match the same country:"
|
156
|
-
pp line
|
157
|
-
pp candidates
|
158
|
-
exit 1
|
159
|
-
end
|
160
|
-
if country && country != candidates[0]
|
161
|
-
puts "** !!! ERROR !!! country - names do NOT match the same country:"
|
162
|
-
pp line
|
163
|
-
pp country
|
164
|
-
pp candidates
|
165
|
-
exit 1
|
166
|
-
end
|
167
|
-
country = candidates[0]
|
168
|
-
else
|
169
|
-
## just assume value is name or code
|
170
|
-
candidate = find( value )
|
171
|
-
if candidate.nil?
|
172
|
-
puts "** !!! ERROR !!! country - unknown name or code >#{value}< in line: #{line}"
|
173
|
-
pp line
|
174
|
-
exit 1
|
175
|
-
end
|
176
|
-
if country && country != candidate
|
177
|
-
puts "** !!! ERROR !!! country - names do NOT match the same country:"
|
178
|
-
pp line
|
179
|
-
pp country
|
180
|
-
pp candidate
|
181
|
-
exit 1
|
182
|
-
end
|
183
|
-
country = candidate
|
184
|
-
end
|
185
|
-
end
|
186
|
-
country
|
187
|
-
end # method parse
|
188
|
-
end # class CountryIndex
|
189
|
-
|
190
|
-
|
191
|
-
end # module Import
|
192
|
-
end # module SportDb
|
@@ -1,141 +0,0 @@
|
|
1
|
-
module SportDb
|
2
|
-
module Import
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
class EventIndex
|
7
|
-
|
8
|
-
def self.build( path )
|
9
|
-
pack = Package.new( path ) ## lets us use direcotry or zip archive
|
10
|
-
|
11
|
-
recs = []
|
12
|
-
pack.each_seasons do |entry|
|
13
|
-
recs += EventInfoReader.parse( entry.read )
|
14
|
-
end
|
15
|
-
recs
|
16
|
-
|
17
|
-
index = new
|
18
|
-
index.add( recs )
|
19
|
-
index
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
attr_reader :events
|
25
|
-
def initialize
|
26
|
-
@events = []
|
27
|
-
@leagues = {}
|
28
|
-
end
|
29
|
-
|
30
|
-
def add( recs )
|
31
|
-
@events += recs ## add to "linear" records
|
32
|
-
|
33
|
-
recs.each do |rec|
|
34
|
-
league = rec.league
|
35
|
-
season = rec.season
|
36
|
-
|
37
|
-
seasons = @leagues[ league.key ] ||= {}
|
38
|
-
seasons[season.key] = rec
|
39
|
-
end
|
40
|
-
## build search index by leagues (and season)
|
41
|
-
end
|
42
|
-
|
43
|
-
def find_by( league:, season: )
|
44
|
-
league_key = league.is_a?( String ) ? league : league.key
|
45
|
-
season_key = season.is_a?( String ) ? season : season.key
|
46
|
-
|
47
|
-
seasons = @leagues[ league_key ]
|
48
|
-
if seasons
|
49
|
-
seasons[ season_key ]
|
50
|
-
else
|
51
|
-
nil
|
52
|
-
end
|
53
|
-
end # method find_by
|
54
|
-
end ## class EventIndex
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
class SeasonIndex
|
59
|
-
def initialize( *args )
|
60
|
-
@leagues = {} ## use a league hash by years for now; change later
|
61
|
-
|
62
|
-
if args.size == 1 && args[0].is_a?( EventIndex )
|
63
|
-
## convenience setup/hookup
|
64
|
-
## (auto-)add all events from event index
|
65
|
-
add( args[0].events )
|
66
|
-
else
|
67
|
-
pp args
|
68
|
-
raise ArgumentError.new( 'unsupported arguments' )
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def add( recs )
|
73
|
-
## use a lookup index by year for now
|
74
|
-
## todo - find something better/more generic for searching/matching date periods!!!
|
75
|
-
recs.each do |rec|
|
76
|
-
league = rec.league
|
77
|
-
season = rec.season
|
78
|
-
|
79
|
-
years = @leagues[ league.key ] ||= {}
|
80
|
-
if season.year?
|
81
|
-
years[season.start_year] ||= []
|
82
|
-
years[season.start_year] << rec
|
83
|
-
else
|
84
|
-
years[season.start_year] ||= []
|
85
|
-
years[season.end_year] ||= []
|
86
|
-
years[season.start_year] << rec
|
87
|
-
years[season.end_year] << rec
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end # method add
|
91
|
-
|
92
|
-
def find_by( date:, league: )
|
93
|
-
date = Date.strptime( date, '%Y-%m-%d' ) if date.is_a?( String )
|
94
|
-
league_key = league.is_a?( String ) ? league : league.key
|
95
|
-
|
96
|
-
years = @leagues[ league_key ]
|
97
|
-
if years
|
98
|
-
year = years[ date.year ]
|
99
|
-
if year
|
100
|
-
season_key = nil
|
101
|
-
year.each do |event|
|
102
|
-
## todo/check: rename/use between? instead of include? - why? why not?
|
103
|
-
if event.include?( date )
|
104
|
-
season_key = event.season.key
|
105
|
-
break
|
106
|
-
end
|
107
|
-
end
|
108
|
-
if season_key.nil?
|
109
|
-
puts "!! WARN: date >#{date}< out-of-seasons for year #{date.year} in league #{league_key}:"
|
110
|
-
year.each do |event|
|
111
|
-
puts " #{event.season.key} | #{event.start_date} - #{event.end_date}"
|
112
|
-
end
|
113
|
-
## retry again and pick season with "overflow" at the end (date is great end_date)
|
114
|
-
year.each do |event|
|
115
|
-
if date > event.end_date
|
116
|
-
diff_in_days = date.to_date.jd - event.end_date.to_date.jd
|
117
|
-
puts " +#{diff_in_days} days - adding overflow to #{event.season.key} ending on #{event.end_date} ++ #{date}"
|
118
|
-
season_key = event.season.key
|
119
|
-
break
|
120
|
-
end
|
121
|
-
end
|
122
|
-
## exit now for sure - if still empty!!!!
|
123
|
-
if season_key.nil?
|
124
|
-
puts "!! ERROR: CANNOT auto-fix / (auto-)append date at the end of an event; check season setup - sorry"
|
125
|
-
exit 1
|
126
|
-
end
|
127
|
-
end
|
128
|
-
season_key
|
129
|
-
else
|
130
|
-
nil ## no year defined / found for league
|
131
|
-
end
|
132
|
-
else
|
133
|
-
nil ## no league defined / found
|
134
|
-
end
|
135
|
-
end # method find
|
136
|
-
|
137
|
-
end # class SeasonIndex
|
138
|
-
|
139
|
-
|
140
|
-
end # module Import
|
141
|
-
end # module SportDb
|