module Faraday::MiddlewareRegistry

Adds the ability for other modules to register and lookup middleware classes.

Public Instance Methods

lookup_middleware(key) click to toggle source

Lookup middleware class with a registered Symbol shortcut.

@param key [Symbol] key for the registered middleware. @return [Class] a middleware Class. @raise [Faraday::Error] if given key is not registered

@example

module Faraday
  class Whatever < Middleware
    register_middleware(foo: Whatever)
  end
end

Faraday::Middleware.lookup_middleware(:foo)
# => Faraday::Whatever
# File lib/faraday/middleware_registry.rb, line 55
def lookup_middleware(key)
  load_middleware(key) ||
    raise(Faraday::Error, "#{key.inspect} is not registered on #{self}")
end
register_middleware(**mappings) click to toggle source

Register middleware class(es) on the current module.

@param mappings [Hash] Middleware mappings from a lookup symbol to a middleware class. @return [void]

@example Lookup by a constant

module Faraday
  class Whatever < Middleware
    # Middleware looked up by :foo returns Faraday::Whatever::Foo.
    register_middleware(foo: Whatever)
  end
end
# File lib/faraday/middleware_registry.rb, line 26
def register_middleware(**mappings)
  middleware_mutex do
    registered_middleware.update(mappings)
  end
end
registered_middleware() click to toggle source
# File lib/faraday/middleware_registry.rb, line 9
def registered_middleware
  @registered_middleware ||= {}
end
unregister_middleware(key) click to toggle source

Unregister a previously registered middleware class.

@param key [Symbol] key for the registered middleware.

# File lib/faraday/middleware_registry.rb, line 35
def unregister_middleware(key)
  registered_middleware.delete(key)
end

Private Instance Methods

load_middleware(key) click to toggle source
# File lib/faraday/middleware_registry.rb, line 67
def load_middleware(key)
  value = registered_middleware[key]
  case value
  when Module
    value
  when Symbol, String
    middleware_mutex do
      @registered_middleware[key] = const_get(value)
    end
  when Proc
    middleware_mutex do
      @registered_middleware[key] = value.call
    end
  end
end
middleware_mutex(&block) click to toggle source
# File lib/faraday/middleware_registry.rb, line 62
def middleware_mutex(&block)
  @middleware_mutex ||= Monitor.new
  @middleware_mutex.synchronize(&block)
end