--- /dev/null
+module Faraday
+ # Internal: Adds the ability for other modules to manage autoloadable
+ # constants.
+ module AutoloadHelper
+ # Internal: Registers the constants to be auto loaded.
+ #
+ # prefix - The String require prefix. If the path is inside Faraday, then
+ # it will be prefixed with the root path of this loaded Faraday
+ # version.
+ # options - Hash of Symbol => String library names.
+ #
+ # Examples.
+ #
+ # Faraday.autoload_all 'faraday/foo',
+ # :Bar => 'bar'
+ #
+ # # requires faraday/foo/bar to load Faraday::Bar.
+ # Faraday::Bar
+ #
+ #
+ # Returns nothing.
+ def autoload_all(prefix, options)
+ if prefix =~ /^faraday(\/|$)/i
+ prefix = File.join(Faraday.root_path, prefix)
+ end
+ options.each do |const_name, path|
+ autoload const_name, File.join(prefix, path)
+ end
+ end
+
+ # Internal: Loads each autoloaded constant. If thread safety is a concern,
+ # wrap this in a Mutex.
+ #
+ # Returns nothing.
+ def load_autoloaded_constants
+ constants.each do |const|
+ const_get(const) if autoload?(const)
+ end
+ end
+
+ # Internal: Filters the module's contents with those that have been already
+ # autoloaded.
+ #
+ # Returns an Array of Class/Module objects.
+ def all_loaded_constants
+ constants.map { |c| const_get(c) }.
+ select { |a| a.respond_to?(:loaded?) && a.loaded? }
+ end
+ end
+
+ class Adapter
+ extend AutoloadHelper
+ autoload_all 'faraday/adapter',
+ :NetHttp => 'net_http',
+ :NetHttpPersistent => 'net_http_persistent',
+ :Typhoeus => 'typhoeus',
+ :EMSynchrony => 'em_synchrony',
+ :EMHttp => 'em_http',
+ :Patron => 'patron',
+ :Excon => 'excon',
+ :Test => 'test',
+ :Rack => 'rack',
+ :HTTPClient => 'httpclient'
+ end
+
+ class Request
+ extend AutoloadHelper
+ autoload_all 'faraday/request',
+ :UrlEncoded => 'url_encoded',
+ :Multipart => 'multipart',
+ :Retry => 'retry',
+ :Timeout => 'timeout',
+ :Authorization => 'authorization',
+ :BasicAuthentication => 'basic_authentication',
+ :TokenAuthentication => 'token_authentication',
+ :Instrumentation => 'instrumentation'
+ end
+
+ class Response
+ extend AutoloadHelper
+ autoload_all 'faraday/response',
+ :RaiseError => 'raise_error',
+ :Logger => 'logger'
+ end
+end