Method: Excon::Connection#initialize

Defined in:
lib/excon/connection.rb

#initialize(params = {}) ⇒ Connection

Initializes a new Connection instance

@param [Hash<Symbol, >] params One or more optional params
  @option params [String] :body Default text to be sent over a socket. Only used if :body absent in Connection#request params
  @option params [Hash<Symbol, String>] :headers The default headers to supply in a request. Only used if params[:headers] is not supplied to Connection#request
  @option params [String] :host The destination host's reachable DNS name or IP, in the form of a String. IPv6 addresses must be wrapped (e.g. [::1]).  See URI#host.
  @option params [String] :hostname Same as host, but usable for socket connections. IPv6 addresses must not be wrapped (e.g. ::1).  See URI#hostname.
  @option params [String] :path Default path; appears after 'scheme://host:port/'. Only used if params[:path] is not supplied to Connection#request
  @option params [Fixnum] :port The port on which to connect, to the destination host
  @option params [Hash]   :query Default query; appended to the 'scheme://host:port/path/' in the form of '?key=value'. Will only be used if params[:query] is not supplied to Connection#request
  @option params [String] :scheme The protocol; 'https' causes OpenSSL to be used
  @option params [String] :socket The path to the unix socket (required for 'unix://' connections)
  @option params [String] :ciphers Only use the specified SSL/TLS cipher suites; use OpenSSL cipher spec format e.g. 'HIGH:!aNULL:!3DES' or 'AES256-SHA:DES-CBC3-SHA'
  @option params [String] :proxy Proxy server; e.g. 'http://myproxy.com:8888'
  @option params [Fixnum] :retry_limit Set how many times we'll retry a failed request.  (Default 4)
  @option params [Class] :instrumentor Responds to #instrument as in ActiveSupport::Notifications
  @option params [String] :instrumentor_name Name prefix for #instrument events.  Defaults to 'excon'


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/excon/connection.rb', line 50

def initialize(params = {})
  @data = Excon.defaults.dup
  # merge does not deep-dup, so make sure headers is not the original
  @data[:headers] = @data[:headers].dup

  # the same goes for :middlewares
  @data[:middlewares] = @data[:middlewares].dup

  params = validate_params(:connection, params)
  @data.merge!(params)

  setup_proxy

  if  ENV.has_key?('EXCON_STANDARD_INSTRUMENTOR')
    @data[:instrumentor] = Excon::StandardInstrumentor
  end

  if @data[:debug] || ENV.has_key?('EXCON_DEBUG')
    @data[:debug_request] = @data[:debug_response] = true
    @data[:instrumentor] = Excon::StandardInstrumentor
  end

  # Use Basic Auth if url contains a login
  if @data[:user] || @data[:password]
    user, pass = Utils.unescape_form(@data[:user].to_s), Utils.unescape_form(@data[:password].to_s)
    @data[:headers]['Authorization'] ||= 'Basic ' << ['' << user.to_s << ':' << pass.to_s].pack('m').delete(Excon::CR_NL)
  end

  @socket_key = '' << @data[:scheme]
  if @data[:scheme] == UNIX
    if @data[:host]
      raise ArgumentError, "The `:host` parameter should not be set for `unix://` connections.\n" +
                           "When supplying a `unix://` URI, it should start with `unix:/` or `unix:///`."
    elsif !@data[:socket]
      raise ArgumentError, 'You must provide a `:socket` for `unix://` connections'
    else
      @socket_key << '://' << @data[:socket]
    end
  else
    @socket_key << '://' << @data[:host] << port_string(@data)
  end
  reset
end