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