worldfootball 0.3.1 → 0.3.2

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: 53f1c44ded1d0dcec880df13b61a77265febcceacd88acb5ce883db39914cce9
4
- data.tar.gz: b56eb75f1277026f77c29ee8f4d51788978955accbac5812659d1f3597e9747f
3
+ metadata.gz: e84b891950ee051be8ef6ac91b8783f66ded443013729773c6a56af1e57a496c
4
+ data.tar.gz: 1c0dacfecd6f124b11829b5dee118a3937f48da67072fa5ad09b4fdcbd1a459b
5
5
  SHA512:
6
- metadata.gz: 501b137138a280f74d1cbd50c8f9ebc44ec8f1b7c7c9268005deb2d3a04b2d0046d05bf5a5ff7b3fb7c6f9f7b938423cdd83bb3b983d020bfb26057f2ed463c9
7
- data.tar.gz: 84d716bcbffb32c11da5fd3a6b549a115ecbea0b4747182d84e3e7280cf3ff2de37ee57d37b20288d43f57374727fa907b256ed745b04d8b32b44ae17809d8ee
6
+ metadata.gz: ea8e5b931a08163bd30303cad79e8d0d3ec9a6b4aabed00a9638a2a77fc33aa8887646214c965404d2e938050200aaa5e854c7a87c0f79d6b9c8a7f3561d9601
7
+ data.tar.gz: 347feb8a6fd95541d73611b328d2608d021d8d06d4549f16ab5f5e2405537d8320e8d9b78bda7e645e9916ec77685849c87968adfd97534efed0d350a1d757ee
data/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- ### 0.3.1
1
+ ### 0.3.2
2
2
  ### 0.0.1 / 2024-07-04
3
3
 
4
4
  * Everything is new. First release.
data/Manifest.txt CHANGED
@@ -7,6 +7,7 @@ bin/wfbconf
7
7
  bin/wfbconv
8
8
  bin/wfbdump
9
9
  bin/wfbgen
10
+ bin/wfbsync
10
11
  bin/wfbup
11
12
  config/leagues/africa.csv
12
13
  config/leagues/america.csv
data/bin/wfbconf CHANGED
@@ -34,22 +34,30 @@ args = ARGV
34
34
 
35
35
  Worldfootball.debug = true
36
36
 
37
- ##
38
- ## download fresh copy?
39
- ## Worldfootball::Metal.download_schedule( slug )
40
37
 
41
- key = args[0] || 'eng.1'
38
+ if args.size == 0 ## no args; print all keys
39
+ keys = Worldfootball::LEAGUES.keys
40
+
41
+ pp keys
42
+ puts " #{keys.size} league(s)"
43
+ else
44
+ ##
45
+ ## download fresh copy?
46
+ ## Worldfootball::Metal.download_schedule( slug )
47
+
48
+ key = args[0] || 'eng.1'
42
49
 
43
- league = Worldfootball::LEAGUES[key]
44
- seasons = league.seasons
45
- pp seasons
50
+ league = Worldfootball::LEAGUES[key]
51
+ seasons = league.seasons
52
+ pp seasons
46
53
 
47
- puts " #{key} - #{seasons.size} season(s)"
54
+ puts " #{key} - #{seasons.size} season(s)"
48
55
 
49
- puts
50
- latest = seasons.keys[0]
51
- puts " latest #{latest}: "
52
- pp seasons[latest]
56
+ puts
57
+ latest = seasons.keys[0]
58
+ puts " latest #{latest}: "
59
+ pp seasons[latest]
60
+ end
53
61
 
54
62
 
55
63
  puts "bye"
