class FaradayMiddleware::CircuitBreaker::Middleware

Attributes

option_set[R]

Public Class Methods

new(app, options = {}) click to toggle source
Calls superclass method
# File lib/faraday_middleware/circuit_breaker/middleware.rb, line 9
def initialize(app, options = {})
  super(app)
  assert_valid_options!(options)

  @option_set = OptionSet.new(options)

  setup_data_store
  setup_notifiers
end

Public Instance Methods

call(env) click to toggle source
# File lib/faraday_middleware/circuit_breaker/middleware.rb, line 19
def call(env)
  base_url = URI.join(env.url, '/')
  Stoplight(base_url.to_s) do
    @app.call(env)
  end
  .with_cool_off_time(option_set.timeout)
  .with_threshold(option_set.threshold)
  .with_fallback { |e| option_set.fallback.call(env, e) }
  .with_error_handler { |err, handler| option_set.error_handler.call(err, handler) }
  .run
end

Private Instance Methods

assert_valid_options!(options) click to toggle source
# File lib/faraday_middleware/circuit_breaker/middleware.rb, line 58
def assert_valid_options!(options)
  OptionSet.validate!(options)
end
setup_data_store() click to toggle source
# File lib/faraday_middleware/circuit_breaker/middleware.rb, line 35
def setup_data_store
  Stoplight::Light.default_data_store = option_set.data_store.call
end
setup_notifiers() click to toggle source
# File lib/faraday_middleware/circuit_breaker/middleware.rb, line 39
def setup_notifiers
  option_set.notifiers.each do |notifier, value|
    case notifier.to_sym
    when :logger
      Stoplight::Light.default_notifiers += [Stoplight::Notifier::Logger.new(value)]
    when :honeybadger
      Stoplight::Light.default_notifiers += [Stoplight::Notifier::Honeybadger.new(value)]
    when :raven, :sentry
      Stoplight::Light.default_notifiers += [Stoplight::Notifier::Raven.new(value)]
    when :hip_chat
      Stoplight::Light.default_notifiers += [Stoplight::Notifier::HipChat.new(value[:client], value[:room])]
    when :slack
      Stoplight::Light.default_notifiers += [Stoplight::Notifier::Slack.new(value)]
    when :bugsnag
      Stoplight::Light.default_notifiers += [Stoplight::Notifier::Bugsnag.new(value)]
    end
  end
end