sportdb-formats 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,17 +1,15 @@
1
1
  ## 3rd party gems
2
- require 'sportdb/structs'
3
- require 'sportdb/parser'
4
- require 'date/formats'
2
+ # require 'sportdb/structs'
3
+ # require 'sportdb/parser'
4
+ require 'sportdb/quick'
5
5
 
6
6
 
7
7
  require 'zip' ## todo/check: if zip is alreay included in a required module
8
8
 
9
9
 
10
- ## note - add cocos (code commons)
11
- ##
12
- ## pulls in read_csv & parse_csv etc.
13
- require 'cocos'
14
10
 
11
+ ## todo/check
12
+ ## - logutils already added via quick!!
15
13
 
16
14
  require 'logutils'
17
15
  module SportDb
@@ -26,10 +24,8 @@ end
26
24
  # our own code
27
25
  require_relative 'formats/version' # let version always go first
28
26
 
29
- require_relative 'formats/datafile'
30
- require_relative 'formats/datafile_package'
31
27
  require_relative 'formats/package'
32
-
28
+ require_relative 'formats/datafile_package'
33
29
 
34
30
 
35
31
  ## let's put test configuration in its own namespace / module
@@ -46,271 +42,16 @@ end # module SportDb
46
42
 
47
43
 
48
44
 
