sportdb-structs 0.3.0 → 0.4.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: c966a814cdade0a21ea6453fc1900bfc8c384a8ceecaa34dc158e6d60bfd39b5
4
- data.tar.gz: 5086fb02b42d15da5f93780121de2ba77012de34be0ff51134a06b97136c5f00
3
+ metadata.gz: 70fb10b4bb83d5146eb004d6c3143045e0efa430095a091429c51695a15461c6
4
+ data.tar.gz: b8377ca328aec94770b9d7e90fc60b83cbf2264a4b9ce295af7acd4846586f78
5
5
  SHA512:
6
- metadata.gz: fb26346fb4a76ced79e7bbb4518e5bcdb26b7128583a17ff963e3b1bc8c2198d41115babfadb06fc9331fb21c5b06059162510961f330cce58dee96aa7e16c17
7
- data.tar.gz: b2d9c498d7cd119637e71b546e84d586329dd6e9186ffaaf8c93d27d5a9e3b2f4b8e1c37a69f09cbdfbc98f94ffb695b632c91c81c35c6c6dddae3c0d60e3c06
6
+ metadata.gz: edb013626541448b4f4211d2afc779f018fe27a7b2b33af99bfce9a0876d243d4ba4079677ce7e14e5911ad7e013992632600dd5bee0958db7fc37900ded7a55
7
+ data.tar.gz: '08964910e951e7c92ef3a46a5348b1111109d326d9aed0a41311a63047de63f6a11c21bffbe8cb0f5becdb78240b66ab17817e89b2eca53059ea7b8ed601756a'
data/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- ### 0.3.0
1
+ ### 0.4.0
2
2
 
3
3
  ### 0.0.1 / 2020-08-24
4
4
 
data/Manifest.txt CHANGED
@@ -4,12 +4,14 @@ README.md
4
4
  Rakefile
5
5
  lib/sportdb/structs.rb
6
6
  lib/sportdb/structs/country.rb
7
+ lib/sportdb/structs/event_info.rb
7
8
  lib/sportdb/structs/goal.rb
8
9
  lib/sportdb/structs/ground.rb
9
10
  lib/sportdb/structs/group.rb
10
11
  lib/sportdb/structs/league.rb
11
12
  lib/sportdb/structs/match.rb
12
13
  lib/sportdb/structs/matchlist.rb
14
+ lib/sportdb/structs/name_helper.rb
13
15
  lib/sportdb/structs/round.rb
14
16
  lib/sportdb/structs/standings.rb
15
17
  lib/sportdb/structs/team.rb