data/bin/wfbsync ADDED
@@ -0,0 +1,205 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ##
4
+ ## rename to wfbget or wfbpull or such - why? why not?
5
+
6
+
7
+ ## tip: to test run:
8
+ ## ruby -I ./lib bin/wfbsync
9
+ ## or
10
+ ## ruby -I wfb/lib wfb/bin/wfbsync
11
+ ## or
12
+ ## ruby -I wfb/lib wfb/bin/wfbsync -f world.csv
13
+
14
+
15
+ ###
16
+ ## only download if NOT cached
17
+ ## ALWAYS download if season is latest e.g 2024/25 or 2025
18
+
19
+
20
+
21
+ $LOAD_PATH.unshift( '/sports/sportdb/sport.db/timezones/lib' )
22
+ $LOAD_PATH.unshift( '/sports/sportdb/sport.db/fifa/lib' )
23
+ require 'worldfootball'
24
+
25
+
26
+ Webcache.root = if File.exist?( '/sports/cache' )
27
+ puts " setting web cache to >/sports/cache<"
28
+ '/sports/cache'
29
+ else
30
+ './cache'
31
+ end
32
+
33
+ ## convert (default) output directory
34
+ Worldfootball.config.convert.out_dir = if File.exist?( '/sports/cache.wfb')
35
+ puts " setting convert out_dir to >/sports/cache.wfb<"
36
+ '/sports/cache.wfb'
37
+ else
38
+ './tmp' ## use tmp in working dir
39
+ end
40
+
41
+
42
+
43
+ require 'optparse'
44
+
45
+
46
+
47
+ module Worldfootball
48
+ def self.main_sync( args=ARGV )
49
+
50
+ opts = {
51
+ debug: false,
52
+ convert: true,
53
+ file: nil,
54
+ }
55
+
56
+
57
+ parser = OptionParser.new do |parser|
58
+ parser.banner = "Usage: #{$PROGRAM_NAME} [options]"
59
+
60
+ ##
61
+ ## check if git has a offline option?? (use same)
62
+ ## check for other tools - why? why not?
63
+
64
+ ## todo - add a single letter option for offline/cached
65
+
66
+
67
+ parser.on( "--[no-]convert",
68
+ "turn on/off conversion to (tabular) .csv format in #{Worldfootball.config.convert.out_dir} - default is (#{opts[:convert]})" ) do |convert|
69
+ opts[:convert] = convert # true|false
70
+ end
71
+
72
+
73
+ parser.on( "-f FILE", "--file FILE",
74
+ "read leagues (and seasons) via .csv file") do |file|
75
+ opts[:file] = file
76
+ end
77
+ end
78
+
79
+
80
+
81
+
82
+ parser.parse!( args )
83
+
84
+ puts "OPTS:"
85
+ p opts
86
+ puts "ARGV:"
87
+ p args
88
+
89
+
90
+ ## turn on debug output
91
+ if opts[:debug]
92
+ Worldfootball.debug = true
93
+ else
94
+ Worldfootball.debug = false
95
+ end
96
+
97
+
98
+ ####
99
+ # assume leagues
100
+
101
+ datasets = if opts[:file]
102
+ read_leagueset( opts[:file] )
103
+ else
104
+ raise ArgumentError, "file required; sorry"
105
+ end
106
+
107
+
108
+
109
+ ## step 0 - validate and fill-up seasons etc.
110
+ datasets.each do |league_key, seasons|
111
+
112
+ league = find_league!( league_key ) ## league info lookup
113
+
114
+ ## output more page meta info
115
+ puts "league meta:"
116
+ pp league
117
+
118
+ ## note - default to latest season of league
119
+ ## might be 2024/25 or 2024 or
120
+ # for world cup 2022 or such
121
+ if seasons.empty?
122
+ season = Season(league.seasons.keys[0])
123
+ seasons << season
124
+ end
125
+ end
126
+
127
+
128
+ ###
129
+ ## collect league names & more
130
+ extra = {}
131
+
132
+
133
+ ## step 1 - download
134
+ ##
135
+
136
+ ## note - only download if NOT cached
137
+ ## or if seasson is latest
138
+
139
+
140
+
141
+ datasets.each do |league_key, seasons|
142
+ league = find_league!( league_key ) ## league info lookup
143
+ seasons.each do |season|
144
+ pages = league.pages!( season: season )
145
+ puts
146
+ pp [league.key, season.key]
147
+ pp pages
148
+ puts " #{pages.size} page(s)"
149
+
150
+
151
+ ### check for latest season
152
+ ### if latest than ALWAYS overwrite (that is, do NOT use cached version)
153
+ overwrite = false
154
+
155
+ overwrite = true if season == Season('2025') ||
156
+ season == Season('2024/25')
157
+
158
+
159
+ pages.each_with_index do |(slug,_),i|
160
+ puts "==> #{i+1}/#{pages.size} - #{league_key} @ #{slug}..."
161
+
162
+ if !overwrite && Webcache.cached?( Metal.schedule_url( slug ))
163
+ puts " OK #{league_key} #{season.key} - #{slug} (do NOT overwrite)"
164
+ else
165
+ Metal.download_schedule( slug )
166
+ end
167
+ end
168
+
169
+
170
+ ##
171
+ ## check for/collect extra (debug) league info
172
+ pages.each_with_index do |(slug,_),i|
173
+ puts "==> #{i+1}/#{pages.size} - #{league_key} @ #{slug}..."
174
+ page = Page::Schedule.from_cache( slug )
175
+ matches = page.matches
176
+
177
+ puts " #{matches.size} match(es)"
178
+
179
+ league_extra = extra[ league.key ] ||= {}
180
+ season_extra = league_extra[ season.key] ||= { names: [] }
181
+ season_extra[:names] << page.title
182
+ end
183
+ end # each seasons
184
+ end # each league
185
+
186
+
187
+ if opts[:convert]
188
+ ## step 2 - convert
189
+ datasets.each do |league_key, seasons|
190
+ seasons.each do |season|
191
+ ## write out (export to) comma-separated values (.csv) datafile
192
+ convert( league: league_key,
193
+ season: season )
194
+ end
195
+ end
196
+ end
197
+
198
+ end # def self.main
199
+ end # module Worldfootball
200
+
201
+
202
+ Worldfootball.main_sync( ARGV )
203
+
204
+
205
+ puts "bye"
@@ -40,11 +40,16 @@ mx.3.b, mex-lp-serie-b-2024-2025-apertura
40
40
 