49
- ###
50
- # define search services apis (move to its own gem later - why? why not?)
51
-
52
- module SportDb
53
- module Import
54
-
55
- class Configuration
56
- def world() @world ||= WorldSearch.new( countries: DummyCountrySearch.new ); end
57
- def world=(world) @world = world; end
58
-
59
- ## todo/fix - add/move catalog here from sportdb-catalogs!!!
60
- ## def catalog() @catalog ||= Catalog.new; end
61
- ## def catalog(catalog) @catalog = catalog; end
62
- end # class Configuration
63
-
64
- ## e.g. use config.catalog -- keep Import.catalog as a shortcut (for "read-only" access)
65
- ## def self.catalog() config.catalog; end
66
- def self.world() config.world; end
67
-
68
- ## lets you use
69
- ## SportDb::Import.configure do |config|
70
- ## config.catalog_path = './catalog.db'
71
- ## end
72
- def self.configure() yield( config ); end
73
- def self.config() @config ||= Configuration.new; end
74
- end # module Import
75
- end # module SportDb
76
-
77
-
78
- require_relative 'formats/search/world'
79
- require_relative 'formats/search/sport'
80
- require_relative 'formats/search/structs'
81
-
82
-
83
-
84
- module Sports
85
- ## note: just forward to SportDb::Import configuration!!!!!
86
- ## keep Sports module / namespace "clean" - why? why not?
87
- ## that is, only include data structures (e.g. Match,League,etc) for now - why? why not?
88
- def self.configure() yield( config ); end
89
- def self.config() SportDb::Import.config; end
90
- end # module Sports
91
-
92
-
93
- ###
94
- # csv (tabular dataset) support / machinery
95
- require_relative 'formats/csv/match_status_parser'
96
- require_relative 'formats/csv/goal'
97
- require_relative 'formats/csv/goal_parser_csv'
98
- require_relative 'formats/csv/match_parser_csv'
99
-
100
-
101
- ### add convenience shortcut helpers
102
- module Sports
103
- class Match
104
- def self.read_csv( path, headers: nil, filters: nil, converters: nil, sep: nil )
105
- SportDb::CsvMatchParser.read( path,
106
- headers: headers,
107
- filters: filters,
108
- converters: converters,
109
- sep: sep )
110
- end
111
-
112
- def self.parse_csv( txt, headers: nil, filters: nil, converters: nil, sep: nil )
113
- SportDb::CsvMatchParser.parse( txt,
114
- headers: headers,
115
- filters: filters,
116
- converters: converters,
117
- sep: sep )
118
- end
119
- end # class Match
120
- end # module Sports
121
-
122
-
123
-
124
-
125
-
126
-
127
-
128
-
129
- module SportDb
130
- module Import
131
- Season = ::Season ## add a convenience alias for top-level Season class
132
-
133
- ## add "old" convenience aliases for structs - why? why not?
134
- ## todo/check: just use include Sports !!!!
135
- Country = ::Sports::Country
136
- League = ::Sports::League
137
- Group = ::Sports::Group
138
- Round = ::Sports::Round
139
- Match = ::Sports::Match
140
- Matchlist = ::Sports::Matchlist
141
- Goal = ::Sports::Goal
142
- Team = ::Sports::Team
143
- NationalTeam = ::Sports::NationalTeam
144
- Club = ::Sports::Club
145
- Standings = ::Sports::Standings
146
- TeamUsage = ::Sports::TeamUsage
147
-
148
- Ground = ::Sports::Ground
149
-
150
- Player = ::Sports::Player
151
-
152
- EventInfo = ::Sports::EventInfo
153
-
154
-
155
- class Team
156
- ## add convenience lookup helper / method for name by season for now
157
- ## use clubs history - for now kept separate from struct - why? why not?
158
- def name_by_season( season )
159
- ## note: returns / fallback to "regular" name if no records found in history
160
- SportDb::Import.catalog.clubs_history.find_name_by( name: name, season: season ) || name
161
- end
162
- end # class Team
163
-
164
- end # module Import
165
- end # module SportDb
166
-
167
-
168
- require_relative 'formats/match/match_parser'
169
- require_relative 'formats/match/conf_parser'
170
-
171
-
172
-
173
- require_relative 'formats/country/country_reader'
174
-
175
-
176
- ## add convenience helper
177
- module SportDb
178
- module Import
179
- class Country
180
- def self.read( path ) CountryReader.read( path ); end
181
- def self.parse( txt ) CountryReader.parse( txt ); end
182
- end # class Country
183
- end # module Import
184
- end # module SportDb
185
-
186
-
187
- require_relative 'formats/league/league_reader'
188
- require_relative 'formats/league/league_outline_reader'
189
-
190
- ##
191
- ## add convenience helper / short-cuts
192
- module SportDb
193
- module Import
194
- class League
195
- def self.read( path ) LeagueReader.read( path ); end
196
- def self.parse( txt ) LeagueReader.parse( txt ); end
197
- end # class League
198
- end # module Import
199
- end # module SportDb
200
-
201
-
202
- require_relative 'formats/team/club_reader'
203
- require_relative 'formats/team/club_reader_props'
204
- require_relative 'formats/team/wiki_reader'
205
-
206
- require_relative 'formats/team/club_reader_history'
207
- require_relative 'formats/team/club_index_history'
208
-
209
-
210
- ###
211
- # add convenience helpers / shortcuts
212
- module SportDb
213
- module Import
214
-
215
- class Club
216
- def self.read( path ) ClubReader.read( path ); end
217
- def self.parse( txt ) ClubReader.parse( txt ); end
218
-
219
- def self.read_props( path ) ClubPropsReader.read( path ); end
220
- def self.parse_props( txt ) ClubPropsReader.parse( txt ); end
221
- ## todo/check: use ClubProps.read and ClubProps.parse convenience alternate shortcuts - why? why not?
222
- end # class Club
223
-
224
- end # module Import
225
- end # module SportDb
226
-
227
-
228
- require_relative 'formats/event/event_reader'
229
-
230
- ## add convenience helper
231
- module SportDb
232
- module Import
233
- class EventInfo
234
- def self.read( path ) EventInfoReader.read( path ); end
235
- def self.parse( txt ) EventInfoReader.parse( txt ); end
236
- end # class EventInfo
237
- end # module Import
238
- end # module SportDb
239
-
240
-
241
-
242
- require_relative 'formats/ground/ground_reader'
45
+ require_relative 'formats/quick_match_linter'
243
46
 
244
47
 
48
+ # require_relative 'formats/team/club_reader_history'
49
+ # require_relative 'formats/team/club_index_history'
245
50
 
246
51
 
247
52
 
248
53
  ### auto-configure builtin lookups via catalog.db(s)
