sportdb-writers 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10b19eac6f6a70a144de7201b0b72f60628e169e91ca51880cfde5bcc6b52690
4
- data.tar.gz: 371f70efc9ffb6fd2ce77eb8087acfbdda68b2ced50019a3fd85ce9582331104
3
+ metadata.gz: 3106f4f09e01a5434628f1818c445de04b332df0d2b9b57787eee944444dc715
4
+ data.tar.gz: aeb997f0576680cf2500f118ebac827303983021992a714ca0fd65ad03e395fe
5
5
  SHA512:
6
- metadata.gz: 69d5f4ce4d13bdb73c3b5a96fd92583f043c15fecaa2209ffa81c56c4204adfb3d042b25edfd28e19c8cf89461d01f5847d563819841d8fb810d1673de15784b
7
- data.tar.gz: cfb92a600bafc109e13f12bf8d513be4ce3003b358aef32581a9880719a47644d9308d129c8e808c39a1678d065789cfc0ed2bd4a3f57f5f8f0c00691ddb11f5
6
+ metadata.gz: 53a96142090a0b7edbc2dadda557cff02124103e655bf801f47b08d61d658b8218c13f03220f86cf7d29cc0afebab329461d3e42c88000dafeff57e79306aeef
7
+ data.tar.gz: 6a7b9ceab580231e026a7b2dfe232ae14bad110bfa8c727e4e20a6329252994412916339354f6a93f9f7a61003a87f2969ecdbef7a94a189a0a1a21027d0cf4d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,4 @@
1
- ### 0.3.0
2
-
1
+ ### 0.4.0
3
2
  ### 0.0.1 / 2020-11-15
4
3
 
5
4
  * Everything is new. First release.
data/Manifest.txt CHANGED
@@ -2,15 +2,7 @@ CHANGELOG.md
2
2
  Manifest.txt
3
3
  README.md
4
4
  Rakefile
5
- bin/fbgen
6
- bin/fbtxt
7
- config/leagues_america.csv
8
- config/leagues_europe.csv
9
- config/leagues_world.csv
10
- lib/sportdb/fbgen/main.rb
11
- lib/sportdb/fbtxt/main.rb
12
5
  lib/sportdb/writers.rb
13
6
  lib/sportdb/writers/goals.rb
14
- lib/sportdb/writers/league_config.rb
15
7
  lib/sportdb/writers/txt_writer.rb
16
8
  lib/sportdb/writers/version.rb
@@ -68,16 +68,19 @@ def self.build( matches, rounds: true )
68
68
  buf = String.new
69
69
  # e.g. 13 April – 25 September 2024
70
70
  # or 16 August 2024 – 25 May 2025
71
- buf << "# Date "
72
- start_date = stats['date']['start_date']
73
- end_date = stats['date']['end_date']
74
- if start_date.year != end_date.year
75
- buf << "#{start_date.strftime('%a %b/%-d %Y')} - #{end_date.strftime('%a %b/%-d %Y')}"
76
- else
77
- buf << "#{start_date.strftime('%a %b/%-d')} - #{end_date.strftime('%a %b/%-d %Y')}"
71
+ ## note - date is optional!!
72
+ if stats['date']['start_date']
73
+ buf << "# Date "
74
+ start_date = stats['date']['start_date']
75
+ end_date = stats['date']['end_date']
76
+ if start_date.year != end_date.year
77
+ buf << "#{start_date.strftime('%a %b/%-d %Y')} - #{end_date.strftime('%a %b/%-d %Y')}"
78
+ else
79
+ buf << "#{start_date.strftime('%a %b/%-d')} - #{end_date.strftime('%a %b/%-d %Y')}"
80
+ end
81
+ buf << " (#{end_date.jd-start_date.jd}d)" ## add days
82
+ buf << "\n"
78
83
  end
79
- buf << " (#{end_date.jd-start_date.jd}d)" ## add days
80
- buf << "\n"
81
84
 
