bin/wasserstand in wasserstand-0.0.10 vs bin/wasserstand in wasserstand-0.0.11

- old
+ new

@@ -4,17 +4,32 @@ Bundler.require require 'wasserstand' require 'optparse' -OptionParser.new do |opts| +options = {} + +params = OptionParser.new do |opts| opts.banner = <<HERE -Wasserstand provides water level information as provided by PegelOnline. +Shows water level information as provided by PegelOnline. Usage: - #{File.basename($0)} [options] [WATERWAY | LEVEL] + #{File.basename($0)} [options] [WATERWAY | LEVEL | WATERWAY LEVEL] +Examples: + # all waterways + #{File.basename($0)} + + # single waterway + #{File.basename($0)} Rhein + + # single level + #{File.basename($0)} Koblenz + + # single level that happens to have the same name as a waterway + #{File.basename($0)} Ilm Ilmenau + Author: Nicolas E. Rabenau nerab@gmx.at Homepage: http://github.com/nerab/wasserstand @@ -31,36 +46,27 @@ Wasserstand.logger.level = Log4r::ALL Wasserstand.logger.debug("Enable debug logger") end opts.on("-u", "--url URL", "Use URL to fetch levels") do |url| - Wasserstand.logger.info("Using URL #{url}") - Wasserstand.provider = Wasserstand::Provider::PegelOnline.new(url) + options[:url] = url end + + opts.on("-c", "--cache [URL]", "Use memcached at URL instead of heap. URL defaults to 127.0.0.1:11211.") do |url| + options[:cache] = url || '127.0.0.1:11211' + end end.parse! -query = ARGV.shift +Wasserstand.provider = Wasserstand::Provider::PegelOnline.new(options[:url]) -if query.nil? - Wasserstand::Waterway.all.each{|ww| puts "#{ww.name} (#{ww.levels.size} levels)"} -else - begin - waterway = Wasserstand::Waterway[query] +if options[:cache] + Bundler.require(:default, :dalli) + Wasserstand.logger.info("Using memcached at #{options[:cache]}") + Wasserstand.provider.cache = Dalli::Client.new(options[:cache], :expires_in => 60 * 60) +end - if waterway - puts "#{waterway.name} has #{waterway.levels.size} levels:" - waterway.levels.sort_by{|name, level| level.km}.each{|name, level| puts "#{name} (km #{level.km}): #{level.measurements.last}"} - else - level = Wasserstand::Level[query] - - if level.nil? - STDERR.puts "#{File.basename($0)}: No waterway nor level found that matches '#{query}." - else - puts "Level #{level.name} (#{level.waterway}, km #{level.km}):" - level.measurements.each{|measurement| puts measurement} - end - end - rescue - STDERR.puts $! - $!.backtrace.each{|msg| Wasserstand.logger.debug(msg)} - end +begin + Wasserstand::Commandline.get(params) +rescue + STDERR.puts $! + $!.backtrace.each{|msg| Wasserstand.logger.debug(msg)} end