fbtok 0.1.0 → 0.1.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: 82c6131cf108aae7a0d7284bba488be307c1cb81c099dad53960d500a8710483
4
- data.tar.gz: ae5c2366e89ac5ef1a25567a0c328aafc12ddc21f826e43c927027dfa48e5f47
3
+ metadata.gz: efa16f747083c94f0a8fbb8df7ac3d1718ad2c204fca2008b711da35a7adf5ac
4
+ data.tar.gz: da8dfd82204875f23fc9efa236a1af79701e83047c5c3bf1fc34b4032371db51
5
5
  SHA512:
6
- metadata.gz: e43061028eb9eae6a3f0cc50eccdf111f41270c89189fc50e5a9f4c56da976ed3b858d2201b234367009dbf036c17747a4e53952eaab3f500787fb1b695e023a
7
- data.tar.gz: 18a70dbed909e896b47ddfe63ea98d1ed5ed3fe37a9dee15418e713790465ccc2a4f3033110a32916924dcf1fab9eb5132e411c37792c37abcf8b54ed301b3f9
6
+ metadata.gz: 29635412c9fb671cc254fa735dbf994289a961d02b92ca2480e80f4021d7f0d5b154f3b6d00c10cf50b1bce6f950ab624cbb1865d1273595a9401ad9c66a9ad4
7
+ data.tar.gz: b81ed7ecffc27725bef9dbb0f9b448eac302b649e89b7ac7da68c556fff4b14a4243dfe736145210b4cabc3a4b1b30d6633ab7a4d9fcd9f4e8082fc88522b275
data/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- ### 0.1.0
1
+ ### 0.1.2
2
2
  ### 0.0.1 / 2025-01-02
3
3
 
4
4
  * Everything is new. First release.
data/Manifest.txt CHANGED
@@ -2,6 +2,7 @@ CHANGELOG.md
2
2
  Manifest.txt
3
3
  README.md
4
4
  Rakefile
5
+ bin/fbchk
5
6
  bin/fbt
6
7
  bin/fbtok
7
8
  bin/fbx
data/README.md CHANGED
@@ -19,6 +19,20 @@ $ gem install fbtok
19
19
 
20
20
  ## Usage
21
21
 
22
+
23
+ ### fbtok - use tokenizer/parser
24
+
25
+ - depends on sportdb-parser
26
+
27
+ ### fbt - use quick match reader & fbx - dump match schedule - uses quick league & match readers
28
+
29
+ - depends on sportdb-quick
30
+
31
+ ### fbchk - use quick match linter; check league and team names via search & more
32
+
33
+ - depends on sportdb-formats (incl. sportdb-search & sportdb-catalogs)
34
+
35
+
22
36
  ...
23
37
 
24
38
 
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'hoe'
2
2
 
3
3
 
4
4
  Hoe.spec 'fbtok' do
5
- self.version = '0.1.0'
5
+ self.version = '0.1.2'
6
6
 
7
7
  self.summary = "fbtok - football.txt lint tools incl. tokenizer, parser & more"
8
8
  self.description = summary
@@ -22,7 +22,7 @@ Hoe.spec 'fbtok' do
22
22
  # ['sportdb-parser', '>= 0.2.2'],
23
23
  # ['sportdb-structs', '>= 0.5.0'],
24
24
  # ['logutils', '>= 0.6.1'],
25
- ['sportdb-quick', '>= 0.3.0'],
25
+ ['sportdb-formats', '>= 2.1.2'],
26
26
  ]
27
27
 