82
85
  buf << "# Teams #{stats['teams'].size}\n"
83
86
  buf << "# Matches #{matches.size}\n"
@@ -159,14 +162,18 @@ def self._build_batch( matches, rounds: true )
159
162
 
160
163
  buf << (round_translations[match.round] || match.round)
161
164
  end
162
- buf << "\n"
165
+ ## note - reset last_date & last_time on every new round header
166
+ last_date = nil
167
+ last_time = nil
168
+
169
+ buf << "\n"
163
170
  end
164
171
  end
165
172
 
166
173
 
167
174
  date = if match.date.is_a?( String )
168
175
  Date.strptime( match.date, '%Y-%m-%d' )
169
- else ## assume it's already a date (object)
176
+ else ## assume it's already a date (object) or nil!!!!
170
177
  match.date
171
178
  end
172
179
 
@@ -177,25 +184,22 @@ def self._build_batch( matches, rounds: true )
177
184
  end
178
185
 
179
186
 
180
- date_yyyymmdd = date.strftime( '%Y-%m-%d' )
187
+ ## note - date might be NIL!!!!!
188
+ date_yyyymmdd = date ? date.strftime( '%Y-%m-%d' ) : nil
181
189
 
182
190
  ## note: time is OPTIONAL for now
183
191
  ## note: use 17.00 and NOT 17:00 for now
184
192
  time_hhmm = time ? time.strftime( '%H.%M' ) : nil
185
193
 
186
194
 
187
- if rounds
188
- if match.round != last_round || date_yyyymmdd != last_date
189
- buf << "[#{format_date.call( date )}]\n"
190
- last_time = nil ## note: reset time for new date
191
- end
192
- else
193
- if date_yyyymmdd != last_date
194
- buf << "\n" ## note: add an extra leading blank line (if no round headings printed)
195
- buf << "[#{format_date.call( date )}]\n"
196
- last_time = nil
197
- end
198
- end
195
+ if date_yyyymmdd
196
+ if date_yyyymmdd != last_date
197
+ ## note: add an extra leading blank line (if no round headings printed)
198
+ buf << "\n" unless rounds
199
+ buf << "[#{format_date.call( date )}]\n"
200
+ last_time = nil
201
+ end
202
+ end
199
203
 
200
204
 
201
205
  ## allow strings and structs for team names
@@ -207,17 +211,16 @@ def self._build_batch( matches, rounds: true )
207
211
  line << ' '
208
212
 
209
213
  if time
210
- if last_time.nil? || last_time != time_hhmm
214
+ if last_time != time_hhmm
211
215
  line << "%5s" % time_hhmm
212
216
  else
213
217
  line << ' '
214
218
  end
215
219
  line << ' '
216
220
  else
217
- ## do nothing for now
221
+ line << ' '
218
222
  end
219
223
 
220
-
221
224
  line << "%-23s" % team1 ## note: use %-s for left-align
222
225
 
223
226
  line << " #{format_score.call( match )} " ## note: separate by at least two spaces for now
@@ -237,7 +240,8 @@ def self._build_batch( matches, rounds: true )
237
240
  when Status::REPLAY
238
241
  line << '[replay]'
239
242
  when Status::POSTPONED
240
- ## note: add NOTHING for postponed for now
243
+ line << '[postponed]'
244
+ ## was -- note: add NOTHING for postponed for now
241
245
  else
242
246
  puts "!! WARN - unknown match status >#{match.status}<:"
243
247
  pp match
@@ -3,7 +3,7 @@ module SportDb
3
3
  module Module
4
4
  module Writers
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
 
@@ -2,9 +2,6 @@
2
2
  require 'sportdb/quick'
3
3
 
4
4
 
5
- require 'optparse' ## command-line processing; check if included updstream?
6
-
7
-
8
5
 
9
6
  module Writer
10
7
  class Configuration
@@ -26,35 +23,14 @@ end # module Writer
26
23
  ###