249
- require 'sportdb/catalogs'
250
-
251
-
252
- module SportDb
253
- module Import
254
-
255
- class Configuration
256
- ## note: add more configs (open class), see sportdb-structs for original config!!!
257
-
258
- ###
259
- # find a better name for setting - why? why not?
260
- # how about catalogdb or ???
261
- attr_reader :catalog_path
262
- def catalog_path=(path)
263
- @catalog_path = path
264
- ########
265
- # reset database here to new path
266
- CatalogDb::Metal::Record.database = path
267
-
268
- ## plus automagically set world search too (to use CatalogDb)
269
- self.world = WorldSearch.new(
270
- countries: CatalogDb::Metal::Country,
271
- cities: CatalogDb::Metal::City,
272
- )
273
-
274
- @catalog_path
275
- end
276
-
277
- def catalog
278
- @catalog ||= SportSearch.new(
279
- leagues: CatalogDb::Metal::League,
280
- national_teams: CatalogDb::Metal::NationalTeam,
281
- clubs: CatalogDb::Metal::Club,
282
- grounds: CatalogDb::Metal::Ground,
283
- events: CatalogDb::Metal::EventInfo,
284
- players: CatalogDb::Metal::Player, # note - via players.db !!!
285
- )
286
- end
287
-
288
- ###
289
- # find a better name for setting - why? why not?
290
- # how about playersdb or ???
291
- attr_reader :players_path
292
- def players_path=(path)
293
- @players_path = path
294
- ########
295
- # reset database here to new path
296
- CatalogDb::Metal::PlayerRecord.database = path
297
-
298
- @players_path
299
- end
300
- end # class Configuration
301
-
302
-
303
- ## e.g. use config.catalog -- keep Import.catalog as a shortcut (for "read-only" access)
304
- def self.catalog() config.catalog; end
305
- end # module Import
306
- end # module SportDb
307
-
308
-
309
- ###
310
- ## add default/built-in catalog here - why? why not?
311
- ## todo/fix - set catalog_path on demand
312
- ## note: for now required for world search setup etc.
313
- SportDb::Import.config.catalog_path = "#{FootballDb::Data.data_dir}/catalog.db"
54
+ require 'sportdb/search'
314
55
 
315
56
 
316
57
 
metadata CHANGED
@@ -1,99 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportdb-formats
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.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-24 00:00:00.000000000 Z
11
+ date: 2024-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sportdb-structs
14
+ name: sportdb-search
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.1
19
+ version: 0.0.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.1
26
+ version: 0.0.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: sportdb-parser
28
+ name: sportdb-quick
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.1
33
+ version: 0.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.1
41
- - !ruby/object:Gem::Dependency
42
- name: sportdb-catalogs
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: 1.2.2
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: 1.2.2
55
- - !ruby/object:Gem::Dependency
56
- name: date-formats
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 1.0.2
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: 1.0.2
69
- - !ruby/object:Gem::Dependency
70
- name: cocos
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: 0.4.0
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 0.4.0
83
- - !ruby/object:Gem::Dependency
84
- name: logutils
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: 0.6.1
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: 0.6.1
40
+ version: 0.2.0
97
41
  - !ruby/object:Gem::Dependency
98
42
  name: rubyzip
99
43
  requirement: !ruby/object:Gem::Requirement
@@ -145,7 +89,7 @@ dependencies:
145
89
  description: sportdb-formats - sport.db format and text utilities
146
90
  email: gerald.bauer@gmail.com
147
91
  executables:
148
- - fbx
92
+ - fbchk
149
93
  extensions: []
150
94
  extra_rdoc_files:
151
95
  - CHANGELOG.md
@@ -156,30 +100,12 @@ files:
156
100
  - Manifest.txt
157
101
  - README.md
158
102
  - Rakefile
159
- - bin/fbx
103
+ - bin/fbchk
160
104
  - lib/sportdb/formats.rb
161
- - lib/sportdb/formats/country/country_reader.rb
162
- - lib/sportdb/formats/csv/goal.rb
163
- - lib/sportdb/formats/csv/goal_parser_csv.rb
164
- - lib/sportdb/formats/csv/match_parser_csv.rb
165
- - lib/sportdb/formats/csv/match_status_parser.rb
166
- - lib/sportdb/formats/datafile.rb
167
105
  - lib/sportdb/formats/datafile_package.rb
168
- - lib/sportdb/formats/event/event_reader.rb
169
- - lib/sportdb/formats/ground/ground_reader.rb
170
- - lib/sportdb/formats/league/league_outline_reader.rb
171
- - lib/sportdb/formats/league/league_reader.rb
172
- - lib/sportdb/formats/match/conf_parser.rb
173
- - lib/sportdb/formats/match/match_parser.rb
174
106
  - lib/sportdb/formats/package.rb
175
- - lib/sportdb/formats/search/sport.rb
176
- - lib/sportdb/formats/search/structs.rb
177
- - lib/sportdb/formats/search/world.rb
107
+ - lib/sportdb/formats/quick_match_linter.rb
178
108
  - lib/sportdb/formats/team/club_index_history.rb
179
- - lib/sportdb/formats/team/club_reader.rb
180
- - lib/sportdb/formats/team/club_reader_history.rb
181
- - lib/sportdb/formats/team/club_reader_props.rb
182
- - lib/sportdb/formats/team/wiki_reader.rb
183
109
  - lib/sportdb/formats/version.rb