28
28
  self.spec_extras = {
data/bin/fbchk ADDED
@@ -0,0 +1,177 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ## tip: to test run:
4
+ ## ruby -I ./lib bin/fbchk
5
+
6
+
7
+ ## local hack for debugging
8
+ ## use local versions if present
9
+ $LOAD_PATH.unshift( File.expand_path( '/sports/sportdb/sport.db/sportdb-structs/lib' ))
10
+ $LOAD_PATH.unshift( File.expand_path( '/sports/sportdb/sport.db/sportdb-catalogs/lib' ))
11
+ $LOAD_PATH.unshift( File.expand_path( '/sports/sportdb/sport.db/sportdb-search/lib' ))
12
+
13
+
14
+ ## our own code
15
+ require 'fbtok'
16
+
17
+
18
+
19
+ ## local hack
20
+ ## if exists up-to-date catalog db (use local version NOT built-in)
21
+ catalog_path = '/sports/sportdb/sport.db/catalog/catalog.db'
22
+ if File.exist?( catalog_path )
23
+ SportDb::Import.config.catalog_path = catalog_path
24
+ end
25
+
26
+
27
+ args = ARGV
28
+ opts = { debug: false,
29
+ file: nil,
30
+ teams: true, ## check/lint teams (name errros etc.)
31
+ }
32
+
33
+ parser = OptionParser.new do |parser|
34
+ parser.banner = "Usage: #{$PROGRAM_NAME} [options]"
35
+
36
+ ##
37
+ ## check if git has a offline option?? (use same)
38
+ ## check for other tools - why? why not?
39
+ # parser.on( "-q", "--quiet",
40
+ # "less debug output/messages - default is (#{!opts[:debug]})" ) do |debug|
41
+ # opts[:debug] = false
42
+ # end
43
+ parser.on( "--verbose", "--debug",
44
+ "turn on verbose / debug output (default: #{opts[:debug]})" ) do |debug|
45
+ opts[:debug] = true
46
+ end
47
+
48
+ parser.on( "-f FILE", "--file FILE",
49
+ "read datafiles (pathspecs) via .csv file") do |file|
50
+ opts[:file] = file
51
+ end
52
+
53
+ parser.on( "--[no-]teams",
54
+ "turn on/off team name checks (default: #{opts[:teams]})") do |teams|
55
+ opts[:teams] = teams
56
+ end
57
+ end
58
+ parser.parse!( args )
59
+
60
+
61
+ puts "OPTS:"
62
+ p opts
63
+ puts "ARGV:"
64
+ p args
65
+
66
+
67
+ ## todo/check - use packs or projects or such
68
+ ## instead of specs - why? why not?
69
+ specs = []
70
+ if opts[:file]
71
+ recs = read_csv( opts[:file] )
72
+ pp recs
73
+ ## note - make pathspecs relative to passed in file arg!!!
74
+ basedir = File.dirname( opts[:file] )
75
+ recs.each do |rec|
76
+ paths = SportDb::Parser::Opts.find( rec['path'], dir: basedir )
77
+ specs << [paths, rec]
78
+ end
79
+ else
80
+ paths = if args.empty?
81
+ []
82
+ else
83
+ ## check for directories
84
+ ## and auto-expand
85
+ SportDb::Parser::Opts.expand_args( args )
86
+ end
87
+ specs << [paths, {}]
88
+ end
89
+
90
+
91
+ if opts[:debug]
92
+ SportDb::QuickMatchLinter.debug = true
93
+ SportDb::QuickMatchReader.debug = true
94
+ SportDb::MatchParser.debug = true
95
+ else
96
+ SportDb::QuickMatchLinter.debug = false
97
+ SportDb::QuickMatchReader.debug = false
98
+ SportDb::MatchParser.debug = false
99
+ LogUtils::Logger.root.level = :info
100
+ end
101
+
102
+
103
+ specs.each_with_index do |(paths, rec),i|
104
+ errors = []
105
+ paths.each_with_index do |path,j|
106
+ puts "==> [#{j+1}/#{paths.size}] reading >#{path}<..."
107
+ quick = SportDb::QuickMatchLinter.new( read_text( path ),
108
+ check_teams: opts[:teams] )
109
+ matches = quick.parse
110
+
111
+
112
+ if quick.errors?
113
+ puts "!! #{quick.errors.size} error(s):"
114
+ pp quick.errors
115
+
116
+ quick.errors.each do |err|
117
+ errors << [ path, *err ] # note: use splat (*) to add extra values (starting with msg)
118
+ end
119
+ end
120
+ puts " #{matches.size} match(es)"
121
+ end
122
+
123
+ if errors.size > 0
124
+ puts
125
+ puts "!! #{errors.size} PARSE ERRORS in #{paths.size} datafile(s)"
126
+ pp errors
127
+ else
128
+ puts
129
+ puts " OK - no parse errors in #{paths.size} datafile(s)"
130
+ end
131
+
132
+ ## add errors to rec via rec['errors'] to allow
133
+ ## for further processing/reporting
134
+ rec['errors'] = errors
135
+ end
136
+
137
+
138
+
139
+ ###
140
+ ## generate a report if --file option used
141
+ if opts[:file]
142
+
143
+ buf = String.new
144
+
145
+ buf << "# fbchk summary report - #{specs.size} dataset(s)\n\n"
146
+
147
+ specs.each_with_index do |(paths, rec),i|
148
+ errors = rec['errors']
149
+
150
+ if errors.size > 0
151
+ buf << "!! #{errors.size} ERROR(S) "
152
+ else
153
+ buf << " OK "
154
+ end
155
+ buf << "%-20s" % rec['path']
156
+ buf << " - #{paths.size} datafile(s)"
157
+ buf << "\n"
158
+
159
+ if errors.size > 0
160
+ buf << errors.pretty_inspect
161
+ buf << "\n"
162
+ end
163
+ end
164
+
165
+ puts
166
+ puts "SUMMARY:"
167
+ puts buf
168
+
169
+ basedir = File.dirname( opts[:file] )
170
+ basename = File.basename( opts[:file], File.extname( opts[:file] ))
171
+ outpath = "#{basedir}/fbcheck.#{basename}.txt"
172
+ write_text( outpath, buf )
173
+ end
174
+
175
+
176
+ puts "bye"
177
+
data/bin/fbx CHANGED
@@ -84,16 +84,16 @@ paths.each_with_index do |path,i|
84
84
  puts "==> [#{i+1}/#{paths.size}] reading >#{path}<..."
85
85
 
86
86
  txt = read_text( path )
87
- secs = SportDb::LeagueOutlineReader.parse( txt )
87
+ secs = SportDb::QuickLeagueOutlineReader.parse( txt )
88
88
  ## pp secs
89
89
 
90
90
  secs.each_with_index do |sec,j| ## sec(tion)s
91
- season = sec[:season]
91
+ season = Season.parse( sec[:season] ) ## convert (str) to season obj!!!
92
92
  league = sec[:league]
93
93
  stage = sec[:stage]
94
94
  lines = sec[:lines]
95
95
 
96
- puts " section #{j+1}/#{secs.size} - #{league.name} #{season}, #{stage} - #{lines.size} line(s)"
96
+ puts " section #{j+1}/#{secs.size} - #{league} #{season}, #{stage} - #{lines.size} line(s)"
97
97
 
98
98
  next if opts[:outline]
99
99
 
data/lib/fbtok/opts.rb CHANGED
@@ -18,11 +18,12 @@ class Opts
18
18
  ## note: if pattern includes directory add here
19
19
  ## (otherwise move to more "generic" datafile) - why? why not?
20
20
  ## update - note include/allow dot (.) too
21
+ ## BUT NOT as first character!!! (e.g. exclude .confg.txt !!!)
21
22
  ## e.g. 2024-25/at.1.txt
22
23
  ## change to at_1 or uefa_cl or such - why? why not?
23
24
  MATCH_RE = %r{ (?: ^|/ ) # beginning (^) or beginning of path (/)
24
25
  #{SEASON}
25
- /[a-z0-9_.-]+\.txt$ ## txt e.g /1-premierleague.txt
26
+ /[a-z0-9][a-z0-9_.-]*\.txt$ ## txt e.g /1-premierleague.txt
26
27
  }x
27
28
 
28
29
 
data/lib/fbtok.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- require 'sportdb/quick'
2
+ require 'sportdb/formats'
3
3
 
4
4
 
5
5
  ## more stdlibs
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fbtok
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
@@ -11,19 +11,19 @@ cert_chain: []
11
11
  date: 2025-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sportdb-quick
14
+ name: sportdb-formats
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.0
19
+ version: 2.1.2
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.0
26
+ version: 2.1.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rdoc
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -61,6 +61,7 @@ dependencies:
61
61
  description: fbtok - football.txt lint tools incl. tokenizer, parser & more
62
62
  email: gerald.bauer@gmail.com
63
63
  executables:
64
+ - fbchk
64
65
  - fbt
65
66
  - fbtok
66
67
  - fbx
@@ -74,6 +75,7 @@ files:
74
75
  - Manifest.txt
75
76
  - README.md
76
77
  - Rakefile
78
+ - bin/fbchk
77
79
  - bin/fbt
78
80
  - bin/fbtok
79
81
  - bin/fbx