unless defined? $__rq_updater__ module RQ #{{{ LIBDIR = File::dirname(File::expand_path(__FILE__)) + File::SEPARATOR unless defined? LIBDIR require LIBDIR + 'mainhelper' class Updater < MainHelper #{{{ def update #{{{ set_q jids = [] kvs = {} # # scan argv for jids to update # while((arg = @argv.first)) case arg when %r/^\d+$/o jids << Integer(arg) when %r/^jid\s*=\s*(\d+)$/io jids << Integer($1) when %r/^p(?:ending)$/o jids << 'pending' else break end @argv.shift end # # scan argv for key=val pairs # cmdline = @argv.join(' ') keyeqpat = %r/\s*([^\s=]+)\s*=\s*/ keyvals = cmdline.split keyeqpat keyvals.shift loop do k = keyvals.shift v = keyvals.shift break if k.nil? and v.nil? raise "syntax error in update <#{ cmdline }> @ <#{ k }>" unless k and v k.strip! v.strip! kvs[k] = v end raise "no updates" if kvs.empty? # # scan stdin for jids to update if in pipeline # #if jids.empty? or not STDIN.tty? if not STDIN.tty? #pat = %r/^(?:\s*jid\s*:)?\s*(\d+)\s*$/io while((line = STDIN.gets)) case line when %r/^(?:\s*jid\s*:)?\s*(\d+)\s*$/io jids << Integer($1) when %r/^\s*p(?:ending)\s*$/io jids << 'pending' else next end end end #jids.map!{|jid| jid =~ %r/^\s*\d+\s*$/o ? Integer(jid) : jid} #raise "no jids" if jids.empty? # # if no jids were specified simply update all pending jobs # jids << 'pending' if jids.empty? # # apply the update # if @options['quiet'] @q.update(kvs,*jids) else puts '---' tuples = @q.update(kvs,*jids) fields = nil tuples.each do |tuple| puts '-' fields ||= tuple.fields fields.each{|f| puts " #{ f }: #{ tuple[f] }" } end end #}}} end #}}} end # class Updater #}}} end # module RQ $__rq_updater__ = __FILE__ end