Proc.class_eval do def rescue number_of_attempts=0 @n = number_of_attempts begin self.call rescue => message yield message, @n if block_given? @n -= 1 retry if @n > 0 end end end
And then you can use it like:
-> { raise 'hi' }.rescue(3) -> { raise 'hi' }.rescue(3) { |m, n| puts "message: #{m}, number of attempts left: #{n}" }
lakesare
source share