41
41
 
42
42
  ## change to mls - why? why not?
43
+ ## note - add alt msl for now
44
+
43
45
  us.1, usa-major-league-soccer-2024
46
+ mls, usa-major-league-soccer-2024
47
+
44
48
  us.2, usa-usl-championship-2024
45
49
  us.cup, usa-u-s-open-cup-2024
46
50
 
47
51
 
52
+
48
53
  concacaf.cl, concacaf-champions-league-2020
49
54
 
50
55
 
@@ -99,7 +104,7 @@ ve.1, ven-primera-division-2024-clausura
99
104
 
100
105
 
101
106
  copa.l, copa-libertadores-2020
102
-
107
+ copa.s, copa-sudamericana-2025
103
108
 
104
109
  ###################
105
110
  ### Central America & Caribbean Islands
@@ -43,19 +43,32 @@ sk.1, svk-super-liga-2024-2025
43
43
  pl.1, pol-ekstraklasa-2024-2025
44
44
 
45
45
 
46
+
46
47
  #########
47
48
  ### British Isles / Western Europe
49
+ ##
50
+ ## fix - move to config europe-british_isles !!!
48
51
 
49
52
  eng.1, eng-premier-league-2024-2025
50
53
  eng.2, eng-championship-2024-2025
51
54
  eng.3, eng-league-one-2024-2025
52
55
  eng.4, eng-league-two-2024-2025
53
56
  eng.5, eng-national-league-2024-2025
57
+
58
+
59
+ ### use fa cup and efl cup (league cup) as codes for now
60
+ ## use eng.cup.fa and cup.efl instead - why? why not?
61
+ eng.fa.cup, eng-fa-cup-2023-2024
62
+ eng.efl.cup, eng-league-cup-2024-2025
63
+ ## "old" codes for compat (cup and cup.l aka league cup)
54
64
  eng.cup, eng-fa-cup-2023-2024 ### update to 2024-2025 later!!!
55
65
  eng.cup.l, eng-league-cup-2024-2025
56
66
 
67
+
68
+
69
+
57
70
  sco.1, sco-premiership-2024-2025
58
- wal.1, wal-premier-league-2024-2025
71
+ wal.1, wal-premier-league-2024-2025
59
72
  nir.1, nir-premier-league-2024-2025
60
73
  ie.1, irl-premier-division-2024
61
74
 
data/config/rounds.csv CHANGED
@@ -1,22 +1,30 @@
1
1
  key, name1, name2
2
2
 
3
3
  ## de to en
