Class: Circuitbox::ExconMiddleware

Inherits:
Excon::Middleware::Base
  • Object
show all
Defined in:
lib/circuitbox/excon_middleware.rb

Defined Under Namespace

Classes: NullResponse, RequestFailed

Constant Summary collapse

DEFAULT_EXCEPTIONS =
[
  Excon::Errors::Timeout,
  RequestFailed
]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stack, opts = {}) ⇒ ExconMiddleware

Returns a new instance of ExconMiddleware.



27
28
29
30
31
32
# File 'lib/circuitbox/excon_middleware.rb', line 27

def initialize(stack, opts = {})
  @stack = stack
  default_options = { open_circuit: lambda { |response| response[:status] >= 400 } }
  @opts = default_options.merge(opts)
  super(stack)
end

Instance Attribute Details

#optsObject (readonly)

Returns the value of attribute opts.



25
26
27
# File 'lib/circuitbox/excon_middleware.rb', line 25

def opts
  @opts
end

Instance Method Details

#error_call(datum) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/circuitbox/excon_middleware.rb', line 34

def error_call(datum)
  circuit(datum).run!(run_options(datum)) do
    raise RequestFailed
  end
rescue Circuitbox::Error => exception
  circuit_open_value(datum, datum[:response], exception)
end

#exceptionsObject



61
62
63
# File 'lib/circuitbox/excon_middleware.rb', line 61

def exceptions
  circuit_breaker_options[:exceptions]
end

#identifierObject



57
58
59
# File 'lib/circuitbox/excon_middleware.rb', line 57

def identifier
  @identifier ||= opts.fetch(:identifier, ->(env) { env[:path] })
end

#request_call(datum) ⇒ Object



42
43
44
45
46
# File 'lib/circuitbox/excon_middleware.rb', line 42

def request_call(datum)
  circuit(datum).run!(run_options(datum)) do
    @stack.request_call(datum)
  end
end

#response_call(datum) ⇒ Object



48
49
50
51
52
53
54
55
# File 'lib/circuitbox/excon_middleware.rb', line 48

def response_call(datum)
  circuit(datum).run!(run_options(datum)) do
    raise RequestFailed if open_circuit?(datum[:response])
  end
  @stack.response_call(datum)
rescue Circuitbox::Error => exception
  circuit_open_value(datum, datum[:response], exception)
end