sportdb-readers 0.4.6 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b2ef30f6dc1204b1df60614e54b168559f825eea
4
- data.tar.gz: 3018c5e2286a33d4e61e52dec18c19d7fe270963
3
+ metadata.gz: 46dc2a6de0074a2c9a5f007503f99d34030e4c80
4
+ data.tar.gz: e5cd5ae577346962dcb69361a11504fbe7540a22
5
5
  SHA512:
6
- metadata.gz: 933b31be66b7b556d9f8704b413243d30106d199dd0338ecc8aa7beb86e2058b8498741d5ddb0266ab658597fbf11ff01c6a48a80dd77d06909af605c6c8810d
7
- data.tar.gz: 98519ae33ae7f29b24e7dcf99ad8dd5cc5ade378faac6ea1834bacc99491910634488f18f03f30a5f06b2a783ce679d418cc1974dee7ae3ed8d73c44336a1def
6
+ metadata.gz: 54a9a0865d2d8af5a405f0cb9a64eea7bc2e7f6ea7cae870dded60dd51f38301c4f40b494a5833330f248b4b556daf17e81984ba8243cef3f170dd838565ef92
7
+ data.tar.gz: ee0035b74ada7e5d829f6778421e0c7be57728ac78aaa167edcebe44f93280310df9b09c7906580c9dca3a8b9d8360f9baf50959bbe0469a5bd3560187ee5837
@@ -6,7 +6,6 @@ lib/sportdb/readers.rb
6
6
  lib/sportdb/readers/conf_linter.rb
7
7
  lib/sportdb/readers/conf_parser_auto.rb
8
8
  lib/sportdb/readers/conf_reader.rb
9
- lib/sportdb/readers/datafile.rb
10
9
  lib/sportdb/readers/league_outline_reader.rb
11
10
  lib/sportdb/readers/match_linter.rb
12
11
  lib/sportdb/readers/match_parser.rb
@@ -16,6 +15,5 @@ lib/sportdb/readers/version.rb
16
15
  test/helper.rb
17
16
  test/test_conf_parser_auto.rb
18
17
  test/test_match_parser.rb
19
- test/test_package.rb
20
18
  test/test_read.rb
21
19
  test/test_reader.rb
@@ -1,9 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'zip' ## todo/check: if zip is alreay included in a required module
4
- ## - move into sportdb-formats and add datafile!!!
5
-
6
-
7
3
 
8
4
  require 'sportdb/config'
9
5
  require 'sportdb/models' ## add sql database support
@@ -20,7 +16,6 @@ require 'sportdb/readers/conf_linter'
20
16
  require 'sportdb/readers/match_parser'
21
17
  require 'sportdb/readers/match_reader'
22
18
  require 'sportdb/readers/match_linter'
23
- require 'sportdb/readers/datafile'
24
19
  require 'sportdb/readers/package'
25
20
 
26
21
 
@@ -4,12 +4,14 @@ module SportDb
4
4
 
5
5
  CONF_RE = Datafile::CONF_RE
6
6
  CLUB_PROPS_RE = Datafile::CLUB_PROPS_RE
7
- LEAGUES_RE = Datafile::LEAGUES_REGEX ## todo/check: rename to _RE
8
- CLUBS_RE = Datafile::CLUBS_REGEX ## todo/check: rename to _RE
7
+ LEAGUES_RE = Datafile::LEAGUES_RE
8
+ CLUBS_RE = Datafile::CLUBS_RE
9
9
 
10
10
 
11
11
  ## note: if pattern includes directory add here (otherwise move to more "generic" datafile) - why? why not?
