Class: HTTParty::ConnectionAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/httparty/connection_adapter.rb

Overview

Default connection adapter that returns a new Net::HTTP each time

Custom Connection Factories

If you like to implement your own connection adapter, subclassing HTTPParty::ConnectionAdapter will make it easier. Just override the #connection method. The uri and options attributes will have all the info you need to construct your http connection. Whatever you return from your connection method needs to adhere to the Net::HTTP interface as this is what HTTParty expects.

Configuration

There is lots of configuration data available for your connection adapter in the #options attribute. It is up to you to interpret them within your connection adapter. Take a look at the implementation of HTTParty::ConnectionAdapter#connection for examples of how they are used. Something are probably interesting are as follows:

  • :timeout: timeout in seconds

  • :debug_output: see HTTParty::ClassMethods.debug_output.

  • :pem: contains pem data. see HTTParty::ClassMethods.pem.

  • :ssl_ca_file: see HTTParty::ClassMethods.ssl_ca_file.

  • :ssl_ca_path: see HTTParty::ClassMethods.ssl_ca_path.

  • :connection_adapter_options: contains the hash your passed to HTTParty.connection_adapter when you configured your connection adapter

Examples:

log the uri and options

class LoggingConnectionAdapter < HTTParty::ConnectionAdapter
  def connection
    puts uri
    puts options
    Net::HTTP.new(uri)
  end
end

count number of http calls

class CountingConnectionAdapter < HTTParty::ConnectionAdapter
  @@count = 0

  self.count
    @@count
  end

  def connection
    self.count += 1
    super
  end
end

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri, options = {}) ⇒ ConnectionAdapter

Returns a new instance of ConnectionAdapter.

Raises:

  • (ArgumentError)


56
57
58
59
60
61
# File 'lib/httparty/connection_adapter.rb', line 56

def initialize(uri, options={})
  raise ArgumentError, "uri must be a URI, not a #{uri.class}" unless uri.kind_of? URI

  @uri = uri
  @options = options
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



54
55
56
# File 'lib/httparty/connection_adapter.rb', line 54

def options
  @options
end

#uriObject (readonly)

Returns the value of attribute uri.



54
55
56
# File 'lib/httparty/connection_adapter.rb', line 54

def uri
  @uri
end

Class Method Details

.call(uri, options) ⇒ Object



50
51
52
# File 'lib/httparty/connection_adapter.rb', line 50

def self.call(uri, options)
  new(uri, options).connection
end

Instance Method Details

#connectionObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/httparty/connection_adapter.rb', line 63

def connection
  http = Net::HTTP.new(uri.host, uri.port, options[:http_proxyaddr], options[:http_proxyport], options[:http_proxyuser], options[:http_proxypass])

  http.use_ssl = ssl_implied?(uri)

  attach_ssl_certificates(http, options)

  if options[:timeout] && (options[:timeout].is_a?(Integer) || options[:timeout].is_a?(Float))
    http.open_timeout = options[:timeout]
    http.read_timeout = options[:timeout]
  end

  if options[:debug_output]
    http.set_debug_output(options[:debug_output])
  end

  return http
end