4
- *, 1. Runde, Round 1
5
- *, 2. Runde, Round 2
6
- *, 3. Runde, Round 3
7
- *, 4. Runde, Round 4
8
- *, 5. Runde, Round 5
9
- *, 6. Runde, Round 6
10
- *, 7. Runde, Round 7
11
- *, 8. Runde, Round 8
12
- *, 9. Runde, Round 9
13
- *, Achtelfinale, Round of 16
14
- *, Viertelfinale, Quarterfinals
15
- *, Halbfinale, Semifinals
16
- *, Finale, Final
17
-
4
+ *, 1. Runde, Round 1
5
+ *, 2. Runde, Round 2
6
+ *, 3. Runde, Round 3
7
+ *, 4. Runde, Round 4
8
+ *, 5. Runde, Round 5
9
+ *, 6. Runde, Round 6
10
+ *, 7. Runde, Round 7
11
+ *, 8. Runde, Round 8
12
+ *, 9. Runde, Round 9
13
+ *, Sechzehntelfinal, Round of 32
14
+ *, Achtelfinale, Round of 16
15
+ *, Viertelfinale, Quarterfinals
16
+ *, Halbfinale, Semifinals
17
+ *, Finale, Final
18
+
19
+ *, Spiel um Platz 6, Match 6th Place
18
20
  *, Spiel um Platz 3, Match for 3rd place
19
21
 
22
+ *, 11. Platz, Match 11th Place
23
+ *, 9. Platz, Match 9th Place
24
+ *, 7. Platz, Match 7th Place
25
+ *, 5. Platz, Match 5th Place
26
+
27
+
20
28
  *, Vorrunde, Preliminary round
21
29
 
22
30
  *, Qual. 1. Runde, Qual. Round 1
@@ -24,11 +32,35 @@ key, name1, name2
24
32
 
25
33
 
26
34
  *, Entscheidungsspiel, Decider
27
- *, Finalrunde, Finals
35
+ *, Finalrunde, Finals ## use Final round ???
28
36
  *, Ligaphase, League phase
29
37
 
30
38
 
31
39
 
40
+ *, Gruppe A, Group A
41
+ *, Gruppe B, Group B
42
+ *, Gruppe C, Group C
43
+ *, Gruppe D, Group D
44
+ *, Gruppe E, Group E
45
+ *, Gruppe F, Group F
46
+ *, Gruppe G, Group G
47
+ *, Gruppe H, Group H
48
+ *, Gruppe I, Group I
49
+ *, Gruppe J, Group J
50
+ *, Gruppe K, Group K
51
+ *, Gruppe L, Group L
52
+
53
+ *, Gruppe 1, Group 1
54
+ *, Gruppe 2, Group 2
55
+ *, Gruppe 3, Group 3
56
+ *, Gruppe 4, Group 4
57
+ *, Gruppe 5, Group 5
58
+ *, Gruppe 6, Group 6
59
+ *, Gruppe 7, Group 7
60
+ *, Gruppe 8, Group 8
61
+
62
+
63
+
32
64
 
33
65
  ## es to en
34
66
  *, Recalificación, Reclassification
@@ -45,47 +77,50 @@ mx.2, Qual. 2. Runde, Play-in round 2
45
77
 
46
78
  ###
47
79
  ## quick fix - move groups to new groups column!!!!
