Module: Fbquick

Defined in:
lib/fbtok/fbquick.rb

Class Method Summary collapse

Class Method Details

.main(args = ARGV) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/fbtok/fbquick.rb', line 5

def self.main( args=ARGV )

 opts = { debug: false,
          file:  nil,
        }

 parser = OptionParser.new do |parser|
  parser.banner = "Usage: #{$PROGRAM_NAME} [options] DATAFILE or DIR"

##
## check if git has a offline option?? (use same)
##             check for other tools - why? why not?
#    parser.on( "-q", "--quiet",
#                 "less debug output/messages - default is (#{!opts[:debug]})" ) do |debug|
#      opts[:debug] = false
#    end
   parser.on( "--verbose", "--debug",
               "turn on verbose / debug output (default: #{opts[:debug]})" ) do |debug|
     opts[:debug] = true
   end

    parser.on( "-f FILE", "--file FILE",
                    "read datafiles (pathspecs) via .csv file") do |file|
      opts[:file] = file
    end


end
parser.parse!( args )



if opts[:debug]
  puts "OPTS:"
  p opts
  puts "ARGV:"
  p args

  SportDb::QuickMatchReader.debug = true
  SportDb::MatchParser.debug      = true
else
  SportDb::QuickMatchReader.debug = false
  SportDb::MatchParser.debug      = false
  LogUtils::Logger.root.level = :info
end


## todo/check - use packs or projects or such
##                instead of specs - why? why not?
specs =  if opts[:file]
            read_pathspecs( opts[:file] )
         else
           args =     ['/sports/openfootball/euro/2021--europe/euro.txt',
                       '/sports/openfootball/euro/2024--germany/euro.txt']  if args.empty?

            build_pathspecs( args )
         end

pp specs



  specs.each_with_index do |rec,i|
    datafiles = rec['datafiles']
    errors = []

    datafiles.each_with_index do |path,j|
      puts "==> [#{i+1}/#{specs.size}, #{j+1}/#{datafiles.size}] reading >#{path}<..."
      txt = read_text( path )
      quick = SportDb::QuickMatchReader.new( txt )
      matches = quick.parse

      if quick.errors?
        puts "!! #{quick.errors.size} error(s):"
        pp quick.errors

        quick.errors.each do |err|
          errors << [ path, *err ]   # note: use splat (*) to add extra values (starting with msg)
        end
      end
      puts "  #{matches.size} match(es)"
    end

    if errors.size > 0
      puts
      puts "!! #{errors.size} PARSE ERRORS in #{datafiles.size} datafile(s)"
      pp errors
    else
      puts
      puts "  OK - no parse errors in #{datafiles.size} datafile(s)"
    end

     ## add errors to rec via rec['errors'] to allow
     ##   for further processing/reporting
     rec['errors'] = errors
  end



###
## generate a report if --file option used
if opts[:file]
  buf = SportDb::PathspecReport.new(
            specs,
            title: 'fbquick summary report' ).build

  puts
  puts "SUMMARY:"
  puts buf

  #  maybe write out in the future?
  # basedir  = File.dirname( opts[:file] )
  # basename = File.basename( opts[:file], File.extname( opts[:file] ))
end

puts "bye"
end