12
- MATCH_RE = %r{ /\d{4}-\d{2} ## season folder e.g. /2019-20
12
+ MATCH_RE = %r{ /(?: \d{4}-\d{2} ## season folder e.g. /2019-20
13
+ | \d{4} ## season year-only folder e.g. /2019
14
+ )
13
15
  /[a-z0-9_-]+\.txt$ ## txt e.g /1-premierleague.txt
14
16
  }x
15
17
 
@@ -6,7 +6,7 @@ module Readers
6
6
 
7
7
  MAJOR = 0 ## todo: namespace inside version or something - why? why not??
8
8
  MINOR = 4
9
- PATCH = 6
9
+ PATCH = 7
10
10
  VERSION = [MAJOR,MINOR,PATCH].join('.')
11
11
 
12
12
  def self.version
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.4.6
4
+ version: 0.4.7
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-12-28 00:00:00.000000000 Z
11
+ date: 2019-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sportdb-config
@@ -98,7 +98,6 @@ files:
98
98
  - lib/sportdb/readers/conf_linter.rb
99
99
  - lib/sportdb/readers/conf_parser_auto.rb
100
100
  - lib/sportdb/readers/conf_reader.rb
101
- - lib/sportdb/readers/datafile.rb
102
101
  - lib/sportdb/readers/league_outline_reader.rb
103
102
  - lib/sportdb/readers/match_linter.rb
104
103
  - lib/sportdb/readers/match_parser.rb
@@ -108,7 +107,6 @@ files:
108
107
  - test/helper.rb
109
108
  - test/test_conf_parser_auto.rb
110
109
  - test/test_match_parser.rb
111
- - test/test_package.rb
112
110
  - test/test_read.rb
113
111
  - test/test_reader.rb
114
112
  homepage: https://github.com/sportdb/sport.db
@@ -1,173 +0,0 @@
1
-
2
-
3
- module Datafile
4
-
5
-
6
- ## todo/fix: move regex patterns upstream to datafile in sportdb-formats!!
7
-
8
- CONF_RE = %r{ /\.conf\.txt$
9
- }x
10
-
11
-
12
- CLUB_PROPS_RE = %r{ (?:^|/) # beginning (^) or beginning of path (/)
13
- (?:[a-z]{1,4}\.)? # optional country code/key e.g. eng.clubs.props.txt
14
- clubs\.props\.txt$
15
- }x
16
- def self.match_club_props( path, pattern: CLUB_PROPS_RE ) pattern.match( path ); end
17
-
18
-
19
- ZIP_RE = %r{ \.zip$
20
- }x
21
- def self.match_zip( path, pattern: ZIP_RE ) pattern.match( path ); end
22
-
23
-
24
-
25
- ## exclude pattern
26
- ## for now exclude all files in directories starting with a dot (e.g. .git/ or .github/ or .build/ etc.)
27
- ## todo/check: rename to EXCLUDE_DOT_DIRS_RE - why? why not?
28
- EXCLUDE_RE = %r{ (?:^|/) # beginning (^) or beginning of path (/)
29
- \.[a-zA-Z0-9_-]+ ## (almost) any name BUT must start with dot e.g. .git, .build, etc.
30
- /
31
- }x
32
- def self.match_exclude( path, pattern: EXCLUDE_RE ) pattern.match( path ); end
33
-
34
-
35
- class Package; end ## use a shared base class for DirPackage, ZipPackage, etc.
36
-
37
- class DirPackage < Package ## todo/check: find a better name e.g. UnzippedPackage, FilesystemPackage, etc. - why? why not?
38
- class Entry
39
- def initialize( pack, path )
40
- @pack = pack ## parent package
41
- @path = path
42
- ## todo/fix!!!!: calculate @name (cut-off pack.path!!!)
43
- @name = path
44
- end
45
- def name() @name; end
46
- def read() File.open( @path, 'r:utf-8' ).read; end
47
- end # class DirPackage::Entry
48
-
49
-
50
- attr_reader :name, :path
51
-
52
- def initialize( path )
53
- ## todo/fix: expand_path ?! - why? why not? if you pass in ./ basename will be . and NOT directory name, for example!!!
54
- @path = path ## rename to root_path or base_path or somehting - why? why not?
55
-
56
- basename = File.basename( path ) ## note: ALWAYS keeps "extension"-like name if present (e.g. ./austria.zip => austria.zip)
57
- @name = basename
58
- end
59
-
60
- def each( pattern:, extension: 'txt' ) ## todo/check: rename to glob or something - why? why not?
61
- ## use just .* for extension or remove and check if File.file? and skip File.directory? - why? why not?
62
- ## note: incl. files starting with dot (.)) as candidates (normally excluded with just *)
63
- Dir.glob( "#{@path}/**/{*,.*}.#{extension}" ).each do |path|
64
- ## todo/fix: (auto) skip and check for directories
65
- if EXCLUDE_RE.match( path )
66
- ## note: skip dot dirs (e.g. .build/, .git/, etc.)
67
- elsif pattern.match( path )
68
- yield( Entry.new( self, path ))
69
- else
70
- ## puts " skipping >#{path}<"
71
- end
72
- end
73
- end
74
-
75
- def find( name )
76
- Entry.new( self, "#{@path}/#{name}" )
77
- end
78
- end # class DirPackage
79
-
80
-
81
- ## helper wrapper for datafiles in zips
82
- class ZipPackage < Package
83
- class Entry
84
- def initialize( pack, entry )
85
- @pack = pack
86
- @entry = entry
87
- end
88
-
89
- def name() @entry.name; end
90
- def read
91
- txt = @entry.get_input_stream.read
92
- ## puts "** encoding: #{txt.encoding}" #=> encoding: ASCII-8BIT
93
- txt = txt.force_encoding( Encoding::UTF_8 )
94
- txt
95
- end
96
- end # class ZipPackage::Entry
97
-
98
- attr_reader :name, :path
99
-
100
- def initialize( path )
101
- @path = path
102
-
103
- extname = File.extname( path ) ## todo/check: double check if extension is .zip - why? why not?
104
- basename = File.basename( path, extname )
105
- @name = basename
106
- end
107
-
108
- def each( pattern: )
109
- Zip::File.open( @path ) do |zipfile|
110
- zipfile.each do |entry|
111
- if entry.directory?
112
- next ## skip
113
- elsif entry.file?
114
- if EXCLUDE_RE.match( entry.name )
115
- ## note: skip dot dirs (e.g. .build/, .git/, etc.)
116
- elsif pattern.match( entry.name )
117
- yield( Entry.new( self, entry ) ) # wrap entry in uniform access interface / api
118
- else
119
- ## puts " skipping >#{entry.name}<"
120
- end
121
- else
122
- puts "** !!! ERROR !!! #{entry.name} is unknown zip file type in >#{@path}<, sorry"
123
- exit 1
124
- end
125
- end
126
- end
127
- end
128
-
129
- def find( name )
130
- entries = match_entry( name )
131
- if entries.empty?
132
- puts "** !!! ERROR !!! zip entry >#{name}< not found in >#{@path}<; sorry"
133
- exit 1
134
- elsif entries.size > 1
135
- puts "** !!! ERROR !!! ambigious zip entry >#{name}<; found #{entries.size} entries in >#{@path}<:"
136
- pp entries
137
- exit 1
138
- else
139
- Entry.new( self, entries[0] ) # wrap entry in uniform access interface / api
140
- end
141
- end
142
-
143
- private
144
- def match_entry( name )
145
- ## todo/fix: use Zip::File.glob or find_entry or something better/faster? why? why not?
146
-
147
- pattern = %r{ #{Regexp.escape( name )} ## match string if ends with name
148
- $
149
- }x
150
-
151
- entries = []
152
- Zip::File.open( @path ) do |zipfile|
153
- zipfile.each do |entry|
154
- if entry.directory?
155
- next ## skip
156
- elsif entry.file?
157
- if EXCLUDE_RE.match( entry.name )
158
- ## note: skip dot dirs (e.g. .build/, .git/, etc.)
159
- elsif pattern.match( entry.name )
160
- entries << entry
161
- else
162
- ## no match; skip too
163
- end
164
- else
165
- puts "** !!! ERROR !!! #{entry.name} is unknown zip file type in >#{@path}<, sorry"
166
- exit 1
167
- end
168
- end
169
- end
170
- entries
171
- end
172
- end # class ZipPackage
173
- end # module Datafile
@@ -1,41 +0,0 @@
1
- # encoding: utf-8
2
-
3
- ###
4
- # to run use
5
- # ruby -I ./lib -I ./test test/test_package.rb
6
-
7
-
8
- require 'helper'
9
-
10
-
11
- class TestPackage < MiniTest::Test
12
-
13
- def test_exclude
14
- assert Datafile.match_exclude( '.build/' )
15
- assert Datafile.match_exclude( '.git/' )
16
-
17
- assert Datafile.match_exclude( '/.build/' )
18
- assert Datafile.match_exclude( '/.git/' )
19
-
20
- assert Datafile.match_exclude( '.build/leagues.txt' )
21
- assert Datafile.match_exclude( '.git/leagues.txt' )
22
-
23
- assert Datafile.match_exclude( '/.build/leagues.txt' )
24
- assert Datafile.match_exclude( '/.git/leagues.txt' )
25
- end
26
-
27
- def test_read
28
- [Datafile::DirPackage.new( '../../../openfootball/england' ),
29
- Datafile::ZipPackage.new( 'tmp/england-master.zip' )].each do |eng|
30
- assert eng.find( '2015-16/.conf.txt' ).read.start_with?( '= English Premier League 2015/16' )
31
- assert eng.find( '2017-18/.conf.txt' ).read.start_with?( '= English Premier League 2017/18' )
32
- assert eng.find( '2015-16/1-premierleague-i.txt' ).read.start_with?( '= English Premier League 2015/16' )
33
- end
34
-
35
- [Datafile::DirPackage.new( '../../../openfootball/austria' ),
36
- Datafile::ZipPackage.new( 'tmp/austria-master.zip' )].each do |at|
37
- assert at.find( '2018-19/.conf.txt' ).read.start_with?( '= Österr. Bundesliga 2018/19' )
38
- end
39
- end # method test_read
40
-
41
- end # class TestPackage