184
110
  homepage: https://github.com/sportdb/sport.db
185
111
  licenses:
data/bin/fbx DELETED
@@ -1,146 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- ## tip: to test run:
4
- ## ruby -I ./lib -I ../parser/lib bin/fbx
5
-
6
-
7
- ## our own code
8
- require 'sportdb/formats'
9
-
10
-
11
-
12
- require 'optparse'
13
-
14
- ##
15
- ## read textfile
16
- ## and dump match parse results
17
- ##
18
- ## fbt ../openfootball/.../euro.txt
19
-
20
-
21
-
22
-
23
- args = ARGV
24
- opts = { debug: false,
25
- outline: false }
26
-
27
- parser = OptionParser.new do |parser|
28
- parser.banner = "Usage: #{$PROGRAM_NAME} [options]"
29
-
30
- ##
31
- ## check if git has a offline option?? (use same)
32
- ## check for other tools - why? why not?
33
-
34
-
35
- parser.on( "--verbose", "--debug",
36
- "turn on verbose / debug output (default: #{opts[:debug]})" ) do |debug|
37
- opts[:debug] = debug
38
- end
39
-
40
- parser.on( "--outline",
41
- "turn on outline (only) output (default: #{opts[:outline]})" ) do |outline|
42
- opts[:outline] = outline
43
- end
44
- end
45
- parser.parse!( args )
46
-
47
- puts "OPTS:"
48
- p opts
49
- puts "ARGV:"
50
- p args
51
-
52
-
53
-
54
-
55
-
56
- paths = if args.empty?
57
- [
58
- '../../../openfootball/euro/2021--europe/euro.txt',
59
- '../../../openfootball/euro/2024--germany/euro.txt',
60
- ]
61
- else
62
- ## check for directories
63
- ## and auto-expand
64
-
65
- SportDb::Parser::Opts.expand_args( args )
66
- end
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
- SportDb::MatchParser.debug = true if opts[:debug]
75
-
76
-
77
- ## errors = []
78
-
79
-
80
- paths.each_with_index do |path,i|
81
- puts "==> [#{i+1}/#{paths.size}] reading >#{path}<..."
82
-
83
- txt = read_text( path )
84
- secs = SportDb::LeagueOutlineReader.parse( txt )
85
- ## pp secs
86
-
87
- secs.each_with_index do |sec,j| ## sec(tion)s
88
- season = sec[:season]
89
- league = sec[:league]
90
- stage = sec[:stage]
91
- lines = sec[:lines]
92
-
93
- puts " section #{j+1}/#{secs.size} - #{league.name} #{season}, #{stage} - #{lines.size} line(s)"
94
-
95
- next if opts[:outline]
96
-
97
- =begin
98
- ### check if event info availabe - use start_date;
99
- ## otherwise we have to guess (use a "synthetic" start_date)
100
- event_info = catalog.events.find_by( season: season,
101
- league: league )
102
-
103
- start = if event_info && event_info.start_date
104
- puts "event info found:"
105
- puts " using start date from event: "
106
- pp event_info
107
- pp event_info.start_date
108
- event_info.start_date
109
- else
110
- =end
111
- start = if season.year?
112
- Date.new( season.start_year, 1, 1 )
113
- else
114
- Date.new( season.start_year, 7, 1 )
115
- end
116
-
117
- parser = SportDb::MatchParser.new( lines,
118
- start ) ## note: keep season start_at date for now (no need for more specific stage date need for now)
119
-
120
- auto_conf_teams, matches, rounds, groups = parser.parse
121
-
122
- puts ">>> #{auto_conf_teams.size} teams:"
123
- pp auto_conf_teams
124
- puts ">>> #{matches.size} matches:"
125
- ## pp matches
126
- puts ">>> #{rounds.size} rounds:"
127
- pp rounds
128
- puts ">>> #{groups.size} groups:"
129
- pp groups
130
- end # each secs
131
- end # each paths
132
-
133
- =begin
134
- if errors.size > 0
135
- puts
136
- pp errors
137
- puts
138
- puts "!! #{errors.size} parse error(s) in #{paths.size} datafiles(s)"
139
- else
140
- puts
141
- puts "OK no parse errors found in #{paths.size} datafile(s)"
142
- end
143
- =end
144
-
145
- puts "bye"
146
-