sports 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+
2
+ module Sports
3
+ MAJOR = 0 ## todo: namespace inside version or something - why? why not??
4
+ MINOR = 0
5
+ PATCH = 1
6
+ VERSION = [MAJOR,MINOR,PATCH].join('.')
7
+
8
+ def self.version
9
+ VERSION
10
+ end
11
+
12
+ def self.banner
13
+ "sports/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
14
+ end
15
+
16
+ def self.root
17
+ File.expand_path( File.dirname(File.dirname(__FILE__)) )
18
+ end
19
+ end # module Sports
@@ -0,0 +1,12 @@
1
+ ## note: use the local version of sportdb gems
2
+ $LOAD_PATH.unshift( File.expand_path( '../date-formats/lib' ))
3
+ $LOAD_PATH.unshift( File.expand_path( '../score-formats/lib' ))
4
+
5
+ ## minitest setup
6
+ require 'minitest/autorun'
7
+
8
+
9
+ ## our own code
10
+ require 'sports'
11
+
12
+
@@ -0,0 +1,38 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_clubs.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+ class TestClubs < MiniTest::Test
9
+
10
+ Club = Sports::Club
11
+
12
+
13
+ def test_new
14
+ club = Club.new( name: 'Rapid Wien' )
15
+
16
+ assert_equal 'Rapid Wien', club.name
17
+ assert_equal ['Rapid Wien'], club.names
18
+ end
19
+
20
+ def test_duplicates
21
+ club = Club.new
22
+ club.name = 'Rapid Wien'
23
+
24
+ assert_equal false, club.duplicates?
25
+ duplicates = {}
26
+ assert_equal duplicates, club.duplicates
27
+
28
+ club.alt_names_auto += ['Rapid', 'Rapid Wien', 'SK Rapid Wien']
29
+
30
+ pp club
31
+
32
+ assert_equal true, club.duplicates?
33
+ duplicates = {'rapidwien'=>['Rapid Wien','Rapid Wien']}
34
+ pp club.duplicates
35
+ assert_equal duplicates, club.duplicates
36
+ end
37
+
38
+ end # class TestClubs
@@ -0,0 +1,30 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_csv_reader.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+
9
+ class TestCsvReader < MiniTest::Test
10
+
11
+ def test_parse
12
+ recs = parse_csv( <<TXT )
13
+ ### World Countries
14
+
15
+ Key, Code, Name
16
+ af, AFG, Afghanistan
17
+ al, ALB, Albania
18
+ dz, ALG, Algeria
19
+ as, ASA, American Samoa (US)
20
+ TXT
21
+
22
+ pp recs
23
+ assert_equal [{ 'Key' => 'af', 'Code' => 'AFG', 'Name' => 'Afghanistan'},
24
+ { 'Key' => 'al', 'Code' => 'ALB', 'Name' => 'Albania'},
25
+ { 'Key' => 'dz', 'Code' => 'ALG', 'Name' => 'Algeria'},
26
+ { 'Key' => 'as', 'Code' => 'ASA', 'Name' => 'American Samoa (US)'},
27
+ ], recs[0..3]
28
+ end
29
+
30
+ end # class TestCsvReader
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_match.rb
6
+
7
+
8
+ require 'helper'
9
+
10
+ class TestMatch < MiniTest::Test
11
+
12
+ Match = Sports::Match
13
+
14
+
15
+ def test_round
16
+ m = Match.new( team1: 'Team 1',
17
+ team2: 'Team 2',
18
+ round: 3 )
19
+ pp m
20
+ assert_equal 3, m.round
21
+ assert_nil m.score1
22
+ assert_nil m.score2
23
+
24
+ m = Match.new
25
+ m.update( round: 4 )
26
+ pp m
27
+ assert_equal 4, m.round
28
+ end # method test_round
29
+
30
+ end # class TestMatch
@@ -0,0 +1,47 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_match_status_parser.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+
9
+ class TestMatchStatusParser < MiniTest::Test
10
+
11
+ Status = Sports::Status
12
+ StatusParser = Sports::StatusParser
13
+
14
+ def test_find
15
+ [['awarded [cancelled] canceled [ddd]', Status::CANCELLED],
16
+ ['awarded [bbb; canceled] canceled [awarded; comments] eeee', Status::AWARDED],
17
+ ['aaa bbb ccc ddd eeee', nil],
18
+ ].each do |rec|
19
+ line = rec[0]
20
+ status_exp = rec[1]
21
+ puts "line (before): >#{line}<"
22
+ status = StatusParser.find!( line )
23
+ puts "status: >#{status}<"
24
+ puts "line (after): >#{line}<"
25
+ puts
26
+
27
+ assert_equal status_exp, status
28
+ end
29
+ end # method test_find
30
+
31
+ def test_parse
32
+ [['cancelled ddd', Status::CANCELLED],
33
+ ['CANCELLED', Status::CANCELLED],
34
+ ['can.', Status::CANCELLED],
35
+ ['awarded; comments', Status::AWARDED],
36
+ ['awd. - comments', Status::AWARDED],
37
+ ['aaa bbb ccc ddd eeee', nil],
38
+ ].each do |rec|
39
+ str = rec[0]
40
+ status_exp = rec[1]
41
+ assert_equal status_exp, StatusParser.parse( str )
42
+ end
43
+ end
44
+
45
+ end # class TestMatchStatusParser
46
+
47
+
@@ -0,0 +1,65 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_name_helper.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+
9
+ class TestNameHelper < MiniTest::Test
10
+
11
+ include Sports::NameHelper
12
+
13
+
14
+ def test_strip_norm ## strip (remove) non-norm characters e.g. ()'- etc.
15
+ [['Estudiantes (LP)', 'Estudiantes LP'],
16
+ ['Central Córdoba (SdE)', 'Central Córdoba SdE'],
17
+ ['Saint Patrick’s Athletic FC', 'Saint Patricks Athletic FC'],
18
+ ['Myllykosken Pallo −47', 'Myllykosken Pallo 47'],
19
+ ].each do |rec|
20
+ assert_equal rec[1], strip_norm( rec[0] )
21
+ end
22
+ end
23
+
24
+ def test_strip_year
25
+ [['A (1911-1912)', 'A'],
26
+ ['B (1911-1912, 1913-1915)', 'B'],
27
+ ['C (1911-___)', 'C'],
28
+ ['D (1911-???)', 'D'],
29
+ ['FC Linz (1946-2001, 2013-)', 'FC Linz'],
30
+ ['Admira Wien (-????)', 'Admira Wien'],
31
+ ['Admira Wien (-____)', 'Admira Wien'],
32
+ ].each do |rec|
33
+ assert_equal rec[1], strip_year( rec[0] )
34
+ end
35
+ end
36
+
37
+ def test_strip_lang
38
+ [['Bayern Munich [en]', 'Bayern Munich'],
39
+ ].each do |rec|
40
+ assert_equal rec[1], strip_lang( rec[0] )
41
+ end
42
+ end
43
+
44
+
45
+ def test_variants
46
+ ## hungarian
47
+ assert_equal ['Raba ETO Gyor'], variants( 'Rába ETO Győr' )
48
+ assert_equal ['Raba ETO Gyor', 'Rába ETO Gyoer'], variants( 'Rába ETO Györ' )
49
+
50
+ ## romanian
51
+ assert_equal ['Targu Mures'], variants( 'Târgu Mureș' )
52
+ assert_equal ['Targu Mures'], variants( 'Târgu Mureş' )
53
+ end
54
+
55
+
56
+ =begin
57
+ ### fix: move to ClubReader!!!!! not for general use
58
+ def test_wiki
59
+ assert_equal 'FC Wacker Innsbruck', strip_wiki( 'FC Wacker Innsbruck (2002)' )
60
+ assert_equal 'SK Austria Klagenfurt', strip_wiki( 'SK Austria Klagenfurt (2007)' )
61
+
62
+ assert_equal 'Willem II', strip_wiki( 'Willem II (football club)' )
63
+ end
64
+ =end
65
+ end # class TestNameHelper
@@ -0,0 +1,141 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_season.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+ class TestSeason < MiniTest::Test
9
+
10
+
11
+ def test_to_path
12
+ assert_equal '2010-11', Season( '2010-11' ).to_path
13
+ assert_equal '2010-11', Season( '2010-2011' ).to_path
14
+ assert_equal '2010-11', Season( '2010/11' ).to_path
15
+ assert_equal '2010-11', Season( '2010/1' ).to_path
16
+ assert_equal '2010-11', Season( '2010/2011' ).to_path
17
+ assert_equal '2010', Season( '2010' ).to_path
18
+
19
+ assert_equal '2010-11', Season( 2010, 2011 ).to_path
20
+ assert_equal '2010-11', Season( 2010_2011 ).to_path
21
+ assert_equal '2010-11', Season( 20102011 ).to_path
22
+ assert_equal '2010-11', Season( 201011 ).to_path
23
+ assert_equal '2010-11', Season( 20101 ).to_path
24
+ assert_equal '2010', Season( 2010 ).to_path
25
+
26
+ assert_equal '2010s/2010-11', Season( '2010-11' ).to_path( :decade )
27
+ assert_equal '2010s/2010-11', Season( '2010-2011' ).to_path( :decade )
28
+ assert_equal '2010s/2010', Season( '2010' ).to_path( :decade )
29
+
30
+ assert_equal '1999-00', Season( '1999-00' ).to_path
31
+ assert_equal '1999-00', Season( '1999-2000' ).to_path
32
+ assert_equal '1990s/1999-00', Season( '1999-00' ).to_path( :decade )
33
+ assert_equal '1990s/1999-00', Season( '1999-2000' ).to_path( :decade )
34
+
35
+ assert_equal '2000s/2010-11', Season( '2010-11' ).to_path( :century )
36
+ assert_equal '2000s/2010-11', Season( '2010-2011' ).to_path( :century )
37
+ assert_equal '2000s/2010', Season( '2010' ).to_path( :century )
38
+
39
+ assert_equal '1900s/1999-00', Season( '1999-00' ).to_path( :century )
40
+ assert_equal '1900s/1999-00', Season( '1999-2000' ).to_path( :century )
41
+ end # method test_to_path
42
+
43
+
44
+ def test_key
45
+ assert_equal '2010/11', Season( '2010-11' ).key
46
+ assert_equal '2010/11', Season( '2010-2011' ).key
47
+ assert_equal '2010/11', Season( '2010/11' ).key
48
+ assert_equal '2010/11', Season( '2010/1' ).key
49
+ assert_equal '2010/11', Season( '2010/2011' ).key
50
+ assert_equal '2010', Season( '2010' ).key
51
+
52
+ assert_equal '1999/00', Season( '1999-00' ).key
53
+ assert_equal '1999/00', Season( '1999-2000' ).key
54
+ end # method test_key
55
+
56
+
57
+ def test_years
58
+ [Season( '1999-00' ),
59
+ Season( '1999/00' ),
60
+ Season( '1999/2000' ),
61
+ Season( 1999, 2000 ),
62
+ Season( 1999_00 ), ## allow "hacky" shortcuts - why? why not?
63
+ Season( 1999_2000 ),
64
+ ].each do |season|
65
+ assert_equal 1999, season.start_year
66
+ assert_equal 2000, season.end_year
67
+ end
68
+
69
+ [Season( '2010/1' ),
70
+ Season( '2010/11' ),
71
+ Season( 201011 ), ## allow "hacky" shortcuts - why? why not?
72
+ Season( 20102011 ),
73
+ ].each do |season|
74
+ assert_equal 2010, season.start_year
75
+ assert_equal 2011, season.end_year
76
+ end
77
+
78
+ [Season( '1999' ),
79
+ Season( 1999 ),
80
+ ].each do |season|
81
+ assert_equal 1999, season.start_year
82
+ assert_equal 1999, season.end_year
83
+ end
84
+
85
+ [Season( '2010' ),
86
+ Season( 2010 ),
87
+ ].each do |season|
88
+ assert_equal 2010, season.start_year
89
+ assert_equal 2010, season.end_year
90
+ end
91
+ end
92
+
93
+
94
+ def test_prev
95
+ assert_equal '2009/10', Season( '2010-11' ).prev.key
96
+ assert_equal '2009/10', Season( '2010-2011' ).prev.key
97
+ assert_equal '2009', Season( '2010' ).prev.key
98
+
99
+ assert_equal '1998/99', Season( '1999-00' ).prev.key
100
+ assert_equal '1998/99', Season( '1999-2000' ).prev.key
101
+ end
102
+
103
+ def test_next
104
+ assert_equal '2009/10', Season( '2008-09' ).next.key
105
+ assert_equal '2009/10', Season( '2008-2009' ).next.key
106
+ assert_equal '2009', Season( '2008' ).next.key
107
+
108
+ assert_equal '1998/99', Season( '1997-98' ).next.key
109
+ assert_equal '1998/99', Season( '1997-1998' ).next.key
110
+ end
111
+
112
+
113
+ def test_range
114
+ s2010 = Season( '2010' )..Season( '2019' )
115
+ pp s2010.to_a
116
+ # => [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
117
+
118
+ s2010 = Season( '2010-11')..Season( '2019-20')
119
+ pp s2010.to_a
120
+ # => [2010/11, 2011/12, 2012/13, 2013/14, 2014/15,
121
+ # 2015/16, 2016/17, 2017/18, 2018/19, 2019/20]
122
+
123
+ puts s2010 === Season( '2015-16' ) # true
124
+ puts s2010 === Season( '2015' ) # !!!! false - why? if using >= <=
125
+ puts s2010 === Season( '1999-00' ) # false
126
+ puts s2010 === Season( '2020-21' ) # false
127
+
128
+ puts
129
+ puts s2010.include? Season( '2015-16' ) # true
130
+ puts s2010.include? Season( '2015' ) # !!! false
131
+ puts s2010.include? Season( '1999-00' ) # false
132
+
133
+ assert_equal true, Season( '2010-11' ) < Season( '2015' )
134
+ assert_equal true, Season( '2015' ) < Season( '2019-20' )
135
+
136
+ assert_equal false, Season( '2015' ) == Season( '2015-16' )
137
+ assert_equal true, Season( '2015' ) < Season( '2015-16' )
138
+ assert_equal true, Season( '2015' ) == Season( '2015' )
139
+ end
140
+
141
+ end # class TestSeason
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sports
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gerald Bauer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-08-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: alphabets
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: date-formats
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: score-formats
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: csvreader
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.4
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 1.2.4
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdoc
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: hoe
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.16'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.16'
97
+ description: sports - sport data structures for matches, scores, leagues, seasons,
98
+ rounds, groups, teams, clubs and more
99
+ email: opensport@googlegroups.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files:
103
+ - CHANGELOG.md
104
+ - Manifest.txt
105
+ - README.md
106
+ files:
107
+ - CHANGELOG.md
108
+ - Manifest.txt
109
+ - README.md
110
+ - Rakefile
111
+ - lib/sports.rb
112
+ - lib/sports/config.rb
113
+ - lib/sports/match_parser_csv.rb
114
+ - lib/sports/match_status_parser.rb
115
+ - lib/sports/name_helper.rb
116
+ - lib/sports/season.rb
117
+ - lib/sports/structs/country.rb
118
+ - lib/sports/structs/goal.rb
119
+ - lib/sports/structs/group.rb
120
+ - lib/sports/structs/league.rb
121
+ - lib/sports/structs/match.rb
122
+ - lib/sports/structs/matchlist.rb
123
+ - lib/sports/structs/round.rb
124
+ - lib/sports/structs/standings.rb
125
+ - lib/sports/structs/team.rb
126
+ - lib/sports/structs/team_usage.rb
127
+ - lib/sports/version.rb
128
+ - test/helper.rb
129
+ - test/test_clubs.rb
130
+ - test/test_csv_reader.rb
131
+ - test/test_match.rb
132
+ - test/test_match_status_parser.rb
133
+ - test/test_name_helper.rb
134
+ - test/test_season.rb
135
+ homepage: https://github.com/sportdb/sport.db
136
+ licenses:
137
+ - Public Domain
138
+ metadata: {}
139
+ post_install_message:
140
+ rdoc_options:
141
+ - "--main"
142
+ - README.md
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: 2.2.2
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubyforge_project:
157
+ rubygems_version: 2.5.2
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: sports - sport data structures for matches, scores, leagues, seasons, rounds,
161
+ groups, teams, clubs and more
162
+ test_files: []