class SimpleCircuit
Constants
- VERSION
Attributes
logger[R]
max_failures[R]
payload[R]
retry_in[R]
Public Class Methods
new(payload:, max_failures: 100, retry_in: 60, logger: nil)
click to toggle source
# File lib/simple_circuit.rb, line 4 def initialize(payload:, max_failures: 100, retry_in: 60, logger: nil) @payload = payload @max_failures = max_failures @retry_in = retry_in @logger = logger @mutex = Mutex.new close end
Public Instance Methods
closed?()
click to toggle source
# File lib/simple_circuit.rb, line 32 def closed? @closed end
open?()
click to toggle source
# File lib/simple_circuit.rb, line 28 def open? !closed? end
pass(message, *args)
click to toggle source
# File lib/simple_circuit.rb, line 15 def pass(message, *args) fail @e if open? && !time_to_retry? result = payload.public_send(message, *args) close if open? result rescue => e raise e if open? @e = e @mutex.synchronize{ @failures[e.class] += 1 } break! if @failures[e.class] > max_failures raise e end
Private Instance Methods
break!()
click to toggle source
# File lib/simple_circuit.rb, line 43 def break! @closed = false @broken_at = Time.now logger&.warn('#{self} has been broken') end
close()
click to toggle source
# File lib/simple_circuit.rb, line 49 def close @closed = true @failures = Hash.new(0) end
time_to_retry?()
click to toggle source
# File lib/simple_circuit.rb, line 54 def time_to_retry? @broken_at + retry_in < Time.now end