Public: Adds the ability for other modules to register and lookup middleware classes.
# File lib/faraday.rb, line 198 def fetch_middleware(key) defined?(@registered_middleware) && @registered_middleware[key] end
# File lib/faraday.rb, line 202 def load_middleware(key) value = fetch_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 when Array middleware_mutex do const, path = value if root = @middleware_autoload_path path = "#{root}/#{path}" end require(path) @registered_middleware[key] = const end load_middleware(key) end end
Public: Lookup middleware class with a registered Symbol shortcut.
key - The Symbol key for the registered middleware.
Examples
module Faraday class Whatever register_middleware :foo => Foo end end Faraday::Whatever.lookup_middleware(:foo) # => Faraday::Whatever::Foo
Returns a middleware Class.
# File lib/faraday.rb, line 185 def lookup_middleware(key) load_middleware(key) || raise(Faraday::Error.new("#{key.inspect} is not registered on #{self}")) end
# File lib/faraday.rb, line 190 def middleware_mutex(&block) @middleware_mutex ||= begin require 'monitor' Monitor.new end @middleware_mutex.synchronize(&block) end
Public: Register middleware class(es) on the current module.
mapping - A Hash mapping Symbol keys to classes. Classes can be expressed
as fully qualified constant, or a Proc that will be lazily called to return the former.
Examples
module Faraday class Whatever # Middleware looked up by :foo returns Faraday::Whatever::Foo. register_middleware :foo => Foo # Middleware looked up by :bar returns Faraday::Whatever.const_get(:Bar) register_middleware :bar => :Bar # Middleware looked up by :baz requires 'baz' and returns Faraday::Whatever.const_get(:Baz) register_middleware :baz => [:Baz, 'baz'] end end
Returns nothing.
# File lib/faraday.rb, line 158 def register_middleware(autoload_path = nil, mapping = nil) if mapping.nil? mapping = autoload_path autoload_path = nil end middleware_mutex do @middleware_autoload_path = autoload_path if autoload_path (@registered_middleware ||= {}).update(mapping) end end