class Integer
Public Instance Methods
tries(options = {}) { || ... }
click to toggle source
# File lib/tries.rb, line 13 def tries(options = {}, &block) attempts = 1 exception_classes = Array(options[:on] || StandardError) delay = options[:delay] incremental = options[:incremental] condition = options[:if] begin return yield rescue *exception_classes => exception raise exception if condition && !condition.call(exception) next_delay = calculate_delay(delay, attempts, incremental) if delay [Tries.configuration.on_error, options[:on_error]].compact.each do |on_error_callback| on_error_callback.call(exception, attempts, next_delay) end Kernel.sleep next_delay if delay retry if (attempts += 1) <= self end yield end
Private Instance Methods
calculate_delay(delay, attempts, incremental)
click to toggle source
# File lib/tries.rb, line 37 def calculate_delay(delay, attempts, incremental) return delay unless incremental (delay * attempts * 100).round.to_f / 100 end