bin/brand2csv in brand2csv-0.2.4 vs bin/brand2csv in brand2csv-0.2.5

- old
+ new

@@ -3,10 +3,11 @@ require 'pathname' root = Pathname.new(__FILE__).realpath.parent.parent $:.unshift root.join('lib') if $0 == __FILE__ require 'optparse' +require "date" require 'brand2csv' def help <<EOS #$0 ver.#{Brand2csv::VERSION} @@ -20,34 +21,80 @@ The trademark name is either a real brand name or a link to an image. --swiss_only Fetch only trademarks from swiss owner EOS end -parser = OptionParser.new -opts = {} -parser.on('--swiss_only') {|v| opts[:swiss_only] = true } -parser.on_tail('-h', '--help') { puts help; exit } - -args = ARGV.dup -begin - parser.parse!(args) -rescue OptionParser::MissingArgument, - OptionParser::InvalidArgument, - OptionParser::InvalidOption - puts help - exit 1 +def validates_timespan(arg) + valid = true + timespan = "" + dates = arg.gsub(/[^\d\.-]/, '').split("-") + catch (:error) do + dates.map.with_index do |d, i| + sep = (dates.length > 1 && i != 0) ? "-" : "" + begin + Date.parse(d) + timespan << sep + d + rescue ArgumentError + valid = false + elms = d.split(".") + prms = [elms[2], elms[1], -1].map(&:to_i) + begin + cand = Date.new(*prms).strftime("%d.%m.%Y") + if elms[0] == (elms - cand.to_s.split(".")).first + timespan << sep + cand.to_s + else + raise + end + rescue ArgumentError + timespan = "" # unknown + throw :error + end + end + end + end + message = nil + unless valid + if timespan.empty? + message = "Timespan is invalid" + else + message = "Did you mean #{timespan} ?" + end + end + [valid, message] end +if $0 == __FILE__ + parser = OptionParser.new + opts = {} + parser.on('--swiss_only') {|v| opts[:swiss_only] = true } + parser.on_tail('-h', '--help') { puts help; exit } -unless args.size >= 1 - puts help - exit 1 -end + args = ARGV.dup + begin + parser.parse!(args) + rescue OptionParser::MissingArgument, + OptionParser::InvalidArgument, + OptionParser::InvalidOption + puts help + exit 1 + end -begin - Brand2csv::run(args[0], args[1], opts[:swiss_only]) -rescue Interrupt - puts "Unterbrochen. Breche mit Fehler ab" - exit 1 -end + unless args.size >= 1 + puts help + exit 1 + end -puts "#{__FILE__} completed successfully" if $VERBOSE + valid,message = validates_timespan(args[0]) + unless valid + puts message + exit 1 + end + + begin + Brand2csv::run(args[0], args[1], opts[:swiss_only]) + rescue Interrupt + puts "Unterbrochen. Breche mit Fehler ab" + exit 1 + end + + puts "#{__FILE__} completed successfully" if $VERBOSE +end