data/README.md CHANGED
@@ -5,7 +5,6 @@
5
5
  * bugs :: [github.com/sportdb/sport.db/issues](https://github.com/sportdb/sport.db/issues)
6
6
  * gem :: [rubygems.org/gems/sportdb-structs](https://rubygems.org/gems/sportdb-structs)
7
7
  * rdoc :: [rubydoc.info/gems/sportdb-structs](http://rubydoc.info/gems/sportdb-structs)
8
- * forum :: [opensport](http://groups.google.com/group/opensport)
9
8
 
10
9
 
11
10
 
data/Rakefile CHANGED
@@ -26,6 +26,6 @@ Hoe.spec 'sportdb-structs' do
26
26
  ]
27
27
 
28
28
  self.spec_extras = {
29
- required_ruby_version: '>= 2.2.2'
29
+ required_ruby_version: '>= 3.1.0'
30
30
  }
31
31
  end
@@ -0,0 +1,65 @@
1
+ module Sports
2
+
3
+ class EventInfo
4
+ ## "high level" info (summary) about event
5
+ ## (like a "wikipedia infobox")
6
+ ## use for checking dataset imports; lets you check e.g.
7
+ ## - dates within range
8
+ ## - number of teams e.g. 20
9
+ ## - matches played e.g. 380
10
+ ## - goals scored e.g. 937
11
+ ## etc.
12
+
13
+ attr_reader :league,
14
+ :season,
15
+ :teams,
16
+ :matches,
17
+ :goals,
18
+ :start_date,
19
+ :end_date
20
+
21
+ def initialize( league:, season:,
22
+ start_date: nil, end_date: nil,
23
+ teams: nil,
24
+ matches: nil,
25
+ goals: nil )
26
+
27
+ @league = league
28
+ @season = season
29
+
30
+ @start_date = start_date
31
+ @end_date = end_date
32
+
33
+ @teams = teams ## todo/check: rename/use teams_count ??
34
+ @matches = matches ## todo/check: rename/use match_count ??
35
+ @goals = goals
36
+ end
37
+
38
+ def include?( date )
39
+ ## todo/fix: add options e.g.
40
+ ## - add delta/off_by_one or such?
41
+ ## - add strict (for) only return true if date range (really) defined (no generic auto-rules)
42
+
43
+ ### note: for now allow off by one error (via timezone/local time errors)
44
+ ## todo/fix: issue warning if off by one!!!!
45
+ if @start_date && @end_date
46
+ date >= (@start_date-1) &&
47
+ date <= (@end_date+1)
48
+ else
49
+ if @season.year?
50
+ # assume generic rule
51
+ ## same year e.g. Jan 1 - Dec 31; always true for now
52
+ date.year == @season.start_year
53
+ else
54
+ # assume generic rule
55
+ ## July 1 - June 30 (Y+1)
56
+ ## - todo/check -start for some countries/leagues in June 1 or August 1 ????
57
+ date >= Date.new( @season.start_year, 7, 1 ) &&
58
+ date <= Date.new( @season.end_year, 6, 30 )
59
+ end
60
+ end
61
+ end # method include?
62
+ alias_method :between?, :include?
63
+ end # class EventInfo
64
+
65
+ end # module Sports
@@ -178,8 +178,59 @@ class Match
178
178
  # def scorei_str # pretty print (half time) scores; convenience method
179
179
  # "#{@score1i}-#{@score2i}"
180
180
  # end
181
- end # class Match
182
181
 
182
+
183
+ def as_json
184
+ ##
185
+ data = {}
186
+
187
+ ## check round
188
+ if @round
189
+ data[:round ] = if round.is_a?( Integer )
190
+ "Matchday #{@round}"
191
+ else ## assume string
192
+ @round
193
+ end
194
+ end
195
+
196
+
197
+ data[:num] = @num if @num
198
+ if @date
199
+ ## assume 2020-09-19 date format!!
200
+ data[:date] = @date.is_a?( String ) ? @date : @date.strftime('%Y-%m-%d')
201
+
202
+ data[:time] = @time if @time
203
+ end
204
+
205
+ data[:team1] = @team1.is_a?( String ) ? @team1 : @team1.name
206
+ data[:team2] = @team2.is_a?( String ) ? @team2 : @team2.name
207
+
208
+ data[:score] = {}
209
+
210
+ data[:score][:ht] = [@score1i, @score2i] if @score1i && @score2i
211
+ data[:score][:ft] = [@score1, @score2] if @score1 && @score2
212
+ data[:score][:et] = [@score1et, @score2et] if @score1et && @score2et
213
+ data[:score][:p] = [@score1p, @score2p] if @score1p && @score2p
214
+
215
+ data[:group] = @group if @group
216
+
217
+ =begin
218
+ "round": "Spieltag 1",
219
+ "date": "2020-09-19",
220
+ "team1": "Eintracht Frankfurt",
221
+ "team2": "Arminia Bielefeld",
222
+ "score": {
223
+ "ft": [
224
+ 1,
225
+ 1
226
+ ]
227
+ }
228
+ =end
229
+ data
230
+ end
231
+
232
+
233
+ end # class Match
183
234
  end # module Sports
184
235
 
185
236
 
@@ -0,0 +1,87 @@
1
+
2
+ module SportDb
3
+ module NameHelper
4
+
5
+
6
+ ## note: allow placeholder years to e.g. (-___) or (-????)
7
+ ## for marking missing (to be filled in) years
8
+ ## e.g. (1887-1911), (-2013),
9
+ ## (1946-2001, 2013-) etc.
10
+ ## todo/check: make more strict e.g. only accept 4-digit years? - why? why not?
11
+ YEAR_RE = %r{\(
12
+ [0-9, ?_-]+? # note: non-greedy (minimum/first) match
13
+ \)}x
14
+
15
+ def strip_year( name )
16
+ ## check for year(s) e.g. (1887-1911), (-2013),
17
+ ## (1946-2001, 2013-) etc.
18
+ ## todo/check: only sub once (not global) - why? why not?
19
+ name.gsub( YEAR_RE, '' ).strip
20
+ end
21
+
22
+ def has_year?( name ) name =~ YEAR_RE; end
23
+
24
+
25
+ LANG_RE = %r{\[
26
+ [a-z]{1,2} # note also allow single-letter [a] or [d] or [e] - why? why not?
27
+ \]}x
28
+ def strip_lang( name )
29
+ name.gsub( LANG_RE, '' ).strip
30
+ end
31
+
32
+ def has_lang?( name ) name =~ LANG_RE; end
33
+
34
+
35
+ def sanitize( name )
36
+ ## check for year(s) e.g. (1887-1911), (-2013),
37
+ ## (1946-2001,2013-) etc.
38
+ name = strip_year( name )
39
+ ## check lang codes e.g. [en], [fr], etc.
40
+ name = strip_lang( name )
41
+ name
42
+ end
43
+
44
+
45
+ ## note: also add (),’,− etc. e.g.
46
+ ## Estudiantes (LP) => Estudiantes LP
47
+ ## Saint Patrick’s Athletic FC => Saint Patricks Athletic FC
48
+ ## Myllykosken Pallo −47 => Myllykosken Pallo 47
49
+ ##
50
+ ## add & too!!
51
+ ## e.g. Brighton & Hove Albion => Brighton Hove Albion -- and others in England
52
+
53
+ NORM_RE = %r{
54
+ [.'’º/()&_−-]
55
+ }x # note: in [] dash (-) if last doesn't need to get escaped
56
+ ## note: remove all dots (.), dash (-), ', º, /, etc.
57
+ # . U+002E (46) - FULL STOP
58
+ # ' U+0027 (39) - APOSTROPHE
59
+ # ’ U+2019 (8217) - RIGHT SINGLE QUOTATION MARK
60
+ # º U+00BA (186) - MASCULINE ORDINAL INDICATOR
61
+ # / U+002F (47) - SOLIDUS
62
+ # ( U+0028 (40) - LEFT PARENTHESIS
63
+ # ) U+0029 (41) - RIGHT PARENTHESIS
64
+ # − U+2212 (8722) - MINUS SIGN
65
+ # - U+002D (45) - HYPHEN-MINUS
66
+
67
+ ## for norm(alizing) names
68
+ def strip_norm( name )
69
+ name.gsub( NORM_RE, '' )
70
+ end
71
+
72
+ def normalize( name )
73
+ # note: do NOT call sanitize here (keep normalize "atomic" for reuse)
74
+ name = strip_norm( name )
75
+ name = name.gsub( ' ', '' ) # note: also remove all spaces!!!
76
+
77
+ ## todo/check: use our own downcase - why? why not?
78
+ name = downcase_i18n( name ) ## do NOT care about upper and lowercase for now
79
+ name
80
+ end
81
+
82
+
83
+ def variants( name ) Variant.find( name ); end
84
+
85
+ end # module NameHelper
86
+ end # module SportDb
87
+
@@ -18,18 +18,19 @@ module Sports
18
18
  @auto = auto # auto-created (inline reference/header without proper definition before)
19
19
  end
20
20
 
21
- def pretty_print( printer )
22
- ## todo/check - how to display/format key - use () or not - why? why not?
21
+ def pretty_print( printer )
22
+ ## todo/check - how to display/format key - use () or not - why? why not?
23
23
  buf = String.new
24
24
  buf << "<Round: "
25
25
  buf << "(#{@num}) " if @num
26
26
  buf << "#{@name}, "
27
- buf << "#{@start_date} - #{@end_date}"
27
+ buf << "#{@start_date}"
28
+ buf << " - #{@end_date}" if @start_date != @end_date
28
29
  buf << " (knockout)" if @knockout
29
30
  buf << " (auto)" if @auto
30
31
  buf << ">"
31
-
32
- printer.text( buf )
32
+
33
+ printer.text( buf )
33
34
  end
34
35
  end # class Round
35
36
  end # module Sports
@@ -3,7 +3,7 @@ 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 = 3
6
+ MINOR = 4
7
7
  PATCH = 0
8
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
9
 
@@ -21,6 +21,12 @@ require_relative 'structs/matchlist'
21
21
  require_relative 'structs/standings'
22
22
  require_relative 'structs/team_usage'
23
23
 
24
+ require_relative 'structs/event_info'
25
+
26
+
27
+ ## shared support helpers/machinery
28
+ require_relative 'structs/name_helper'
29
+
24
30
 
25
31
  ##
26
32
  ## todo/fix - move "inline" player to structs/player file !!!!
@@ -59,13 +65,45 @@ end # module Sports
59
65
 
60
66
 
61
67
 
68
+
69
+
70
+ ##
71
+ ## add all structs in SportDb::Import namespace too
72
+ module SportDb
73
+ module Import
74
+ Season = ::Season ## add a convenience alias for top-level Season class
75
+
76
+ ## add "old" convenience aliases for structs - why? why not?
77
+ ## todo/check: just use include Sports !!!!
78
+ Country = ::Sports::Country
79
+ League = ::Sports::League
80
+ Group = ::Sports::Group
81
+ Round = ::Sports::Round
82
+ Match = ::Sports::Match
83
+ Matchlist = ::Sports::Matchlist
84
+ Goal = ::Sports::Goal
85
+ Team = ::Sports::Team
86
+ NationalTeam = ::Sports::NationalTeam
87
+ Club = ::Sports::Club
88
+ Standings = ::Sports::Standings
89
+ TeamUsage = ::Sports::TeamUsage
90
+
91
+ Ground = ::Sports::Ground
92
+
93
+ Player = ::Sports::Player
94
+
95
+ EventInfo = ::Sports::EventInfo
96
+ end # module Import
97
+ end # module SportDb
98
+
99
+
100
+
101
+
62
102
  #####
63
103
  # note: add Sport and Football convenience alias - why? why not?
64
104
  Sport = Sports
65
105
  Football = Sports
66
106
 
67
107
 
68
-
69
-
70
108
  puts SportDb::Module::Structs.banner # say hello
71
109
 
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.3.0
4
+ version: 0.4.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: 2024-08-22 00:00:00.000000000 Z
11
+ date: 2024-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: alphabets
@@ -102,12 +102,14 @@ files:
102
102
  - Rakefile
103
103
  - lib/sportdb/structs.rb
104
104
  - lib/sportdb/structs/country.rb
105
+ - lib/sportdb/structs/event_info.rb
105
106
  - lib/sportdb/structs/goal.rb
106
107
  - lib/sportdb/structs/ground.rb
107
108
  - lib/sportdb/structs/group.rb
108
109
  - lib/sportdb/structs/league.rb
109
110
  - lib/sportdb/structs/match.rb
110
111
  - lib/sportdb/structs/matchlist.rb
112
+ - lib/sportdb/structs/name_helper.rb
111
113
  - lib/sportdb/structs/round.rb
112
114
  - lib/sportdb/structs/standings.rb
113
115
  - lib/sportdb/structs/team.rb
@@ -127,7 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
129
  requirements:
128
130
  - - ">="
129
131
  - !ruby/object:Gem::Version
130
- version: 2.2.2
132
+ version: 3.1.0
131
133
  required_rubygems_version: !ruby/object:Gem::Requirement
132
134
  requirements:
133
135
  - - ">="