27
24
  # our own code
28
25
  require_relative 'writers/version'
29
-
30
- ## setup leagues (info) table
31
- require_relative 'writers/league_config'
32
-
33
- module Writer
34
- LEAGUES = SportDb::LeagueConfig.new
35
-
36
- ['leagues_europe',
37
- 'leagues_america',
38
- 'leagues_world'
39
- ].each do |name|
40
- recs = read_csv( "#{SportDb::Module::Writers.root}/config/#{name}.csv" )
41
- LEAGUES.add( recs )
42
- end
43
- end # module Writer
44
-
45
-
46
26
  require_relative 'writers/goals'
47
27
  require_relative 'writers/txt_writer'
48
28
 
49
29
 
50
30
  ###
51
- # fbtxt tool
31
+ # fbtxt & friends tools - remove in future - why? why not?
52
32
  require 'football/timezones' ## pulls in read_datasets, etc.
53
33
 
54
- require_relative 'fbtxt/main'
55
- require_relative 'fbgen/main'
56
-
57
-
58
34
 
59
35
 
60
36
  puts SportDb::Module::Writers.banner # say hello
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportdb-writers
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-10-06 00:00:00.000000000 Z
11
+ date: 2024-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: football-timezones
@@ -64,20 +64,18 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '4.1'
67
+ version: '4.2'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '4.1'
74
+ version: '4.2'
75
75
  description: sportdb-writers - sport.db writers for match schedules and results, and
76
76
  more
77
77
  email: gerald.bauer@gmail.com
78
- executables:
79
- - fbgen
80
- - fbtxt
78
+ executables: []
81
79
  extensions: []
82
80
  extra_rdoc_files:
83
81
  - CHANGELOG.md
@@ -88,16 +86,8 @@ files:
88
86
  - Manifest.txt
89
87
  - README.md
90
88
  - Rakefile
91
- - bin/fbgen
92
- - bin/fbtxt
93
- - config/leagues_america.csv
94
- - config/leagues_europe.csv
95
- - config/leagues_world.csv
96
- - lib/sportdb/fbgen/main.rb
97
- - lib/sportdb/fbtxt/main.rb
98
89
  - lib/sportdb/writers.rb
99
90
  - lib/sportdb/writers/goals.rb
100
- - lib/sportdb/writers/league_config.rb
101
91
  - lib/sportdb/writers/txt_writer.rb
102
92
  - lib/sportdb/writers/version.rb
103
93
  homepage: https://github.com/sportdb/sport.db
@@ -121,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
111
  - !ruby/object:Gem::Version
122
112
  version: '0'
123
113
  requirements: []
124
- rubygems_version: 3.4.10
114
+ rubygems_version: 3.5.22
125
115
  signing_key:
126
116
  specification_version: 4
127
117
  summary: sportdb-writers - sport.db writers for match schedules and results, and more
