sportdb-readers 0.2.2 → 0.2.3
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 +4 -4
- data/lib/sportdb/readers.rb +14 -12
- data/lib/sportdb/readers/conf_linter.rb +6 -36
- data/lib/sportdb/readers/conf_reader.rb +5 -35
- data/lib/sportdb/readers/league_outline_reader.rb +31 -2
- data/lib/sportdb/readers/match_linter.rb +5 -5
- data/lib/sportdb/readers/match_reader.rb +4 -4
- data/lib/sportdb/readers/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a80a58bb3ddb33bdba8040a926546b548ba5436
|
4
|
+
data.tar.gz: 608847551d5a437ab847e91aa79ea82626d010cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc388f76b6b1ec3ca85ea4bea73ace80f13af88ef05eb7601b04176aeca742c35e828ee1fa6d5ca674d6a71789007f5b785185e8b241db4ee14e89218ff624ca
|
7
|
+
data.tar.gz: aa7ed9979898a56656f16d9093687b3d4c7a1590add76d4d5a866966e5bd2169e545fabcbc0fdc11f7c79b2ac8677667c9ca52d7a57e0dfb23963becbaa2d71f
|
data/lib/sportdb/readers.rb
CHANGED
@@ -22,20 +22,22 @@ require 'sportdb/readers/match_linter'
|
|
22
22
|
## add convenience shortcut helpers
|
23
23
|
module SportDb
|
24
24
|
|
25
|
-
def self.read_conf( path, sync: true ) ## note: sync is dry run (for lint checking)
|
26
|
-
sync ?
|
25
|
+
def self.read_conf( path, sync: true, season: nil ) ## note: sync is dry run (for lint checking)
|
26
|
+
sync ? ConfReaderV2.read( path, season: season )
|
27
|
+
: ConfLinter.read( path, season: season )
|
27
28
|
end
|
28
29
|
|
29
30
|
### todo: add alias read_matches - why? why not?
|
30
|
-
def self.read_match( path, sync: true ) ## note: sync is dry run (for lint checking)
|
31
|
-
sync ?
|
31
|
+
def self.read_match( path, sync: true, season: nil ) ## note: sync is dry run (for lint checking)
|
32
|
+
sync ? MatchReaderV2.read( path, season: season )
|
33
|
+
: MatchLinter.read( path, season: season )
|
32
34
|
end
|
33
35
|
|
34
|
-
def self.lint_conf( path ) read_conf( path, sync: false ); end
|
35
|
-
def self.lint_match( path ) read_match( path, sync: false ); end
|
36
|
+
def self.lint_conf( path, season: nil ) read_conf( path, sync: false, season: season ); end
|
37
|
+
def self.lint_match( path, season: nil ) read_match( path, sync: false, season: season ); end
|
36
38
|
|
37
39
|
|
38
|
-
def self.read( path, sync: true )
|
40
|
+
def self.read( path, sync: true, season: nil )
|
39
41
|
## step 1: collect all datafiles
|
40
42
|
if File.directory?( path ) ## if directory read complete package
|
41
43
|
datafiles_conf = Datafile.find_conf( path )
|
@@ -43,19 +45,19 @@ module SportDb
|
|
43
45
|
/[a-z0-9_-]+\.txt$ ## txt e.g /1-premierleague.txt
|
44
46
|
}x )
|
45
47
|
|
46
|
-
datafiles_conf.each { |datafile| read_conf( datafile, sync: sync ) }
|
47
|
-
datafiles.each { |datafile| read_match( datafile, sync: sync ) }
|
48
|
+
datafiles_conf.each { |datafile| read_conf( datafile, sync: sync, season: season ) }
|
49
|
+
datafiles.each { |datafile| read_match( datafile, sync: sync, season: season ) }
|
48
50
|
else
|
49
51
|
## check if datafile matches conf(iguration) naming (e.g. .conf.txt)
|
50
52
|
if Datafile.match_conf( path )
|
51
|
-
read_conf( path, sync: sync )
|
53
|
+
read_conf( path, sync: sync, season: season )
|
52
54
|
else ## assume "regular" match datafile
|
53
|
-
read_match( path, sync: sync )
|
55
|
+
read_match( path, sync: sync, season: season )
|
54
56
|
end
|
55
57
|
end
|
56
58
|
end # method read
|
57
59
|
|
58
|
-
def self.lint( path ) read( path, sync: false ); end
|
60
|
+
def self.lint( path, season: nil ) read( path, sync: false, season: season ); end
|
59
61
|
|
60
62
|
end # module SportDb
|
61
63
|
|
@@ -8,16 +8,16 @@ class ConfLinter
|
|
8
8
|
def self.config() Import.config; end ## shortcut convenience helper
|
9
9
|
|
10
10
|
|
11
|
-
def self.read( path ) ## use - rename to read_file or from_file etc. - why? why not?
|
11
|
+
def self.read( path, season: nil ) ## use - rename to read_file or from_file etc. - why? why not?
|
12
12
|
puts "reading conf(iguration) datafile >#{path}<..."
|
13
13
|
txt = File.open( path, 'r:utf-8' ).read
|
14
|
-
parse( txt )
|
14
|
+
parse( txt, season: season )
|
15
15
|
end
|
16
16
|
|
17
|
-
def self.parse( txt )
|
18
|
-
recs = LeagueOutlineReader.parse( txt )
|
17
|
+
def self.parse( txt, season: nil )
|
18
|
+
recs = LeagueOutlineReader.parse( txt, season: season )
|
19
19
|
|
20
|
-
if recs.empty?
|
20
|
+
if recs.empty? ## todo: check for season filter - why? why not?
|
21
21
|
puts " ** !!! WARN !!! - no league headings found"
|
22
22
|
else
|
23
23
|
puts " found #{recs.size} league (+season+stage) headings"
|
@@ -59,7 +59,7 @@ class ConfLinter
|
|
59
59
|
name = line
|
60
60
|
end
|
61
61
|
|
62
|
-
clubs <<
|
62
|
+
clubs << config.clubs.find_by!( name: name, country: league.country )
|
63
63
|
end
|
64
64
|
|
65
65
|
rec[:clubs] = clubs
|
@@ -69,35 +69,5 @@ class ConfLinter
|
|
69
69
|
recs
|
70
70
|
end # method read
|
71
71
|
|
72
|
-
|
73
|
-
### todo/fix: move to clubs for sharing!!!!!!! use clubs.find_by!( name:, country: )
|
74
|
-
def self.find_club( name, country ) ## todo/fix: add international or league flag?
|
75
|
-
club = nil
|
76
|
-
m = config.clubs.match_by( name: name, country: country )
|
77
|
-
|
78
|
-
if m.nil?
|
79
|
-
## (re)try with second country - quick hacks for known leagues
|
80
|
-
## todo/fix: add league flag to activate!!!
|
81
|
-
m = config.clubs.match_by( name: name, country: config.countries['wal']) if country.key == 'eng'
|
82
|
-
m = config.clubs.match_by( name: name, country: config.countries['nir']) if country.key == 'ie'
|
83
|
-
m = config.clubs.match_by( name: name, country: config.countries['mc']) if country.key == 'fr'
|
84
|
-
m = config.clubs.match_by( name: name, country: config.countries['li']) if country.key == 'ch'
|
85
|
-
m = config.clubs.match_by( name: name, country: config.countries['ca']) if country.key == 'us'
|
86
|
-
end
|
87
|
-
|
88
|
-
if m.nil?
|
89
|
-
puts "** !!! ERROR !!! no match for club >#{name}<"
|
90
|
-
exit 1
|
91
|
-
elsif m.size > 1
|
92
|
-
puts "** !!! ERROR !!! too many matches (#{m.size}) for club >#{name}<:"
|
93
|
-
pp m
|
94
|
-
exit 1
|
95
|
-
else # bingo; match - assume size == 1
|
96
|
-
club = m[0]
|
97
|
-
end
|
98
|
-
|
99
|
-
club
|
100
|
-
end
|
101
|
-
|
102
72
|
end # class ConfLinter
|
103
73
|
end # module SportDb
|
@@ -8,13 +8,13 @@ class ConfReaderV2 ## todo/check: rename to EventsReaderV2 (use plural?) why?
|
|
8
8
|
def self.config() Import.config; end ## shortcut convenience helper
|
9
9
|
|
10
10
|
|
11
|
-
def self.read( path ) ## use - rename to read_file or from_file etc. - why? why not?
|
11
|
+
def self.read( path, season: nil ) ## use - rename to read_file or from_file etc. - why? why not?
|
12
12
|
txt = File.open( path, 'r:utf-8' ).read
|
13
|
-
parse( txt )
|
13
|
+
parse( txt, season: season )
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.parse( txt )
|
17
|
-
recs = LeagueOutlineReader.parse( txt )
|
16
|
+
def self.parse( txt, season: nil )
|
17
|
+
recs = LeagueOutlineReader.parse( txt, season: season )
|
18
18
|
pp recs
|
19
19
|
|
20
20
|
## pass 2 - check & map; replace inline (string with record)
|
@@ -47,7 +47,7 @@ class ConfReaderV2 ## todo/check: rename to EventsReaderV2 (use plural?) why?
|
|
47
47
|
name = line
|
48
48
|
end
|
49
49
|
|
50
|
-
clubs <<
|
50
|
+
clubs << config.clubs.find_by( name: name, country: league.country )
|
51
51
|
end
|
52
52
|
|
53
53
|
rec[:clubs] = clubs
|
@@ -84,35 +84,5 @@ class ConfReaderV2 ## todo/check: rename to EventsReaderV2 (use plural?) why?
|
|
84
84
|
recs
|
85
85
|
end # method read
|
86
86
|
|
87
|
-
|
88
|
-
|
89
|
-
def self.find_club( name, country ) ## todo/fix: add international or league flag?
|
90
|
-
club = nil
|
91
|
-
m = config.clubs.match_by( name: name, country: country )
|
92
|
-
|
93
|
-
if m.nil?
|
94
|
-
## (re)try with second country - quick hacks for known leagues
|
95
|
-
## todo/fix: add league flag to activate!!!
|
96
|
-
m = config.clubs.match_by( name: name, country: config.countries['wal']) if country.key == 'eng'
|
97
|
-
m = config.clubs.match_by( name: name, country: config.countries['nir']) if country.key == 'ie'
|
98
|
-
m = config.clubs.match_by( name: name, country: config.countries['mc']) if country.key == 'fr'
|
99
|
-
m = config.clubs.match_by( name: name, country: config.countries['li']) if country.key == 'ch'
|
100
|
-
m = config.clubs.match_by( name: name, country: config.countries['ca']) if country.key == 'us'
|
101
|
-
end
|
102
|
-
|
103
|
-
if m.nil?
|
104
|
-
puts "** !!! ERROR !!! no match for club >#{name}<"
|
105
|
-
exit 1
|
106
|
-
elsif m.size > 1
|
107
|
-
puts "** !!! ERROR !!! too many matches (#{m.size}) for club >#{name}<:"
|
108
|
-
pp m
|
109
|
-
exit 1
|
110
|
-
else # bingo; match - assume size == 1
|
111
|
-
club = m[0]
|
112
|
-
end
|
113
|
-
|
114
|
-
club
|
115
|
-
end
|
116
|
-
|
117
87
|
end # class ConfReaderV2
|
118
88
|
end # module SportDb
|
@@ -21,7 +21,8 @@ class LeagueOutlineReader
|
|
21
21
|
)
|
22
22
|
$/x
|
23
23
|
|
24
|
-
|
24
|
+
|
25
|
+
def self.parse( txt, season: nil )
|
25
26
|
recs=[]
|
26
27
|
OutlineReader.parse( txt ).each do |node|
|
27
28
|
if node[0] == :h1
|
@@ -56,7 +57,22 @@ class LeagueOutlineReader
|
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
59
|
-
|
60
|
+
|
61
|
+
## pass 2 - filter seasons if filter present
|
62
|
+
if season
|
63
|
+
filtered_recs = []
|
64
|
+
filter = normalize_seasons( season )
|
65
|
+
recs.each do |rec|
|
66
|
+
if filter.include?( SeasonUtils.key( rec[:season] ))
|
67
|
+
filtered_recs << rec
|
68
|
+
else
|
69
|
+
puts " skipping season >#{rec[:season]}< NOT matched by filter"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
recs = filtered_recs
|
73
|
+
end
|
74
|
+
|
75
|
+
## pass 3 - check & map; replace inline (string with data record)
|
60
76
|
recs.each do |rec|
|
61
77
|
league = find_league( rec[:league] )
|
62
78
|
rec[:league] = league
|
@@ -68,6 +84,18 @@ class LeagueOutlineReader
|
|
68
84
|
end # method parse
|
69
85
|
|
70
86
|
|
87
|
+
|
88
|
+
def self.normalize_seasons( season_or_seasons ) ## todo/check: add alias norm_seasons - why? why not?
|
89
|
+
seasons = if season_or_seasons.is_a? String ## wrap in array
|
90
|
+
[season_or_seasons]
|
91
|
+
else ## assume it's an array already
|
92
|
+
season_or_seasons
|
93
|
+
end
|
94
|
+
|
95
|
+
seasons.map { |season| SeasonUtils.key( season ) }
|
96
|
+
end
|
97
|
+
|
98
|
+
|
71
99
|
def self.split_league( str ) ## todo/check: rename to parse_league(s) - why? why not?
|
72
100
|
## split into league / stage / ... e.g.
|
73
101
|
## => Österr. Bundesliga 2018/19, Regular Season
|
@@ -94,6 +122,7 @@ class LeagueOutlineReader
|
|
94
122
|
end
|
95
123
|
|
96
124
|
|
125
|
+
### fix/todo: move find_league to sportdb-league index use find_by! and find_by !!!!
|
97
126
|
def self.find_league( name )
|
98
127
|
league = nil
|
99
128
|
m = config.leagues.match( name )
|
@@ -4,16 +4,16 @@ module SportDb
|
|
4
4
|
|
5
5
|
class MatchLinter
|
6
6
|
|
7
|
-
def self.read( path ) ## use - rename to read_file or from_file etc. - why? why not?
|
7
|
+
def self.read( path, season: nil ) ## use - rename to read_file or from_file etc. - why? why not?
|
8
8
|
puts "reading match datafile >#{path}<..."
|
9
9
|
txt = File.open( path, 'r:utf-8' ).read
|
10
|
-
parse( txt )
|
10
|
+
parse( txt, season: season )
|
11
11
|
end
|
12
12
|
|
13
|
-
def self.parse( txt )
|
14
|
-
recs = LeagueOutlineReader.parse( txt )
|
13
|
+
def self.parse( txt, season: nil )
|
14
|
+
recs = LeagueOutlineReader.parse( txt, season: season )
|
15
15
|
|
16
|
-
if recs.empty?
|
16
|
+
if recs.empty? ## todo - check for filter - why? why not?
|
17
17
|
puts " ** !!! WARN !!! - no league headings found"
|
18
18
|
else
|
19
19
|
puts " found #{recs.size} league (+season+stage) headings"
|
@@ -4,13 +4,13 @@ module SportDb
|
|
4
4
|
|
5
5
|
class MatchReaderV2 ## todo/check: rename to MatchReaderV2 (use plural?) why? why not?
|
6
6
|
|
7
|
-
def self.read( path ) ## use - rename to read_file or from_file etc. - why? why not?
|
7
|
+
def self.read( path, season: nil ) ## use - rename to read_file or from_file etc. - why? why not?
|
8
8
|
txt = File.open( path, 'r:utf-8' ).read
|
9
|
-
parse( txt )
|
9
|
+
parse( txt, season: season )
|
10
10
|
end
|
11
11
|
|
12
|
-
def self.parse( txt )
|
13
|
-
recs = LeagueOutlineReader.parse( txt )
|
12
|
+
def self.parse( txt, season: nil )
|
13
|
+
recs = LeagueOutlineReader.parse( txt, season: season )
|
14
14
|
pp recs
|
15
15
|
|
16
16
|
recs.each do |rec|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sportdb-readers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
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-11-
|
11
|
+
date: 2019-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sportdb-config
|