48
- ar.1, Gruppe A, Group
49
- ar.1, Gruppe B, Group
50
- ar.1, Gruppe C, Group
51
- ar.1, Gruppe D, Group
52
- ar.1, Gruppe E, Group
53
- ar.1, Gruppe F, Group
54
- ar.1, Gruppe 1, Group
55
- ar.1, Gruppe 2, Group
56
-
57
- co.1, Gruppe A, Group
58
- co.1, Gruppe B, Group
59
-
60
- caf.cl, Gruppe A, Group
61
- caf.cl, Gruppe B, Group
62
- caf.cl, Gruppe C, Group
63
- caf.cl, Gruppe D, Group
64
-
65
-
66
- uefa.cl, Gruppe A, Group
67
- uefa.cl, Gruppe B, Group
68
- uefa.cl, Gruppe C, Group
69
- uefa.cl, Gruppe D, Group
70
- uefa.cl, Gruppe E, Group
71
- uefa.cl, Gruppe F, Group
72
- uefa.cl, Gruppe G, Group
73
- uefa.cl, Gruppe H, Group
74
-
75
- uefa.el, Gruppe A, Group
76
- uefa.el, Gruppe B, Group
77
- uefa.el, Gruppe C, Group
78
- uefa.el, Gruppe D, Group
79
- uefa.el, Gruppe E, Group
80
- uefa.el, Gruppe F, Group
81
- uefa.el, Gruppe G, Group
82
- uefa.el, Gruppe H, Group
83
-
84
- uefa.conf, Gruppe A, Group
85
- uefa.conf, Gruppe B, Group
86
- uefa.conf, Gruppe C, Group
87
- uefa.conf, Gruppe D, Group
88
- uefa.conf, Gruppe E, Group
89
- uefa.conf, Gruppe F, Group
90
- uefa.conf, Gruppe G, Group
91
- uefa.conf, Gruppe H, Group
80
+ #### no longer use - keep group (do NOT generalize)
81
+ # ar.1, Gruppe A, Group
82
+ # ar.1, Gruppe B, Group
83
+ # ar.1, Gruppe C, Group
84
+ # ar.1, Gruppe D, Group
85
+ # ar.1, Gruppe E, Group
86
+ # ar.1, Gruppe F, Group
87
+ # ar.1, Gruppe 1, Group
88
+ # ar.1, Gruppe 2, Group
89
+
90
+ # co.1, Gruppe A, Group
91
+ # co.1, Gruppe B, Group
92
+
93
+
94
+
95
+ # caf.cl, Gruppe A, Group
96
+ # caf.cl, Gruppe B, Group
97
+ # caf.cl, Gruppe C, Group
98
+ # caf.cl, Gruppe D, Group
99
+
100
+
101
+ # uefa.cl, Gruppe A, Group
102
+ # uefa.cl, Gruppe B, Group
103
+ # uefa.cl, Gruppe C, Group
104
+ # uefa.cl, Gruppe D, Group
105
+ # uefa.cl, Gruppe E, Group
106
+ # uefa.cl, Gruppe F, Group
107
+ # uefa.cl, Gruppe G, Group
108
+ # uefa.cl, Gruppe H, Group
109
+
110
+ # uefa.el, Gruppe A, Group
111
+ # uefa.el, Gruppe B, Group
112
+ # uefa.el, Gruppe C, Group
113
+ # uefa.el, Gruppe D, Group
114
+ # uefa.el, Gruppe E, Group
115
+ # uefa.el, Gruppe F, Group
116
+ # uefa.el, Gruppe G, Group
117
+ # uefa.el, Gruppe H, Group
118
+
119
+ # uefa.conf, Gruppe A, Group
120
+ # uefa.conf, Gruppe B, Group
121
+ # uefa.conf, Gruppe C, Group
122
+ # uefa.conf, Gruppe D, Group
123
+ # uefa.conf, Gruppe E, Group
124
+ # uefa.conf, Gruppe F, Group
125
+ # uefa.conf, Gruppe G, Group
126
+ # uefa.conf, Gruppe H, Group
data/config/stages.csv CHANGED
@@ -37,12 +37,9 @@ gr.1, Playoffs, Playoffs
37
37
  gr.1, Spiel um Platz 6, Match 6th Place
38
38
 
39
39
 
40
-
41
- mx.1, Apertura Playoffs, Apertura - Liguilla
42
- mx.1, Clausura Playoffs, Clausura - Liguilla
43
-
44
-
45
-
46
40
  nz.1, Playoffs, Playoff Finals
47
41
 
48
42
 
43
+
44
+ ## mx.1, Apertura Playoffs, Apertura - Liguilla
45
+ ## mx.1, Clausura Playoffs, Clausura - Liguilla
@@ -73,11 +73,29 @@ def self.build( rows, season:, league:, stage: '' ) ## rename to fixup or such
73
73
 
74
74
  date_str = row[:date]
75
75
  time_str = row[:time]
76
+
77
+
76
78
  team1_str = row[:team1]
77
79
  team2_str = row[:team2]
78
- score_str = row[:score]
80
+
81
+ ## R. Betis / Jag. Białystok v Celje / Fiorentina
82
+ ## Legia Warszawa / Chelsea v Djurgårdens / Rapid Wien
83
+ team1_ref = row[:team1_ref]
84
+ team2_ref = row[:team2_ref]
85
+
86
+ ## reset team name to N.N. if team_ref is nil and name include " / "
87
+ if team1_ref.nil? && team1_str.index( ' / ')
88
+ puts "!! WARN - change placeholder team #{team1_str} to N.N."
89
+ team1_str = 'N.N.'
90
+ end
91
+ if team2_ref.nil? && team2_str.index( ' / ')
92
+ puts "!! WARN - change placeholder team #{team2_str} to N.N."
93
+ team2_str = 'N.N.'
94
+ end
79
95
 
80
96
 