data/bin/fbgen DELETED
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- ## tip: to test run:
4
- ## ruby -I ./lib bin/fbgen
5
-
6
-
7
- require 'sportdb/writers'
8
-
9
-
10
- Fbgen.main( ARGV )
11
-
12
-
13
- puts "bye"
data/bin/fbtxt DELETED
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- ## tip: to test run:
4
- ## ruby -I ./lib bin/fbtxt
5
-
6
- # $LOAD_PATH.unshift( '../../../sportdb/sport.db/parser/lib' )
7
- # $LOAD_PATH.unshift( '../../../sportdb/sport.db/sportdb-structs/lib' )
8
- # $LOAD_PATH.unshift( '../../../sportdb/sport.db/quick/lib' )
9
-
10
- require 'sportdb/writers'
11
-
12
-
13
- Fbtxt.main( ARGV )
14
-
15
-
16
- puts "bye"
17
-
@@ -1,29 +0,0 @@
1
- key, name, basename, start_season, end_season, comments
2
-
3
- ar.1, Argentina Primera Division, 1-primeradivision,,,
4
-
5
- br.1, Brasileiro Série A, 1-seriea,,,
6
- br.2, Brasileiro Série B, 2-serieb,,,
7
- br.3, Brasileiro Série C, 3-seriec,,,
8
- br.4, Brasileiro Série D, 4-seried,,,
9
- br.cup, Copa do Brasil, cup,,,
10
-
11
- br.carioca, Campeonato Carioca, carioca,,,
12
- br.gauchao, Campeonato Gaúcho, gauchao,,,
13
- br.mineiro, Campeonato Mineiro, mineiro,,,
14
- br.paranaense, Campeonato Paranaense, paranaense,,,
15
- br.paulistao, Campeonato Paulista, paulistao,,,
16
-
17
- co.1, Colombia Primera A, 1-primeraa,,,
18
-
19
-
20
- copa.l, Copa Libertadores, libertadores,,,
21
- copa.s, Copa Sudamericana, sudamericana,,,
22
-
23
-
24
- mx.1, Liga MX, 1-ligamx,,,
25
- mx.2, Liga de Expansión MX, 2-ligaexpansionmx, 2020/21,,
26
- mx.2, Ascenso MX, 2-ascensomx, ,2019/20,
27
-
28
-
29
-
@@ -1,160 +0,0 @@
1
- key, name, basename, start_season, end_season, comments
2
-
3
- at.1, Österr. Bundesliga, 1-bundesliga,,,
4
- at.2, Österr. 2. Liga, 2-liga2, 2018/19,,
5
- at.2, Österr. Erste Liga, 2-liga1, , 2017/18,
6
- at.3.o, Österr. Regionalliga Ost, 3-regionalliga-ost,,,
7
- at.3.m, Österr. Regionalliga Mitte, 3-regionalliga-mitte,,,
8
- at.cup, ÖFB Cup, cup,,,
9
-
10
-
11
- de.1, Deutsche Bundesliga, 1-bundesliga,,,
12
- de.2, Deutsche 2. Bundesliga, 2-bundesliga2,,,
13
- de.3, Deutsche 3. Liga, 3-liga3,,,
14
- de.4.bayern, Deutsche Regionalliga Bayern, 4-regionalliga-bayern,,,
15
- de.4.n, Deutsche Regionalliga Nord, 4-regionalliga-nord,,,
16
- de.4.no, Deutsche Regionalliga Nordost, 4-regionalliga-nordost,,,
17
- de.4.w, Deutsche Regionalliga West, 4-regionalliga-west,,,
18
- de.4.sw, Deutsche Regionalliga Südwest, 4-regionalliga-suedwest,,,
19
- de.cup, DFB Pokal, cup,,,
20
-
21
-
22
-
23
- it.1, Italian Serie A, 1-seriea,,,
24
- it.2, Italian Serie B, 2-serieb,,,
25
- it.cup, Coppa Italia, cup,,,
26
-
27
-
28
- es.1, Primera División de España, 1-liga,,,
29
- es.2, Segunda División de España, 2-liga2,,,
30
- es.cup, Copa del Rey de España, cup,,,
31
-
32
-
33
- fr.1, French Ligue 1, 1-ligue1,,,
34
- fr.2, French Ligue 2, 2-ligue2,,,
35
-
36
-
37
- ##
38
- ## note - starting with the 2004/05 season
39
- # the Football League's Division 1, Division 2 and Division 3
40
- ## changed to Championship, League One and League Two.
41
-
42
- eng.2, English Championship, 2-championship, 2004/05,, ## rebranding divsion 1 => championship
43
- eng.3, English League One, 3-league1, 2004/05,,
44
- eng.4, English League Two, 4-league2, 2004/05,,
45
-
46
- eng.1, English Premier League, 1-premierleague, 1992/93,,
47
- eng.2, English Division One, 2-division1, 1992/93, 2003/04, ## start of premier league
48
- eng.3, English Division Two, 3-division2, 1992/93, 2003/04,
49
- eng.4, English Division Three, 4-division3, 1992/93, 2003/04,
50
- eng.5, English National League, 5-nationalleague, 1992/93,,
51
-
52
- eng.1, English Division One, 1-division1, 1892/93, 1991/92, ## start of division 1 & 2
53
- eng.2, English Division Two, 2-division2, 1892/93, 1991/92, ## or use English Football League Second Division ???
54
- eng.3, English Division Three, 3-division3, , 1991/92,
55
-
56
- eng.1, English Football League, 1-footballleague, 1888/89, 1891/92, ## single league (no divisions)
57
-
58
-
59
- eng.cup, English FA Cup, facup,,,
60
-
61
- wal.1, Welsh Premier League, 1-premierleague,,,
62
- nir.1, Northern Irish Premiership, 1-premiership,,,
63
-
64
- hu.1, Hungarian NB I, 1-nbi,,,
65
-
66
- gr.1, Super League Greece, 1-superleague,,,
67
-
68
- pt.1, Portuguese Primeira Liga, 1-primeiraliga,,,
69
- pt.2, Portuguese Segunda Liga, 2-segundaliga,,,
70
-
71
- ch.1, Swiss Super League, 1-superleague,,,
72
- ch.2, Swiss Challenge League, 2-challengeleague,,,
73
- ch.cup, Swiss Cup, cup,,,
74
-
75
-
76
- tr.1, Turkish Süper Lig, 1-superlig,,,
77
- tr.2, Turkish 1. Lig, 2-lig1,,,
78
-
79
- is.1, Iceland Urvalsdeild, 1-urvalsdeild,,,
80
-
81
- sco.1, Scottish Premiership, 1-premiership,,,
82
-
83
- ie.1, Irish Premier Division, 1-premierdivision,,,
84
-
85
- fi.1, Finland Veikkausliiga, 1-veikkausliiga,,,
86
-
87
- se.1, Sweden Allsvenskan, 1-allsvenskan,,,
88
- se.2, Sweden Superettan, 2-superettan,,,
89
-
90
- no.1, Norwegian Eliteserien, 1-eliteserien,,,
91
- dk.1, Denmark Superligaen, 1-superligaen,,,
92
-
93
- lu.1, Luxembourger First Division, 1-nationaldivision,,,
94
-
95
- be.1, Belgian First Division A, 1-firstdivisiona,,,
96
-
97
- nl.1, Dutch Eredivisie, 1-eredivisie,,,
98
-
99
- cz.1, Czech First League, 1-firstleague,,,
100
- sk.1, Slovakia First League, 1-superliga,,,
101
- hr.1, Croatia 1. HNL, 1-hnl,,,
102
-
103
- pl.1, Poland Ekstraklasa, 1-ekstraklasa,,,
104
-
105
- ro.1, Romanian Liga 1, 1-liga1,,,
106
-
107
- ua.1, Ukraine Premier League, 1-premierleague,,,
108
-
109
- ru.1, Russian Premier League, 1-premierliga,,,
110
- ru.2, Russian 1. Division, 2-division1,,,
111
-
112
- by.1, Belarusian Premier League, 1-premierleague,,,
113
-
114
- al.1, Albanian Super League, 1-superleague,,,
115
- ad.1, Andorran Premier Division, 1-premierdisvision,,,
116
-
117
- ba.1, Bosnian-Herzegovinian Premier League, 1-premierleague,,,
118
- bg.1, Bulgarian A League, 1-aleague,,,
119
-
120
- cy.1, Cypriot First Division, 1-firstdivision,,,
121
-
122
- ee.1, Estonian First League, 1-firstleague,,,
123
- lv.1, Latvian First Division, 1-firstdivision,,,
124
- lt.1, Lithuanian First Division, 1-firstdivision,,,
125
-
126
- li.cup, Liechtensteiner Cup, cup,,,
127
-
128
- mk.1, Macedonian First League, 1-firstleague,,,
129
- mt.1, Macedonian First League, 1-firstleague,,,
130
- md.1, Moldovan First Division, 1-firstdivision,,,
131
- me.1, Montenegrin First League, 1-firstleague,,,
132
-
133
- sm.1, San Marinese Championship, 1-championship,,,
134
- rs.1, Serbian Super League, 1-superleague,,,
135
- si.1, Slovene First League, 1-firstleague,,,
136
-
137
- kos.1, Kosovan Superliga, 1-superliga,,,
138
- xk.1, Kosovan Superliga, 1-superliga,,,
139
-
140
- am.1, Armenian Premier League, 1-premierleague,,,
141
- az.1, Azerbaijani Premier League, 1-premierleague,,,
142
- ge.1, Georgian Premier League, 1-premierleague,,,
143
-
144
- fo.1, Faroese Premier Division, 1-premierdivision,,,
145
- gi.1, Gibraltarian Premier League, 1-premierleague,,,
146
-
147
-
148
-
149
- ## use uefa.1 - why? why not?
150
- ## uefa.2,
151
- ## uefa.3
152
- uefa.cl, UEFA Champions League, cl,,, ### use champs or such?
153
- uefa.champs, UEFA Champions League, champs,,,
154
- uefa.el, UEFA Europa League, el,,, ### use europa?
155
- uefa.europa, UEFA Europa League, europa,,,
156
- uefa.conf, UEFA Conference League, conf,,, ### use con (conf - confusion with config files?)
157
- uefa.con, UEFA Conference League, con,,,
158
-
159
- uefa.nl, UEFA Nations League, nl,,,
160
- euro, Euro, euro,,,
@@ -1,23 +0,0 @@
1
- key, name, basename, start_season, end_season, comments
2
-
3
- cn.1, Chinese Super League, 1-superleague,,,
4
- jp.1, Japan J1 League, 1-j1league,,,
5
-
6
-
7
-
8
- kz.1, Kazakh Premier League, 1-premierleague,,,
9
-
10
-
11
- il.1, Israeli Premier League, 1-premierleague,,,
12
-
13
-
14
- eg.1, Egypt Premiership, 1-premiership,,,
15
- ma.1, Morocco Botola Pro 1, 1-botolapro1,,,
16
- dz.1, Algeria Ligue 1, 1-ligue1,,,
17
-
18
- afl, African Football League, afl,,,
19
- caf.cl, CAF Champions League, cl,,,
20
- caf.champs, CAF Champions League, champs,,, ## use alternate code - why? why not?
21
-
22
-
23
- world, World Cup, cup,,,
@@ -1,172 +0,0 @@
1
-
2
- module Fbgen
3
- def self.main( args=ARGV )
4
-
5
- opts = {
6
- source_path: [],
7
- dry: false,
8
- debug: true,
9
- file: nil,
10
- }
11
-
12
- parser = OptionParser.new do |parser|
13
- parser.banner = "Usage: #{$PROGRAM_NAME} [options] [args]"
14
-
15
- parser.on( "--dry",
16
- "dry run; do NOT write - default is (#{opts[:dry]})" ) do |dry|
17
- opts[:dry] = true
18
- end
19
- parser.on( "-q", "--quiet",
20
- "less debug output/messages - default is (#{!opts[:debug]})" ) do |debug|
21
- opts[:debug] = false
22
- end
23
-
24
- parser.on( "-I DIR", "--include DIR",
25
- "add directory to (source) search path - default is (#{opts[:source_path].join(',')})") do |dir|
26
- opts[:source_path] += path
27
- end
28
-
29
- parser.on( "-f FILE", "--file FILE",
30
- "read leagues (and seasons) via .csv file") do |file|
31
- opts[:file] = file
32
- end
33
- end
34
- parser.parse!( args )
35
-
36
-
37
-
38
- if opts[:source_path].empty? &&
39
- File.exist?( '/sports/cache.api.fbdat') &&
40
- File.exist?( '/sports/cache.wfb' )
41
- opts[:source_path] << '/sports/cache.api.fbdat'
42
- opts[:source_path] << '/sports/cache.wfb'
43
- end
44
-
45
-
46
- if opts[:source_path].empty?
47
- opts[:source_path] = ['.'] ## use ./ as default
48
- end
49
-
50
- source_path = opts[:source_path]
51
-
52
-
53
- puts "OPTS:"
54
- p opts
55
- puts "ARGV:"
56
- p args
57
-
58
-
59
- datasets = if opts[:file]
60
- read_datasets( opts[:file] )
61
- else
62
- parse_datasets_args( args )
63
- end
64
-
65
- puts "datasets:"
66
- pp datasets
67
-
68
-
69
-
70
- root_dir = './o'
71
- puts " (output) root_dir: >#{root_dir}<"
72
-
73
-
74
- ### step 0 - validate and fill-in seasons etc.
75
- validate_datasets!( datasets, source_path: source_path )
76
-
77
- ## step 1 - generate
78
- datasets.each do |league_key, seasons|
79
- puts "==> gen #{league_key} - #{seasons.size} seasons(s)..."
80
-
81
- league_info = Writer::LEAGUES[ league_key ]
82
- pp league_info
83
-
84
- seasons.each do |season|
85
- filename = "#{season.to_path}/#{league_key}.csv"
86
- path = find_file( filename, path: source_path )
87
-
88
- ## get matches
89
- puts " ---> reading matches in #{path} ..."
90
- matches = SportDb::CsvMatchParser.read( path )
91
- puts " #{matches.size} matches"
92
-
93
- ## build
94
- txt = SportDb::TxtMatchWriter.build( matches )
95
- puts txt if opts[:debug]
96
-
97
- league_name = league_info[ :name ] # e.g. Brasileiro Série A
98
- league_name = league_name.call( season ) if league_name.is_a?( Proc ) ## is proc/func - name depends on season
99
-
100
- buf = String.new
101
- buf << "= #{league_name} #{season}\n\n"
102
- buf << txt
103
-
104
- outpath = "#{root_dir}/foot/#{season.to_path}/#{league_key}.txt"
105
-
106
- if opts[:dry]
107
- puts " (dry) writing to >#{outpath}<..."
108
- else
109
- write_text( outpath, buf )
110
- end
111
- end
112
- end
113
- end # method self.main
114
-
115
-
116
-
117
- def self.find_file( filename, path: )
118
- path.each do |src_dir|
119
- path = "#{src_dir}/#{filename}"
120
- return path if File.exist?( path )
121
- end
122
-
123
- ## fix - raise file not found error!!!
124
- nil ## not found - raise filenot found error - why? why not?
125
- end
126
-
127
-
128
- ### use a function for (re)use
129
- ### note - may add seasons in place!! (if seasons is empty)
130
- def self.validate_datasets!( datasets, source_path: )
131
- datasets.each do |dataset|
132
- league_key, seasons = dataset
133
-
134
- league_info = Writer::LEAGUES[ league_key ]
135
- if league_info.nil?
136
- puts "!! ERROR - no league (config) found for >#{league_key}<; sorry"
137
- exit 1
138
- end
139
-
140
-
141
- if seasons.empty?
142
- ## simple heuristic to find current season
143
- [ Season( '2024/25'), Season( '2024') ].each do |season|
144
- filename = "#{season.to_path}/#{league_key}.csv"
145
- path = find_file( filename, path: source_path )
146
- if path
147
- seasons = [season]
148
- dataset[1] = seasons
149
- break
150
- end
151
- end
152
-
153
- if seasons.empty?
154
- puts "!! ERROR - no latest auto-season via source found for #{league_key}; sorry"
155
- exit 1
156
- end
157
- end
158
-
159
- ## check source path too upfronat - why? why not?
160
- seasons.each do |season|
161
- filename = "#{season.to_path}/#{league_key}.csv"
162
- path = find_file( filename, path: source_path )
163
-
164
- if path.nil?
165
- puts "!! ERROR - no source found for #{filename}; sorry"
166
- exit 1
167
- end
168
- end
169
- end
170
- datasets
171
- end
172
- end # module Fbgen
@@ -1,37 +0,0 @@
1
-
2
- module Fbtxt
3
- def self.main( args=ARGV )
4
-
5
-
6
- opts = {
7
- }
8
-
9
- parser = OptionParser.new do |parser|
10
- parser.banner = "Usage: #{$PROGRAM_NAME} [options]"
11
- end
12
- parser.parse!( args )
13
-
14
- puts "OPTS:"
15
- p opts
16
- puts "ARGV:"
17
- p args
18
-
19
-
20
- matches = []
21
-
22
- ## step 1 - get all matches via csv
23
- args.each do |arg|
24
- path = arg
25
- puts "==> reading matches in #{path} ..."
26
- more_matches = SportDb::CsvMatchParser.read( path )
27
- matches += more_matches
28
- end
29
-
30
- puts "#{matches.size} matches"
31
- puts
32
-
33
- txt = SportDb::TxtMatchWriter.build( matches )
34
- puts txt
35
- puts
36
- end
37
- end # module Fbtxt
@@ -1,83 +0,0 @@
1
-
2
- module SportDb
3
- class LeagueConfig
4
-
5
- def self.read( path )
6
- recs = read_csv( path )
7
- new( recs )
8
- end
9
-
10
- def initialize( recs=nil )
11
- @table = {}
12
- add( recs ) if recs
13
- end
14
-
15
-
16
- class LeagueItem
17
- def initialize
18
- @recs = []
19
- end
20
- def add( rec ) @recs << rec; end
21
- alias_method :<<, :add
22
-
23
- def find_by_season( season )
24
- @recs.each do |rec|
25
- start_season = rec['start_season']
26
- end_season = rec['end_season']
27
- return rec if (start_season.nil? || start_season <= season) &&
28
- (end_season.nil? || end_season >= season)
29
- end
30
- nil
31
- end
32
-
33
-
34
- def name_by_season( season )
35
- rec = find_by_season( season )
36
- rec ? rec['name'] : nil
37
- end
38
-
39
- def basename_by_season( season )
40
- rec = find_by_season( season )
41
- rec ? rec['basename'] : nil
42
- end
43
-
44
-
45
- def [](key)
46
- ## short cut - if only one or zero rec
47
- ## return directly
48
- if @recs.empty?
49
- nil
50
- elsif @recs.size == 1 &&
51
- @recs[0]['start_season'].nil? &&
52
- @recs[0]['end_season'].nil?
53
- @recs[0][key.to_s]
54
- else ### return proc that requires season arg
55
- case key.to_sym
56
- when :name then method(:name_by_season).to_proc
57
- when :basename then method(:basename_by_season).to_proc
58
- else
59
- nil ## return nil - why? why not?
60
- ## raise ArgumentError, "invalid key #{key}; use :name or :basename"
61
- end
62
- end
63
- end
64
- end
65
-
66
- def add( recs )
67
- recs.each do |rec|
68
- @table[ rec['key'] ] ||= LeagueItem.new
69
-
70
- ## note: auto-change seasons to season object or nil
71
- @table[ rec['key'] ] << { 'name' => rec['name'],
72
- 'basename' => rec['basename'],
73
- 'start_season' => rec['start_season'].empty? ? nil : Season.parse( rec['start_season'] ),
74
- 'end_season' => rec['end_season'].empty? ? nil : Season.parse( rec['end_season'] ),
75
- }
76
- end
77
- end
78
-
79
-
80
- def [](key) @table[ key.to_s.downcase ]; end
81
-
82
- end # class LeagueConfig
83
- end # module SportDb