sportdb-formats 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Manifest.txt +3 -0
- data/lib/sportdb/formats.rb +1 -1
- data/lib/sportdb/formats/season_utils.rb +116 -0
- data/lib/sportdb/formats/version.rb +1 -1
- data/test/test_datafile_match.rb +65 -0
- data/test/test_season_utils.rb +29 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10455b8b9b5c3220b15a503f299a5ca50bcf22a7
|
4
|
+
data.tar.gz: 4abaa2dd8badbc94de069ae3fffe0268021ab6c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f456deb7833358bbf748a50c37da56cf546736f345e7c57db88ac14aab1ff8ebd01a1c2c0c7f52cc58be3d1da666663009fb481a04bee1059f7e10913a8eafe
|
7
|
+
data.tar.gz: 30a07f60a25daf252a5c0cc6cc0862640790dc6cef93defb28f3c48425e1ee20d3525f9c6b3037559c7abbe13d638caba3d7135e53b99c7065e2546c413c7a65
|
data/Manifest.txt
CHANGED
@@ -5,8 +5,11 @@ Rakefile
|
|
5
5
|
lib/sportdb/formats.rb
|
6
6
|
lib/sportdb/formats/datafile.rb
|
7
7
|
lib/sportdb/formats/outline_reader.rb
|
8
|
+
lib/sportdb/formats/season_utils.rb
|
8
9
|
lib/sportdb/formats/version.rb
|
9
10
|
test/helper.rb
|
10
11
|
test/test_csv_reader.rb
|
11
12
|
test/test_datafile.rb
|
13
|
+
test/test_datafile_match.rb
|
12
14
|
test/test_outline_reader.rb
|
15
|
+
test/test_season_utils.rb
|
data/lib/sportdb/formats.rb
CHANGED
@@ -0,0 +1,116 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module SeasonHelper ## use Helpers why? why not?
|
5
|
+
def prev( season )
|
6
|
+
## todo: add 1964-1965 format too!!!
|
7
|
+
if season =~ /^(\d{4})-(\d{2})$/ ## season format is 1964-65
|
8
|
+
fst = $1.to_i - 1
|
9
|
+
snd = (100 + $2.to_i - 1) % 100 ## note: add 100 to turn 00 => 99
|
10
|
+
"%4d-%02d" % [fst,snd]
|
11
|
+
elsif season =~ /^(\d{4})$/
|
12
|
+
fst = $1.to_i - 1
|
13
|
+
"%4d" % [fst]
|
14
|
+
else
|
15
|
+
puts "*** !!!! wrong season format >>#{season}<<; exit; sorry"
|
16
|
+
exit 1
|
17
|
+
end
|
18
|
+
end # method prev
|
19
|
+
|
20
|
+
|
21
|
+
def key( basename )
|
22
|
+
if basename =~ /^(\d{4})[\-\/](\d{4})$/ ## e.g. 2011-2012 or 2011/2012 => 2011/12
|
23
|
+
"%4d/%02d" % [$1.to_i, $2.to_i % 100]
|
24
|
+
elsif basename =~ /^(\d{4})[\-\/](\d{2})$/ ## e.g. 2011-12 or 2011/12 => 2011/12
|
25
|
+
"#{$1}/#{$2}"
|
26
|
+
elsif basename =~ /^(\d{4})$/
|
27
|
+
$1
|
28
|
+
else
|
29
|
+
puts "*** !!!! wrong season format >>#{basename}<<; exit; sorry"
|
30
|
+
exit 1
|
31
|
+
end
|
32
|
+
end # method key
|
33
|
+
|
34
|
+
|
35
|
+
def directory( season, format: nil )
|
36
|
+
## todo: find better names for formats - why? why not?:
|
37
|
+
## long | archive | decade(?) => 1980s/1988-89, 2010s/2017-18, ...
|
38
|
+
## short | std(?) => 1988-89, 2017-18, ...
|
39
|
+
|
40
|
+
## convert season name to "standard" season name for directory
|
41
|
+
|
42
|
+
## todo/fix: move to parse / validate season (for (re)use)!!!! - why? why not?
|
43
|
+
if season =~ /^(\d{4})[\-\/](\d{4})$/ ## e.g. 2011-2012 or 2011/2012 => 2011-12
|
44
|
+
years = [$1.to_i, $2.to_i]
|
45
|
+
elsif season =~ /^(\d{4})[\-\/](\d{2})$/ ## e.g. 2011-12 or 2011/12 => 2011-12
|
46
|
+
years = [$1.to_i, $1.to_i+1]
|
47
|
+
## note: check that season end year is (always) season start year + 1
|
48
|
+
if ($1.to_i+1) % 100 != $2.to_i
|
49
|
+
puts "*** !!!! wrong season format >>#{season}<<; season end year MUST (always) equal season start year + 1; exit; sorry"
|
50
|
+
exit 1
|
51
|
+
end
|
52
|
+
elsif season =~ /^(\d{4})$/
|
53
|
+
years = [$1.to_i]
|
54
|
+
else
|
55
|
+
puts "*** !!!! wrong season format >>#{season}<<; exit; sorry"
|
56
|
+
exit 1
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
if ['l', 'long', 'archive' ].include?( format.to_s ) ## note: allow passing in of symbol to e.g. 'long' or :long
|
61
|
+
if years.size == 2
|
62
|
+
"%3d0s/%4d-%02d" % [years[0] / 10, years[0], years[1] % 100] ## e.g. 2000s/2001-02
|
63
|
+
else ## assume size 1 (single year season)
|
64
|
+
"%3d0s/%4d" % [years[0] / 10, years[0]]
|
65
|
+
end
|
66
|
+
else ## default 'short' format / fallback
|
67
|
+
if years.size == 2
|
68
|
+
"%4d-%02d" % [years[0], years[1] % 100] ## e.g. 2001-02
|
69
|
+
else ## assume size 1 (single year season)
|
70
|
+
"%4d" % years[0]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end # method directory
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
def start_year( season ) ## get start year
|
78
|
+
## convert season name to "standard" season name for directory
|
79
|
+
|
80
|
+
## todo/check: just return year from first for chars - keep it simple - why? why not?
|
81
|
+
if season =~ /^(\d{4})[\-\/](\d{4})$/ ## e.g. 2011-2010 or 2011/2011 => 2011-10
|
82
|
+
$1
|
83
|
+
elsif season =~ /^(\d{4})[\-\/](\d{2})$/
|
84
|
+
$1
|
85
|
+
elsif season =~ /^(\d{4})$/
|
86
|
+
$1
|
87
|
+
else
|
88
|
+
puts "*** !!!! wrong season format >>#{season}<<; exit; sorry"
|
89
|
+
exit 1
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def end_year( season ) ## get end year
|
94
|
+
## convert season name to "standard" season name for directory
|
95
|
+
if season =~ /^(\d{4})[\-\/](\d{4})$/ ## e.g. 2011-2010 or 2011/2011 => 2011-10
|
96
|
+
$2
|
97
|
+
elsif season =~ /^(\d{4})[\-\/](\d{2})$/
|
98
|
+
## note: assume second year is always +1
|
99
|
+
## todo/fix: add assert/check - why? why not?
|
100
|
+
## eg. 1999-00 => 2000 or 1899-00 => 1900
|
101
|
+
($1.to_i+1).to_s
|
102
|
+
elsif season =~ /^(\d{4})$/
|
103
|
+
$1
|
104
|
+
else
|
105
|
+
puts "*** !!!! wrong season format >>#{season}<<; exit; sorry"
|
106
|
+
exit 1
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end # module SeasonHelper
|
110
|
+
|
111
|
+
|
112
|
+
module SeasonUtils
|
113
|
+
extend SeasonHelper
|
114
|
+
## lets you use SeasonHelper as "globals" eg.
|
115
|
+
## SeasonUtils.prev( season ) etc.
|
116
|
+
end # SeasonUtils
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_datafile_match.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
class TestDatafileMatch < MiniTest::Test
|
11
|
+
|
12
|
+
def match_clubs( txt ) Datafile::CLUBS_REGEX.match( txt ); end
|
13
|
+
def match_clubs_wiki( txt ) Datafile::CLUBS_WIKI_REGEX.match( txt ); end
|
14
|
+
def match_leagues( txt ) Datafile::LEAGUES_REGEX.match( txt ); end
|
15
|
+
def match_conf( txt ) Datafile::CONF_REGEX.match( txt ); end
|
16
|
+
|
17
|
+
|
18
|
+
CLUBS_TXT = [ ## with country code
|
19
|
+
'de.clubs.txt',
|
20
|
+
'deutschland/de.clubs.txt',
|
21
|
+
## without country code
|
22
|
+
'europe/de-deutschland/clubs.txt',
|
23
|
+
'de-deutschland/clubs.txt',
|
24
|
+
'deutschland/clubs.txt',
|
25
|
+
'clubs.txt' ]
|
26
|
+
|
27
|
+
CLUBS_WIKI_TXT = [ ## with country code
|
28
|
+
'de.clubs.wiki.txt',
|
29
|
+
'deutschland/de.clubs.wiki.txt',
|
30
|
+
## without country code
|
31
|
+
'europe/de-deutschland/clubs.wiki.txt',
|
32
|
+
'de-deutschland/clubs.wiki.txt',
|
33
|
+
'deutschland/clubs.wiki.txt',
|
34
|
+
'clubs.wiki.txt' ]
|
35
|
+
|
36
|
+
LEAGUES_TXT = [ 'europe/england/leagues.txt',
|
37
|
+
'england/leagues.txt',
|
38
|
+
'leagues.txt' ]
|
39
|
+
|
40
|
+
CONF_TXT = [ 'austria/archives/2000s/2001-02/.conf.txt',
|
41
|
+
'austria/2019-20/.conf.txt',
|
42
|
+
'.conf.txt' ]
|
43
|
+
|
44
|
+
|
45
|
+
def test_match_clubs
|
46
|
+
CLUBS_TXT.each { |txt| assert match_clubs( txt ) }
|
47
|
+
|
48
|
+
CLUBS_WIKI_TXT.each { |txt| assert !match_clubs( txt ) }
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_match_clubs_wiki
|
52
|
+
CLUBS_WIKI_TXT.each { |txt| assert match_clubs_wiki( txt ) }
|
53
|
+
|
54
|
+
CLUBS_TXT.each { |txt| assert !match_clubs_wiki( txt ) }
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_match_leagues
|
58
|
+
LEAGUES_TXT.each { |txt| assert match_leagues( txt ) }
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_match_conf
|
62
|
+
CONF_TXT.each { |txt| assert match_conf( txt ) }
|
63
|
+
end
|
64
|
+
|
65
|
+
end # class TestFindDatafileMatch
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_season_utils.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
class TestSeasonUtils < MiniTest::Test
|
11
|
+
|
12
|
+
def test_directory
|
13
|
+
assert_equal '2010-11', SeasonUtils.directory( '2010-11' )
|
14
|
+
assert_equal '2010-11', SeasonUtils.directory( '2010-2011' )
|
15
|
+
assert_equal '2010-11', SeasonUtils.directory( '2010/11' )
|
16
|
+
assert_equal '2010-11', SeasonUtils.directory( '2010/2011' )
|
17
|
+
assert_equal '2010', SeasonUtils.directory( '2010' )
|
18
|
+
|
19
|
+
assert_equal '2010s/2010-11', SeasonUtils.directory( '2010-11', format: 'long' )
|
20
|
+
assert_equal '2010s/2010-11', SeasonUtils.directory( '2010-2011', format: 'long' )
|
21
|
+
assert_equal '2010s/2010', SeasonUtils.directory( '2010', format: 'long' )
|
22
|
+
|
23
|
+
assert_equal '1999-00', SeasonUtils.directory( '1999-00' )
|
24
|
+
assert_equal '1999-00', SeasonUtils.directory( '1999-2000' )
|
25
|
+
assert_equal '1990s/1999-00', SeasonUtils.directory( '1999-00', format: 'long' )
|
26
|
+
assert_equal '1990s/1999-00', SeasonUtils.directory( '1999-2000', format: 'long' )
|
27
|
+
end # method test_diretory
|
28
|
+
|
29
|
+
end # class TestSeasonlUtils
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sportdb-formats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
@@ -82,11 +82,14 @@ files:
|
|
82
82
|
- lib/sportdb/formats.rb
|
83
83
|
- lib/sportdb/formats/datafile.rb
|
84
84
|
- lib/sportdb/formats/outline_reader.rb
|
85
|
+
- lib/sportdb/formats/season_utils.rb
|
85
86
|
- lib/sportdb/formats/version.rb
|
86
87
|
- test/helper.rb
|
87
88
|
- test/test_csv_reader.rb
|
88
89
|
- test/test_datafile.rb
|
90
|
+
- test/test_datafile_match.rb
|
89
91
|
- test/test_outline_reader.rb
|
92
|
+
- test/test_season_utils.rb
|
90
93
|
homepage: https://github.com/sportdb/sport.db
|
91
94
|
licenses:
|
92
95
|
- Public Domain
|