97
+ score_str = row[:score]
98
+
81
99
 
82
100
  ### check for score_error; first (step 1) lookup by date
83
101
  score_error = score_errors[ date_str ]
@@ -53,6 +53,14 @@ def self.convert( league:, season:,
53
53
  ## e.g. {:count=>2, :name=>"AS Arta", :ref=>"as-arta"},
54
54
  ## {:count=>4, :name=>"Dekedaha FC", :ref=>"dekedaha-fc"},
55
55
  ## ...
56
+ ### {:count=>2, :name=>"Arsenal / Real Madrid", :ref=>nil},
57
+ ## {:count=>2, :name=>"PSG / Aston Villa", :ref=>nil},
58
+ ## {:count=>2, :name=>"Barcelona / Dortmund", :ref=>nil},
59
+ ## {:count=>2, :name=>"Bayern / Inter", :ref=>nil},
60
+ ## {:count=>1, :name=>"Sieger HF 1", :ref=>nil},
61
+ ## {:count=>1, :name=>"Sieger HF 2", :ref=>nil}]
62
+
63
+
56
64
  teams.each do |h|
57
65
  team_count = h[:count]
58
66
  team_name = norm_team( h[:name] ) ## note: norm team name!!!
@@ -66,7 +74,10 @@ def self.convert( league:, season:,
66
74
  ## note: skip N.N. (place holder team)
67
75
  ## team_ref is nil etc.
68
76
  next if team_name == 'N.N.'
69
-
77
+ ### warn if team_ref is nil and skip !!!
78
+ next if team_ref.nil?
79
+
80
+
70
81
  team_stat = teams_by_ref[ team_ref ] ||= { count: 0,
71
82
  names: [] }
72
83
  team_stat[:count] += team_count
@@ -86,7 +97,7 @@ def self.convert( league:, season:,
86
97
 
87
98
  clubs_intl = ['uefa.cl', 'uefa.el', 'uefa.conf',
88
99
  'uefa.cl.q', 'uefa.el.q', 'uefa.conf.q',
89
- 'copa.l',
100
+ 'copa.l', 'copa.s',
90
101
  'concacaf.cl',
91
102
  'caf.cl',
92
103
  'afl',
@@ -130,15 +141,19 @@ def self.convert( league:, season:,
130
141
 
131
142
  ## quick hack
132
143
  ## add country (fifa) codes to team names
144
+ ##
145
+ ## note - some placeholder teams have no ref!! and, thus no entry with country code
133
146
  recs.each do |rec|
134
147
  team1_org = rec[5]
135
- if team1_org != 'N.N.' ## note - skip place holder; keep as-is
148
+ if team1_org != 'N.N.' && ## note - skip place holder; keep as-is
149
+ teams_by_name[team1_org]
136
150
  country_code = teams_by_name[team1_org][:code]
137
151
  rec[5] = "#{team1_org} (#{country_code})"
138
152
  end
139
153
 
140
154
  team2_org = rec[8]
141
- if team2_org != 'N.N.' ## note - skip place holder; keep as-is
155
+ if team2_org != 'N.N.' && ## note - skip place holder; keep as-is
156
+ teams_by_name[team2_org]
142
157
  country_code = teams_by_name[team2_org][:code]
143
158
  rec[8] = "#{team2_org} (#{country_code})"
144
159
  end
@@ -2,7 +2,7 @@
2
2
  module Worldfootball
3
3
  MAJOR = 0 ## todo: namespace inside version or something - why? why not??
4
4
  MINOR = 3
5
- PATCH = 1
5
+ PATCH = 2
6
6
  VERSION = [MAJOR,MINOR,PATCH].join('.')
7
7
 
8
8
  def self.version
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: worldfootball
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
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-12-31 00:00:00.000000000 Z
11
+ date: 2025-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: football-timezones
@@ -123,6 +123,7 @@ executables:
123
123
  - wfbconv
124
124
  - wfbdump
125
125
  - wfbgen
126
+ - wfbsync
126
127
  - wfbup
127
128
  extensions: []
128
129
  extra_rdoc_files:
@@ -139,6 +140,7 @@ files:
139
140
  - bin/wfbconv
140
141
  - bin/wfbdump
141
142
  - bin/wfbgen
143
+ - bin/wfbsync
142
144
  - bin/wfbup
143
145
  - config/leagues/africa.csv
144
146
  - config/leagues/america.csv