sportdb-readers 0.3.1 → 0.3.2
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/Manifest.txt +2 -0
- data/lib/sportdb/readers.rb +1 -0
- data/lib/sportdb/readers/club_props_reader.rb +70 -0
- data/lib/sportdb/readers/datafile.rb +16 -0
- data/lib/sportdb/readers/version.rb +1 -1
- data/test/test_props.rb +47 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbf4efcbeb2e1af833862fa9654f7832552082d3
|
4
|
+
data.tar.gz: 108ddbf3e0951307fc5ad1c3c36a9b11e00c16cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 720dcb7703b7687eeae81485ee95a702c9ac433d468ba9bba8ab04a3dc0417e97d9a72fc6b862fca4f5e9a29b228ab2310cc1f2a8cbddb215e168e06f6c1a818
|
7
|
+
data.tar.gz: 193d88f88d0404499f5a2f18c5034fabec41d977a1864936edc46f26b3260552fa44028cd8134940acb4dc912a12a2f47aba8f84642c730ce2ebdd790cd04583
|
data/Manifest.txt
CHANGED
@@ -3,6 +3,7 @@ Manifest.txt
|
|
3
3
|
README.md
|
4
4
|
Rakefile
|
5
5
|
lib/sportdb/readers.rb
|
6
|
+
lib/sportdb/readers/club_props_reader.rb
|
6
7
|
lib/sportdb/readers/conf_linter.rb
|
7
8
|
lib/sportdb/readers/conf_reader.rb
|
8
9
|
lib/sportdb/readers/datafile.rb
|
@@ -14,5 +15,6 @@ lib/sportdb/readers/version.rb
|
|
14
15
|
test/helper.rb
|
15
16
|
test/test_match_parser.rb
|
16
17
|
test/test_package.rb
|
18
|
+
test/test_props.rb
|
17
19
|
test/test_read.rb
|
18
20
|
test/test_reader.rb
|
data/lib/sportdb/readers.rb
CHANGED
@@ -0,0 +1,70 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module SportDb
|
5
|
+
module Import
|
6
|
+
|
7
|
+
|
8
|
+
class ClubPropsReader
|
9
|
+
|
10
|
+
def self.config() Import.config; end ## shortcut convenience helper
|
11
|
+
|
12
|
+
def self.read( path ) ## use - rename to read_file or from_file etc. - why? why not?
|
13
|
+
txt = File.open( path, 'r:utf-8' ).read
|
14
|
+
parse( txt )
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.parse( txt )
|
18
|
+
recs = parse_csv( txt )
|
19
|
+
recs.each do |rec|
|
20
|
+
name = rec[:name]
|
21
|
+
if name.nil?
|
22
|
+
puts "** !!! ERROR !!! Name column required / missing / NOT found in row:"
|
23
|
+
pp rec
|
24
|
+
exit 1
|
25
|
+
end
|
26
|
+
|
27
|
+
## find / match club by (canocial) name
|
28
|
+
m = config.clubs.match( name )
|
29
|
+
if m && m.size > 1
|
30
|
+
puts "** !!! WARN !!! ambigious (multiple) club matches (#{m.size}) for name >#{name}< in props row:"
|
31
|
+
pp rec
|
32
|
+
pp m
|
33
|
+
|
34
|
+
## todo/fix: try filter by canonical name if more than one match
|
35
|
+
m = m.select { |club| club.name == name }
|
36
|
+
m = nil if m.empty? ## note: reset to nil if no more matches
|
37
|
+
end
|
38
|
+
|
39
|
+
if m.nil?
|
40
|
+
puts "** !!! ERROR !!! no club match for (canonical) name >#{name}< in props row:"
|
41
|
+
pp rec
|
42
|
+
exit 1
|
43
|
+
elsif m.size > 1
|
44
|
+
puts "** !!! ERROR !!! ambigious (multiple) club matches (#{m.size}) for (canonical) name >#{name}< in props row:"
|
45
|
+
pp rec
|
46
|
+
pp m
|
47
|
+
exit 1
|
48
|
+
else ## assume size == 1, bingo!!!
|
49
|
+
club_rec = m[0]
|
50
|
+
## todo/fix: warn if name differes from (canonical) name
|
51
|
+
## todo/fix: also add props to in-memory structs/records!!!
|
52
|
+
## todo/fix: only updated "on-demand" from in-memory struct/records!!!!
|
53
|
+
|
54
|
+
## update database
|
55
|
+
club = Sync::Club.find_or_create( club_rec )
|
56
|
+
## update attributes
|
57
|
+
attributes = {}
|
58
|
+
attributes[:key] = rec[:key] if rec[:key]
|
59
|
+
attributes[:code] = rec[:code] if rec[:code]
|
60
|
+
|
61
|
+
club.attributes = attributes
|
62
|
+
club.save!
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end # method parse
|
66
|
+
|
67
|
+
end # class ClubPropsReader
|
68
|
+
|
69
|
+
end ## module Import
|
70
|
+
end ## module SportDb
|
@@ -12,6 +12,12 @@ module Datafile
|
|
12
12
|
/[a-z0-9_-]+\.txt$ ## txt e.g /1-premierleague.txt
|
13
13
|
}x
|
14
14
|
|
15
|
+
CLUBS_PROPS_RE = %r{ (?:^|/) # beginning (^) or beginning of path (/)
|
16
|
+
(?:[a-z]{1,4}\.)? # optional country code/key e.g. eng.clubs.props.txt
|
17
|
+
clubs\.props\.txt$
|
18
|
+
}x
|
19
|
+
def self.match_clubs_props( path, pattern: CLUBS_PROPS_RE ) pattern.match( path ); end
|
20
|
+
|
15
21
|
ZIP_RE = %r{ \.zip$
|
16
22
|
}x
|
17
23
|
def self.match_zip( path, pattern: ZIP_RE ) pattern.match( path ); end
|
@@ -26,6 +32,14 @@ class PackageBase
|
|
26
32
|
def each_match( &blk ) each( pattern: MATCH_RE, &blk ); end
|
27
33
|
|
28
34
|
|
35
|
+
|
36
|
+
def read_clubs_props
|
37
|
+
each_read( pattern: CLUBS_PROPS_RE ) do |name, txt|
|
38
|
+
## todo/fix: add/use SportDb.parse_club_props helper !!!!!!
|
39
|
+
SportDb::Import::ClubPropsReader.parse( txt )
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
29
43
|
def read_conf( *names,
|
30
44
|
season: nil, sync: true )
|
31
45
|
if names.empty? ## no (entry) names passed in; read in all
|
@@ -58,11 +72,13 @@ class PackageBase
|
|
58
72
|
def read( *names,
|
59
73
|
season: nil, sync: true )
|
60
74
|
if names.empty? ## read all datafiles
|
75
|
+
read_clubs_props() if sync
|
61
76
|
read_conf( season: season, sync: sync )
|
62
77
|
read_match( season: season, sync: sync )
|
63
78
|
else
|
64
79
|
names.each do |name|
|
65
80
|
txt = read_entry( name )
|
81
|
+
## fix/todo: add read_clubs_props too!!!
|
66
82
|
if Datafile.match_conf( name ) ## check if datafile matches conf(iguration) naming (e.g. .conf.txt)
|
67
83
|
SportDb.parse_conf( txt, season: season, sync: sync )
|
68
84
|
else ## assume "regular" match datafile
|
data/test/test_props.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_props.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
class TestProps < MiniTest::Test
|
11
|
+
|
12
|
+
ENG_CLUBS_PROPS_TXT =<<TXT
|
13
|
+
####################################
|
14
|
+
# English League Teams
|
15
|
+
#
|
16
|
+
# note: three letter codes (tags) taken from official premierleague.com site
|
17
|
+
|
18
|
+
Key, Name, Code
|
19
|
+
chelsea, Chelsea FC, CHE
|
20
|
+
arsenal, Arsenal FC, ARS
|
21
|
+
tottenham, Tottenham Hotspur, TOT
|
22
|
+
westham, West Ham United, WHU
|
23
|
+
crystalpalace, Crystal Palace, CRY
|
24
|
+
manutd, Manchester United, MUN
|
25
|
+
mancity, Manchester City, MCI
|
26
|
+
TXT
|
27
|
+
|
28
|
+
def test_parse_csv
|
29
|
+
recs = parse_csv( ENG_CLUBS_PROPS_TXT )
|
30
|
+
pp recs
|
31
|
+
|
32
|
+
assert_equal [{ key: 'chelsea', name: 'Chelsea FC', code: 'CHE' },
|
33
|
+
{ key: 'arsenal', name: 'Arsenal FC', code: 'ARS' }], recs[0..1]
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def test_parse
|
38
|
+
SportDb.connect( adapter: 'sqlite3', database: ':memory:' )
|
39
|
+
SportDb.create_all ## build schema
|
40
|
+
|
41
|
+
## turn on logging to console
|
42
|
+
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
43
|
+
|
44
|
+
SportDb::Import::ClubPropsReader.parse( ENG_CLUBS_PROPS_TXT )
|
45
|
+
end # method test_parse
|
46
|
+
|
47
|
+
end # class TestProps
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sportdb-readers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- README.md
|
96
96
|
- Rakefile
|
97
97
|
- lib/sportdb/readers.rb
|
98
|
+
- lib/sportdb/readers/club_props_reader.rb
|
98
99
|
- lib/sportdb/readers/conf_linter.rb
|
99
100
|
- lib/sportdb/readers/conf_reader.rb
|
100
101
|
- lib/sportdb/readers/datafile.rb
|
@@ -106,6 +107,7 @@ files:
|
|
106
107
|
- test/helper.rb
|
107
108
|
- test/test_match_parser.rb
|
108
109
|
- test/test_package.rb
|
110
|
+
- test/test_props.rb
|
109
111
|
- test/test_read.rb
|
110
112
|
- test/test_reader.rb
|
111
113
|
homepage: https://github.com/sportdb/sport.db
|