Sha256: 4dda02e18b4f3958ca15451b4b2ed404095e56b8551bddea5721f5e2ecc23464

Contents?: true

Size: 1.76 KB

Versions: 7

Compression:

Stored size: 1.76 KB

Contents

# frozen_string_literal: true

require 'monitor'

module Faraday
  # Adds the ability for other modules to register and lookup
  # middleware classes.
  module MiddlewareRegistry
    def registered_middleware
      @registered_middleware ||= {}
    end

    # 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
    def register_middleware(**mappings)
      middleware_mutex do
        registered_middleware.update(mappings)
      end
    end

    # Unregister a previously registered middleware class.
    #
    # @param key [Symbol] key for the registered middleware.
    def unregister_middleware(key)
      registered_middleware.delete(key)
    end

    # 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
    def lookup_middleware(key)
      registered_middleware[key] ||
        raise(Faraday::Error, "#{key.inspect} is not registered on #{self}")
    end

    def middleware_mutex(&block)
      @middleware_mutex ||= Monitor.new
      @middleware_mutex.synchronize(&block)
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
faraday-2.1.0 lib/faraday/middleware_registry.rb
faraday-2.0.1 lib/faraday/middleware_registry.rb
faraday-2.0.0 lib/faraday/middleware_registry.rb
faraday-2.0.0.alpha.pre.4 lib/faraday/middleware_registry.rb
faraday-2.0.0.alpha.pre.3 lib/faraday/middleware_registry.rb
faraday-2.0.0.alpha.pre.2 lib/faraday/middleware_registry.rb
faraday-2.0.0.alpha.pre.1 lib/faraday/middleware_registry.rb