sportdb-structs 0.1.3 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9569b6727737da1a3c241e4acae88a19ea61e7cc132e752b1d391628424db916
4
- data.tar.gz: 37ad5ee8f954dfdb3221060b500eed898461ce957ed257d2dd58e6b6467bae7c
3
+ metadata.gz: '009da80615ac77d643529d2feee7692ca31ce2c07c5f1dd45cf2667558af4b90'
4
+ data.tar.gz: 7368f410cfc3b4fa0af288c20399c1244841518cf5598ff443dcf17aaa881501
5
5
  SHA512:
6
- metadata.gz: 4eb9e97280e9a390f188409fd8dab427b96dcc9e0ed9d81de20546254dc02903b9d7c28ab22efbaea0fb7f13cf9ea685c81ab1f88fc67cd69f9d8b017579d3ab
7
- data.tar.gz: 4bcb33bdc129b67439817eea7204bd42aaf26a20b0b1962a046eb182d8d48746b38452aa5a177a01c7f522e3bcab203053778d42e75212bde5128405eeb37bf0
6
+ metadata.gz: 56acdb1dc22c5b70f51c398e1ae912ff6bcbf50f021391efa5eba75d3ddeb4c1d069255fd715a891f6c4451f25f4c0212eb8769bd129755ede88ca322cd4e4e6
7
+ data.tar.gz: 35dcad60e6c784859d5c7218e4771ec5979cb4a07b1e07ba6f598e64fc968c1cfd75ee5e48f2c22996fa570a37292051b8f4f4e195ea2b9527ecfceef4753b6c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,5 @@
1
+ ### 0.2.0
2
+
1
3
  ### 0.0.1 / 2020-08-24
2
4
 
3
5
  * Everything is new. First release.
data/Manifest.txt CHANGED
@@ -10,6 +10,7 @@ lib/sportdb/structs/match_status_parser.rb
10
10
  lib/sportdb/structs/name_helper.rb
11
11
  lib/sportdb/structs/structs/country.rb
12
12
  lib/sportdb/structs/structs/goal.rb
13
+ lib/sportdb/structs/structs/ground.rb
13
14
  lib/sportdb/structs/structs/group.rb
14
15
  lib/sportdb/structs/structs/league.rb
15
16
  lib/sportdb/structs/structs/match.rb
@@ -19,9 +20,3 @@ lib/sportdb/structs/structs/standings.rb
19
20
  lib/sportdb/structs/structs/team.rb
20
21
  lib/sportdb/structs/structs/team_usage.rb
21
22
  lib/sportdb/structs/version.rb
22
- test/helper.rb
23
- test/test_clubs.rb
24
- test/test_csv_reader.rb
25
- test/test_match.rb
26
- test/test_match_status_parser.rb
27
- test/test_name_helper.rb
data/README.md CHANGED
@@ -22,8 +22,8 @@ The `sportdb-structs` scripts are dedicated to the public domain.
22
22
  Use it as you please with no restrictions whatsoever.
23
23
 
24
24
 
25
+
25
26
  ## Questions? Comments?
26
27
 
