module HTTPI

HTTPI

Executes HTTP requests using a predefined adapter. All request methods accept an HTTPI::Request and an optional adapter. They may also offer shortcut methods for executing basic requests. Also they all return an HTTPI::Response.

GET

request = HTTPI::Request.new :url => "http://example.com"
HTTPI.get request, :httpclient

Shortcuts

HTTPI.get "http://example.com", :curb

POST

request = HTTPI::Request.new
request.url = "http://example.com"
request.body = "<some>xml</some>"

HTTPI.post request, :httpclient

Shortcuts

HTTPI.post "http://example.com", "<some>xml</some>", :curb

HEAD

request = HTTPI::Request.new :url => "http://example.com"
HTTPI.head request, :httpclient

Shortcuts

HTTPI.head "http://example.com", :curb

PUT

request = HTTPI::Request.new
request.url = "http://example.com"
request.body = "<some>xml</some>"

HTTPI.put request, :httpclient

Shortcuts

HTTPI.put "http://example.com", "<some>xml</some>", :curb

DELETE

request = HTTPI::Request.new :url => "http://example.com"
HTTPI.delete request, :httpclient

Shortcuts

HTTPI.delete "http://example.com", :curb

More control

If you need more control over your request, you can access the HTTP client instance represented by your adapter in a block.

HTTPI.get request do |http|
  http.follow_redirect_count = 3  # HTTPClient example
end

Constants

DEFAULT_LOG_LEVEL
REQUEST_METHODS
VERSION

Attributes

log[W]

Sets whether to log HTTP requests.

log_level[W]

Sets the log level.

logger[W]

Sets the logger to use.

Public Class Methods

adapter=(adapter) click to toggle source

Shortcut for setting the default adapter to use.

# File lib/httpi.rb, line 137
def adapter=(adapter)
  Adapter.use = adapter
end
delete(request, adapter = nil) { |client| ... } click to toggle source

Executes an HTTP DELETE request.

# File lib/httpi.rb, line 121
def delete(request, adapter = nil)
  request = Request.new :url => request if request.kind_of? String

  with_adapter :delete, request, adapter do |adapter|
    yield adapter.client if block_given?
    adapter.delete request
  end
end
get(request, adapter = nil) { |client| ... } click to toggle source

Executes an HTTP GET request.

# File lib/httpi.rb, line 81
def get(request, adapter = nil)
  request = Request.new :url => request if request.kind_of? String

  with_adapter :get, request, adapter do |adapter|
    yield adapter.client if block_given?
    adapter.get request
  end
end
head(request, adapter = nil) { |client| ... } click to toggle source

Executes an HTTP HEAD request.

# File lib/httpi.rb, line 101
def head(request, adapter = nil)
  request = Request.new :url => request if request.kind_of? String

  with_adapter :head, request, adapter do |adapter|
    yield adapter.client if block_given?
    adapter.head request
  end
end
log(*messages) click to toggle source

Logs given messages.

# File lib/httpi.rb, line 166
def log(*messages)
  level = Symbol === messages.first ? messages.shift : log_level
  logger.send level, messages.join(" ") if log?
end
log?() click to toggle source

Returns whether to log HTTP requests. Defaults to true.

# File lib/httpi.rb, line 145
def log?
  @log != false
end
log_level() click to toggle source

Returns the log level. Defaults to :debug.

# File lib/httpi.rb, line 161
def log_level
  @log_level ||= DEFAULT_LOG_LEVEL
end
logger() click to toggle source

Returns the logger. Defaults to an instance of Logger writing to STDOUT.

# File lib/httpi.rb, line 153
def logger
  @logger ||= ::Logger.new STDOUT
end
post(*args) { |client| ... } click to toggle source

Executes an HTTP POST request.

# File lib/httpi.rb, line 91
def post(*args)
  request, adapter = request_and_adapter_from(args)

  with_adapter :post, request, adapter do |adapter|
    yield adapter.client if block_given?
    adapter.post request
  end
end
put(*args) { |client| ... } click to toggle source

Executes an HTTP PUT request.

# File lib/httpi.rb, line 111
def put(*args)
  request, adapter = request_and_adapter_from(args)

  with_adapter :put, request, adapter do |adapter|
    yield adapter.client if block_given?
    adapter.put request
  end
end
request(method, request, adapter = nil) click to toggle source

Executes an HTTP request for the given method.

# File lib/httpi.rb, line 131
def request(method, request, adapter = nil)
  raise ArgumentError, "Invalid request method: #{method}" unless REQUEST_METHODS.include? method
  send method, request, adapter
end
reset_config!() click to toggle source

Reset the default config.

# File lib/httpi.rb, line 172
def reset_config!
  @log = nil
  @logger = nil
  @log_level = nil
end

Private Class Methods

request_and_adapter_from(args) click to toggle source

Checks whether args contains of an HTTPI::Request or a URL and a request body plus an optional adapter and returns an Array with an HTTPI::Request and (if given) an adapter.

# File lib/httpi.rb, line 183
def request_and_adapter_from(args)
  return args if args[0].kind_of? Request
  [Request.new(:url => args[0], :body => args[1]), args[2]]
end
with_adapter(method, request, adapter) { |adapter_class| ... } click to toggle source

Expects a request method, a request and an adapter (defaults to Adapter.use) and yields an instance of the adapter to a given block.

# File lib/httpi.rb, line 190
def with_adapter(method, request, adapter)
  adapter, adapter_class = Adapter.load adapter

  log :debug, "HTTPI executes HTTP #{method.to_s.upcase} using the #{adapter} adapter"
  yield adapter_class.new(request)
end