lib/knj/retry.rb in knjrbfw-0.0.8 vs lib/knj/retry.rb in knjrbfw-0.0.9

- old
+ new

@@ -1,71 +1,71 @@ class Knj::Retry - def self.try(args = {}, &block) - raise "No block was given." if !block_given? - - args[:tries] = 3 if !args[:tries] - tries = [] - error = nil - - args[:tries].to_i.downto(1) do |count| - error = nil - dobreak = false - - begin - if args[:timeout] - begin - Timeout.timeout(args[:timeout]) do - block.call - dobreak = true - break - end - rescue Timeout::Error => e - doraise = e if count <= 1 - error = e - sleep(args[:wait]) if args[:wait] and !doraise - end - else - block.call - dobreak = true - break - end - rescue Exception => e - if e.class == Interrupt - raise e if !args.key?(:interrupt) or args[:interrupt] - elsif e.class == SystemExit - raise e if !args.key?(:exit) or args[:exit] - elsif count <= 1 or (args.key?(:errors) and args[:errors].index(e.class) == nil) - doraise = e - elsif args.key?(:errors) and args[:errors].index(e.class) != nil - #given error was in the :errors-array - do nothing. Maybe later it should be logged and returned in a stats-hash or something? - knj - end - - error = e - sleep(args[:wait]) if args[:wait] and !doraise - end - - if doraise - if args[:return_error] - tries << {:error => error} - return { - :tries => tries, - :result => false - } - else - raise e - end - elsif error - tries << {:error => error} - end - - break if dobreak - end - - res = true - res = false if error - - return { - :tries => tries, - :result => res - } - end + def self.try(args = {}, &block) + raise "No block was given." if !block_given? + + args[:tries] = 3 if !args[:tries] + tries = [] + error = nil + + args[:tries].to_i.downto(1) do |count| + error = nil + dobreak = false + + begin + if args[:timeout] + begin + Timeout.timeout(args[:timeout]) do + block.call + dobreak = true + break + end + rescue Timeout::Error => e + doraise = e if count <= 1 + error = e + sleep(args[:wait]) if args[:wait] and !doraise + end + else + block.call + dobreak = true + break + end + rescue Exception => e + if e.class == Interrupt + raise e if !args.key?(:interrupt) or args[:interrupt] + elsif e.class == SystemExit + raise e if !args.key?(:exit) or args[:exit] + elsif count <= 1 or (args.key?(:errors) and args[:errors].index(e.class) == nil) + doraise = e + elsif args.key?(:errors) and args[:errors].index(e.class) != nil + #given error was in the :errors-array - do nothing. Maybe later it should be logged and returned in a stats-hash or something? - knj + end + + error = e + sleep(args[:wait]) if args[:wait] and !doraise + end + + if doraise + if args[:return_error] + tries << {:error => error} + return { + :tries => tries, + :result => false + } + else + raise e + end + elsif error + tries << {:error => error} + end + + break if dobreak + end + + res = true + res = false if error + + return { + :tries => tries, + :result => res + } + end end \ No newline at end of file