27
- Send them along to the
28
- [Open Sports & Friends Forum/Mailing List](http://groups.google.com/group/opensport).
29
- Thanks!
28
+ Yes, you can. More than welcome.
29
+ See [Help & Support »](https://github.com/openfootball/help)
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ Hoe.spec 'sportdb-structs' do
11
11
  self.urls = { home: 'https://github.com/sportdb/sport.db' }
12
12
 
13
13
  self.author = 'Gerald Bauer'
14
- self.email = 'opensport@googlegroups.com'
14
+ self.email = 'gerald.bauer@gmail.com'
15
15
 
16
16
  # switch extension to .markdown for gihub formatting
17
17
  self.readme_file = 'README.md'
@@ -1,12 +1,13 @@
1
1
  module SportDb
2
- module Import
2
+ module Import
3
3
 
4
4
  class Configuration
5
5
  ##
6
6
  ## todo: allow configure of countries_dir like clubs_dir
7
7
  ## "fallback" and use a default built-in world/countries.txt
8
8
 
9
- attr_accessor :catalog
9
+ ## note: catalog defined/added in sports-catalogs gem!!!
10
+ ## attr_accessor :catalog
10
11
 
11
12
  attr_reader :lang
12
13
  def lang=(value)
@@ -15,8 +16,10 @@ class Configuration
15
16
  ScoreFormats.lang = value
16
17
  SportDb.lang.lang = value
17
18
 
18
- ## todo/fix: change SportDb.lang to SportDb.parser.lang or lang_parser or utils or someting !!!!
19
- ## use Sport.lang only as a read-only shortcut a la catalog for config.lang!!!!
19
+ ## todo/fix: change SportDb.lang to SportDb.parser.lang
20
+ ## or lang_parser or utils or someting !!!!
21
+ ## use Sport.lang only as a read-only shortcut
22
+ # a la catalog for config.lang!!!!
20
23
  end
21
24
 
22
25
  end # class Configuration
@@ -26,13 +29,10 @@ end # class Configuration
26
29
  ## SportDb::Import.configure do |config|
27
30
  ## config.lang = 'it'
28
31
  ## end
29
-
30
32
  def self.configure() yield( config ); end
31
33
 
32
34
  def self.config() @config ||= Configuration.new; end
33
35
 
34
- ## e.g. use config.catalog -- keep Import.catalog as a shortcut (for "read-only" access)
35
- def self.catalog() config.catalog; end
36
36
 
37
37
  end # module Import
38
38
  end # module SportDb
@@ -116,7 +116,7 @@ module SportDb
116
116
 
117
117
  header_league = find_header( headers, ['League'] )
118
118
  headers_mapping[:league] = header_league if header_league
119
- else
119
+ else
120
120
  ## else try footballdata.uk and others
121
121
  headers_mapping[:team1] = find_header( headers, ['HomeTeam', 'HT', 'Home'] )
122
122
  headers_mapping[:team2] = find_header( headers, ['AwayTeam', 'AT', 'Away'] )
@@ -4,6 +4,25 @@ module Sports
4
4
  # note: check that shape/structure/fields/attributes match
5
5
  # the ActiveRecord model !!!!
6
6
 
7
+ ## add city here
8
+ ## use module World - why? why not?
9
+
10
+ class City
11
+ attr_reader :key, :name, :country
12
+ attr_accessor :alt_names
13
+
14
+ def initialize( key: nil,
15
+ name:, country: )
16
+ ## note: auto-generate key "on-the-fly" if missing for now - why? why not?
17
+ ## note: quick hack - auto-generate key, that is, remove all non-ascii chars and downcase
18
+ @key = key || unaccent(name).downcase.gsub( /[^a-z]/, '' ) + "_" + country.key
19
+ @name = name
20
+ @country = country
21
+ @alt_names = []
22
+ end
23
+ end # class City
24
+
25
+
7
26
  class Country
8
27
 
9
28
  ## note: is read-only/immutable for now - why? why not?
@@ -14,7 +33,15 @@ class Country
14
33
  def initialize( key: nil, name:, code:, tags: [] )
15
34
  ## note: auto-generate key "on-the-fly" if missing for now - why? why not?
16
35
  ## note: quick hack - auto-generate key, that is, remove all non-ascii chars and downcase
17
- @key = key || name.downcase.gsub( /[^a-z]/, '' )
36
+ @key = begin
37
+ if key
38
+ key
39
+ elsif code
40
+ code.downcase
41
+ else
42
+ unaccent( name ).downcase.gsub( /[^a-z]/, '' )
43
+ end
44
+ end
18
45
  @name, @code = name, code
19
46
  @alt_names = []
20
47
  @tags = tags
@@ -0,0 +1,78 @@
1
+ ##
2
+ # based on teams/clubs
3
+ #
4
+
5
+
6
+ module Sports
7
+
8
+
9
+ class Ground
10
+ ## todo: use just names for alt_names - why? why not?
11
+ attr_accessor :key, :name, :alt_names,
12
+ :year, :year_end, ## todo/fix: change year to start_year and end_year/year_end to end_year (like in season)!!!
13
+ :country,
14
+ :city, :district,
15
+ :geos,
16
+ :address
17
+
18
+ def names
19
+ ## todo/check: add alt_names_auto too? - why? why not?
20
+ [@name] + @alt_names
21
+ end ## all names
22
+
23
+ def key
24
+ ## note: auto-generate key "on-the-fly" if missing for now - why? why not?
25
+ ## note: quick hack - auto-generate key, that is, remove all non-ascii chars and downcase
26
+ ## fix update - allow numbers (0-9)
27
+ ## add dash(-) plus parens () too!! for (-1999) or (1999-2011) or such
28
+ ## add umlauts too for now - plus add more later!!!
29
+ ##
30
+ ## fix- add more (all) diacritics!!!
31
+ ## GÍ Gøta (1926-2008)
32
+ ## FC Suðuroy
33
+ ## fix - remove dash(-) if not followed or preceded by year (four digits)!!!
34
+ ##
35
+ ## use new (autogen)key rule
36
+ ## - 1st unaccent, 2nd downcase, 3rd remove space et al
37
+ ## use keygen or autokey function or such - why? why not?
38
+
39
+ ## note: ALWAYS auto-add city to key to make unique!!!!!
40
+ ## e.g. Red Bull Arena, Allianz Arena etc.
41
+
42
+ @key ||= begin
43
+ fst = unaccent( @name ).downcase.gsub( /[^a-z0-9()-]/, '' )
44
+ snd = unaccent( city ).downcase.gsub( /[^a-z0-9]/, '' )
45
+ trd = country.key
46
+ ## use / as separator (or @ or ??) - why? why not?
47
+ fst + '_' + snd + '_' + trd
48
+ end
49
+ @key
50
+ end
51
+
52
+
53
+ ## todo/check
54
+ ## check event_ifno - for start_date, end_date ??
55
+ ## use same naming convention here too (start_year/end_year)
56
+ def historic?() @year_end ? true : false; end
57
+ alias_method :past?, :historic?
58
+
59
+
60
+ def initialize( **kwargs )
61
+ @alt_names = []
62
+
63
+ update( **kwargs ) unless kwargs.empty?
64
+ end
65
+
66
+ def update( **kwargs )
67
+ @key = kwargs[:key] if kwargs.has_key?( :key )
68
+ @name = kwargs[:name] if kwargs.has_key?( :name )
69
+ @alt_names = kwargs[:alt_names] if kwargs.has_key?( :alt_names )
70
+
71
+ @city = kwargs[:city] if kwargs.has_key?( :city )
72
+ ## todo/fix: use city struct - why? why not?
73
+ ## todo/fix: add country too or report unused keywords / attributes - why? why not?
74
+
75
+ self ## note - MUST return self for chaining
76
+ end
77
+ end # class Ground
78
+ end # module Sports
@@ -1,6 +1,6 @@
1
1
  module Sports
2
2
 
3
- class Group
3
+ class Group
4
4
  attr_reader :key, :name, :teams
5
5
 
6
6
  def initialize( key: nil,
@@ -10,7 +10,15 @@ module Sports
10
10
  @name = name
11
11
  @teams = teams
12
12
  end
13
- end # class Group
14
13
 
14
+ def pretty_print( printer )
15
+ ## todo/check - how to display/format key - use () or not - why? why not?
16
+ buf = String.new
17
+ buf << "<Group: #{@key ? @key : '?'} - #{@name} "
18
+ buf << @teams.pretty_print_inspect
19
+ buf << ">"
20
+
21
+ printer.text( buf )
22
+ end
23
+ end # class Group
15
24
  end # module Sports
16
-
@@ -6,16 +6,13 @@ class League
6
6
  attr_reader :key, :name, :country, :intl
7
7
  attr_accessor :alt_names
8
8
 
9
- ## special import only attribs
10
- attr_accessor :alt_names_auto ## auto-generated alt names
11
9
 
12
- def initialize( key:, name:, alt_names: [], alt_names_auto: [],
10
+ def initialize( key:, name:, alt_names: [],
13
11
  country: nil, intl: false, clubs: true )
14
12
  @key = key
15
13
  @name = name
16
14
  @alt_names = alt_names
17
- @alt_names_auto = alt_names_auto
18
-
15
+
19
16
  @country = country
20
17
  @intl = intl
21
18
  @clubs = clubs
@@ -21,8 +21,8 @@ class Match
21
21
  :conf1, :conf2, ## special case for mls e.g. conference1, conference2 (e.g. west, east, central)
22
22
  :country1, :country2, ## special case for champions league etc. - uses FIFA country code
23
23
  :comments,
24
- :league ## (optinal) added as text for now (use struct?)
25
-
24
+ :league, ## (optinal) added as text for now (use struct?)
25
+ :ground ## (optional) add as text line for now (incl. city, timezone etc.)
26
26
 
27
27
  attr_accessor :goals ## todo/fix: make goals like all other attribs!!
28
28
 
@@ -39,28 +39,29 @@ class Match
39
39
 
40
40
  def update( **kwargs )
41
41
  ## note: check with has_key? because value might be nil!!!
42
- @date = kwargs[:date] if kwargs.has_key? :date
43
- @time = kwargs[:time] if kwargs.has_key? :time
42
+ @date = kwargs[:date] if kwargs.has_key?( :date )
43
+ @time = kwargs[:time] if kwargs.has_key?( :time )
44
44
 
45
45
  ## todo/fix: use team1_name, team2_name or similar - for compat with db activerecord version? why? why not?
46
- @team1 = kwargs[:team1] if kwargs.has_key? :team1
47
- @team2 = kwargs[:team2] if kwargs.has_key? :team2
46
+ @team1 = kwargs[:team1] if kwargs.has_key?( :team1 )
47
+ @team2 = kwargs[:team2] if kwargs.has_key?( :team2 )
48
48
 
49
- @conf1 = kwargs[:conf1] if kwargs.has_key? :conf1
50
- @conf2 = kwargs[:conf2] if kwargs.has_key? :conf2
51
- @country1 = kwargs[:country1] if kwargs.has_key? :country1
52
- @country2 = kwargs[:country2] if kwargs.has_key? :country2
49
+ @conf1 = kwargs[:conf1] if kwargs.has_key?( :conf1 )
50
+ @conf2 = kwargs[:conf2] if kwargs.has_key?( :conf2 )
51
+ @country1 = kwargs[:country1] if kwargs.has_key?( :country1 )
52
+ @country2 = kwargs[:country2] if kwargs.has_key?( :country2 )
53
53
 
54
54
  ## note: round is a string!!! e.g. '1', '2' for matchday or 'Final', 'Semi-final', etc.
55
55
  ## todo: use to_s - why? why not?
56
- @round = kwargs[:round] if kwargs.has_key? :round
57
- @stage = kwargs[:stage] if kwargs.has_key? :stage
58
- @leg = kwargs[:leg] if kwargs.has_key? :leg
59
- @group = kwargs[:group] if kwargs.has_key? :group
60
- @status = kwargs[:status] if kwargs.has_key? :status
61
- @comments = kwargs[:comments] if kwargs.has_key? :comments
56
+ @round = kwargs[:round] if kwargs.has_key?( :round )
57
+ @stage = kwargs[:stage] if kwargs.has_key?( :stage )
58
+ @leg = kwargs[:leg] if kwargs.has_key?( :leg )
59
+ @group = kwargs[:group] if kwargs.has_key?( :group )
60
+ @status = kwargs[:status] if kwargs.has_key?( :status )
61
+ @comments = kwargs[:comments] if kwargs.has_key?( :comments )
62
62
 
63
- @league = kwargs[:league] if kwargs.has_key? :league
63
+ @league = kwargs[:league] if kwargs.has_key?( :league )
64
+ @ground = kwargs[:ground] if kwargs.has_key?( :ground )
64
65
 
65
66
 
66
67
  if kwargs.has_key?( :score ) ## check all-in-one score struct for convenience!!!
@@ -91,17 +92,17 @@ class Match
91
92
  ## @score2agg = score.score2agg
92
93
  end
93
94
  else
94
- @score1 = kwargs[:score1] if kwargs.has_key? :score1
95
- @score1i = kwargs[:score1i] if kwargs.has_key? :score1i
96
- @score1et = kwargs[:score1et] if kwargs.has_key? :score1et
97
- @score1p = kwargs[:score1p] if kwargs.has_key? :score1p
98
- @score1agg = kwargs[:score1agg] if kwargs.has_key? :score1agg
99
-
100
- @score2 = kwargs[:score2] if kwargs.has_key? :score2
101
- @score2i = kwargs[:score2i] if kwargs.has_key? :score2i
102
- @score2et = kwargs[:score2et] if kwargs.has_key? :score2et
103
- @score2p = kwargs[:score2p] if kwargs.has_key? :score2p
104
- @score2agg = kwargs[:score2agg] if kwargs.has_key? :score2agg
95
+ @score1 = kwargs[:score1] if kwargs.has_key?( :score1 )
96
+ @score1i = kwargs[:score1i] if kwargs.has_key?( :score1i )
97
+ @score1et = kwargs[:score1et] if kwargs.has_key?( :score1et )
98
+ @score1p = kwargs[:score1p] if kwargs.has_key?( :score1p )
99
+ @score1agg = kwargs[:score1agg] if kwargs.has_key?( :score1agg )
100
+
101
+ @score2 = kwargs[:score2] if kwargs.has_key?( :score2 )
102
+ @score2i = kwargs[:score2i] if kwargs.has_key?( :score2i )
103
+ @score2et = kwargs[:score2et] if kwargs.has_key?( :score2et )
104
+ @score2p = kwargs[:score2p] if kwargs.has_key?( :score2p )
105
+ @score2agg = kwargs[:score2agg] if kwargs.has_key?( :score2agg )
105
106
 
106
107
  ## note: (always) (auto-)convert scores to integers
107
108
  @score1 = @score1.to_i if @score1
@@ -17,7 +17,20 @@ module Sports
17
17
  @knockout = knockout
18
18
  @auto = auto # auto-created (inline reference/header without proper definition before)
19
19
  end
20
- end # class Round
21
20
 
21
+ def pretty_print( printer )
22
+ ## todo/check - how to display/format key - use () or not - why? why not?
23
+ buf = String.new
24
+ buf << "<Round: "
25
+ buf << "(#{@num}) " if @num
26
+ buf << "#{@name}, "
27
+ buf << "#{@start_date} - #{@end_date}"
28
+ buf << " (knockout)" if @knockout
29
+ buf << " (auto)" if @auto
30
+ buf << ">"
31
+
32
+ printer.text( buf )
33
+ end
34
+ end # class Round
22
35
  end # module Sports
23
36
 
@@ -1,10 +1,8 @@
1
1
 
2
2
  module Sports
3
3
 
4
- ##
5
- ## todo/fix: remove self.create in structs!!! use just new!!!
6
4
 
7
- class Team
5
+ class Team # shared base for clubs AND natinal_teams
8
6
  ## todo: use just names for alt_names - why? why not?
9
7
  attr_accessor :key, :name, :alt_names,
10
8
  :code, ## code == abbreviation e.g. ARS etc.
@@ -20,18 +18,36 @@ class Team
20
18
  def key
21
19
  ## note: auto-generate key "on-the-fly" if missing for now - why? why not?
22
20
  ## note: quick hack - auto-generate key, that is, remove all non-ascii chars and downcase
23
- @key || @name.downcase.gsub( /[^a-z]/, '' )
21
+ ## fix update - allow numbers (0-9)
22
+ ## add dash(-) plus parens () too!! for (-1999) or (1999-2011) or such
23
+ ## add umlauts too for now - plus add more later!!!
24
+ ##
25
+ ## fix- add more (all) diacritics!!!
26
+ ## GÍ Gøta (1926-2008)
27
+ ## FC Suðuroy
28
+ ## fix - remove dash(-) if not followed or preceded by year (four digits)!!!
29
+ ##
30
+ ## use new (autogen)key rule
31
+ ## - 1st unaccent, 2nd downcase, 3rd remove space et al
32
+ ## use keygen or autokey function or such - why? why not?
33
+
34
+ ## cache autokey generation (elg. use ||= NOT ||) - why? why not?
35
+
36
+ @key ||= begin
37
+ unaccent( @name ).downcase.gsub( /[^a-z0-9()-]/, '' )
38
+ end
39
+ @key
24
40
  end
25
41
 
26
42
 
27
43
  ## special import only attribs
28
- attr_accessor :alt_names_auto ## auto-generated alt names
29
44
  attr_accessor :wikipedia # wikipedia page name (for english (en))
30
45
 
31
46
 
32
47
  def historic?() @year_end ? true : false; end
33
48
  alias_method :past?, :historic?
34
49
 
50
+
35
51
  def wikipedia?() @wikipedia; end
36
52
  def wikipedia_url
37
53
  if @wikipedia
@@ -48,52 +64,17 @@ class Team
48
64
 
49
65
  def initialize( **kwargs )
50
66
  @alt_names = []
51
- @alt_names_auto = []
52
-
67
+
53
68
  update( **kwargs ) unless kwargs.empty?
54
69
  end
55
70
 
56
71
  def update( **kwargs )
57
- @key = kwargs[:key] if kwargs.has_key? :key
58
- @name = kwargs[:name] if kwargs.has_key? :name
59
- @code = kwargs[:code] if kwargs.has_key? :code
60
- @alt_names = kwargs[:alt_names] if kwargs.has_key? :alt_names
72
+ @key = kwargs[:key] if kwargs.has_key?( :key )
73
+ @name = kwargs[:name] if kwargs.has_key?( :name )
74
+ @code = kwargs[:code] if kwargs.has_key?( :code )
75
+ @alt_names = kwargs[:alt_names] if kwargs.has_key?( :alt_names )
61
76
  self ## note - MUST return self for chaining
62
77
  end
63
-
64
-
65
-
66
- ##############################
67
- ## helper methods for import only??
68
- ## check for duplicates
69
- include SportDb::NameHelper
70
-
71
- def duplicates?
72
- names = [name] + alt_names + alt_names_auto
73
- names = names.map { |name| normalize( sanitize(name) ) }
74
-
75
- names.size != names.uniq.size
76
- end
77
-
78
- def duplicates
79
- names = [name] + alt_names + alt_names_auto
80
-
81
- ## calculate (count) frequency and select if greater than one
82
- names.reduce( {} ) do |h,name|
83
- norm = normalize( sanitize(name) )
84
- h[norm] ||= []
85
- h[norm] << name; h
86
- end.select { |norm,names| names.size > 1 }
87
- end
88
-
89
-
90
- def add_variants( name_or_names )
91
- names = name_or_names.is_a?(Array) ? name_or_names : [name_or_names]
92
- names.each do |name|
93
- name = sanitize( name )
94
- self.alt_names_auto += variants( name )
95
- end
96
- end
97
78
  end # class Team
98
79
 
99
80
 
@@ -108,6 +89,15 @@ class NationalTeam < Team
108
89
  self ## note - MUST return self for chaining
109
90
  end
110
91
 
92
+ def pretty_print( printer )
93
+ buf = String.new
94
+ buf << "<NationalTeam: #{@name}"
95
+ ## use code from country or from team ???
96
+ buf << " (#{@code})"
97
+ buf << ">"
98
+
99
+ printer.text( buf )
100
+ end
111
101
  end # class NationalTeam
112
102
 
113
103
 
@@ -116,7 +106,8 @@ end # class NationalTeam
116
106
  # district, geos, year_end, country, etc.
117
107
 
118
108
  class Club < Team
119
- attr_accessor :ground
109
+ attr_accessor :address,
110
+ :ground
120
111
 
121
112
  attr_accessor :a, :b
122
113
  def a?() @a == nil; end ## is a (1st) team / club (i)? if a is NOT set
@@ -136,12 +127,22 @@ class Club < Team
136
127
 
137
128
  def update( **kwargs )
138
129
  super
139
- @city = kwargs[:city] if kwargs.has_key? :city
130
+ @city = kwargs[:city] if kwargs.has_key?( :city )
140
131
  ## todo/fix: use city struct - why? why not?
141
132
  ## todo/fix: add country too or report unused keywords / attributes - why? why not?
142
133
 
143
134
  self ## note - MUST return self for chaining
144
135
  end
136
+
137
+
138
+ def pretty_print( printer )
139
+ buf = String.new
140
+ buf << "<Club: #{@name}"
141
+ buf << " (#{@country.code})" if @country
142
+ buf << ">"
143
+
144
+ printer.text( buf )
145
+ end
145
146
  end # class Club
146
147
 
147
148
  end # module Sports
@@ -3,8 +3,8 @@ module SportDb
3
3
  module Module
4
4
  module Structs
5
5
  MAJOR = 0 ## todo: namespace inside version or something - why? why not??
6
- MINOR = 1
7
- PATCH = 3
6
+ MINOR = 2
7
+ PATCH = 0
8
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
9
 
10
10
  def self.version
@@ -12,11 +12,11 @@ module SportDb
12
12
  end
13
13
 
14
14
  def self.banner
15
- "sportdb-structs/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
15
+ "sportdb-structs/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}] in (#{root})"
16
16
  end
17
17
 
18
18
  def self.root
19
- File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )
19
+ File.expand_path( File.dirname(File.dirname(File.dirname(File.dirname(__FILE__)))) )
20
20
  end
21
21
 
22
22
  end # module Structs
@@ -72,6 +72,45 @@ require 'sportdb/structs/structs/matchlist'
72
72
  require 'sportdb/structs/structs/standings'
73
73
  require 'sportdb/structs/structs/team_usage'
74
74
 
75
+ require 'sportdb/structs/structs/ground'
76
+
77
+
78
+ ##
79
+ ## todo/fix - move "inline" player to structs/player file !!!!
80
+
81
+ module Sports
82
+ ### note - own classes for National(Squad)Player and
83
+ ## Club(Squad)Player and such in use
84
+
85
+ class Player
86
+ attr_reader :name,
87
+ :pos, # position (g/d/m/f) for now
88
+ :nat, # nationality
89
+ :height, # in cm!! (integer) expected
90
+ :birthdate,
91
+ :birthplace
92
+
93
+ attr_accessor :alt_names
94
+
95
+ def initialize( name:,
96
+ pos: nil,
97
+ nat: nil,
98
+ height: nil,
99
+ birthdate: nil,
100
+ birthplace: nil )
101
+ @name = name
102
+ @alt_names = []
103
+ @pos = pos
104
+ @nat = nat
105
+ @height = height
106
+ @birthdate = birthdate
107
+ @birthplace = birthplace
108
+ end
109
+ end # class Player
110
+ end # module Sports
111
+
112
+
113
+
75
114
 
76
115
  require 'sportdb/structs/match_status_parser'
77
116
  require 'sportdb/structs/match_parser_csv'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportdb-structs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-20 00:00:00.000000000 Z
11
+ date: 2024-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: alphabets
@@ -120,17 +120,17 @@ dependencies:
120
120
  requirements:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '3.23'
123
+ version: '4.1'
124
124
  type: :development
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: '3.23'
130
+ version: '4.1'
131
131
  description: sportdb-structs - sport data structures for matches, scores, leagues,
132
132
  seasons, rounds, groups, teams, clubs and more
133
- email: opensport@googlegroups.com
133
+ email: gerald.bauer@gmail.com
134
134
  executables: []
135
135
  extensions: []
136
136
  extra_rdoc_files:
@@ -150,6 +150,7 @@ files:
150
150
  - lib/sportdb/structs/name_helper.rb
151
151
  - lib/sportdb/structs/structs/country.rb
152
152
  - lib/sportdb/structs/structs/goal.rb
153
+ - lib/sportdb/structs/structs/ground.rb
153
154
  - lib/sportdb/structs/structs/group.rb
154
155
  - lib/sportdb/structs/structs/league.rb
155
156
  - lib/sportdb/structs/structs/match.rb
@@ -159,12 +160,6 @@ files:
159
160
  - lib/sportdb/structs/structs/team.rb
160
161
  - lib/sportdb/structs/structs/team_usage.rb
161
162
  - lib/sportdb/structs/version.rb
162
- - test/helper.rb
163
- - test/test_clubs.rb
164
- - test/test_csv_reader.rb
165
- - test/test_match.rb
166
- - test/test_match_status_parser.rb
167
- - test/test_name_helper.rb
168
163
  homepage: https://github.com/sportdb/sport.db
169
164
  licenses:
170
165
  - Public Domain
@@ -186,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
181
  - !ruby/object:Gem::Version
187
182
  version: '0'
188
183
  requirements: []
189
- rubygems_version: 3.3.7
184
+ rubygems_version: 3.4.10
190
185
  signing_key:
191
186
  specification_version: 4
192
187
  summary: sportdb-structs - sport data structures for matches, scores, leagues, seasons,
data/test/helper.rb DELETED
@@ -1,13 +0,0 @@
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
- $LOAD_PATH.unshift( File.expand_path( '../sportdb-langs/lib' ))
5
-
6
-
7
- ## minitest setup
8
- require 'minitest/autorun'
9
-
10
-
11
- ## our own code
12
- require 'sportdb/structs'
13
-
data/test/test_clubs.rb DELETED
@@ -1,38 +0,0 @@
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
@@ -1,30 +0,0 @@
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
data/test/test_match.rb DELETED
@@ -1,30 +0,0 @@
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
@@ -1,57 +0,0 @@
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 = SportDb::Status
12
- StatusParser = SportDb::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
- if status_exp.nil?
28
- assert_nil status
29
- else
30
- assert_equal status_exp, status
31
- end
32
- end
33
- end # method test_find
34
-
35
- def test_parse
36
- [['cancelled ddd', Status::CANCELLED],
37
- ['CANCELLED', Status::CANCELLED],
38
- ['can.', Status::CANCELLED],
39
- ['awarded; comments', Status::AWARDED],
40
- ['awd. - comments', Status::AWARDED],
41
- ['aaa bbb ccc ddd eeee', nil],
42
- ].each do |rec|
43
- str = rec[0]
44
- status_exp = rec[1]
45
- status = StatusParser.parse( str )
46
-
47
- if status_exp.nil? ## for "silencing" minitest warning - Use assert_nil if expecting nil
48
- assert_nil status
49
- else
50
- assert_equal status_exp, status
51
- end
52
- end
53
- end
54
-
55
- end # class TestMatchStatusParser
56
-
57
-
@@ -1,65 +0,0 @@
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 SportDb::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