class Pincers::Http::Client

Constants

SUPPORTED_MODES

Attributes

document[R]
frozen[R]
session[R]

Public Class Methods

build_from_options(_options = {}) click to toggle source
# File lib/pincers/http/client.rb, line 13
def self.build_from_options(_options = {})
  session = Session.new
  session.proxy = _options[:proxy] if _options.key? :proxy
  session.proxy_auth = _options[:proxy_auth] if _options.key? :proxy_auth
  session.headers.merge! _options[:headers] if _options.key? :headers
  session.redirect_limit = _options[:redirect_limit] if _options.key? :redirect_limit

  if _options.key? :ssl_cert
    session.ssl_cert = _options[:ssl_cert]
    session.ssl_key = _options[:ssl_key]
  end

  client = self.new session, _options[:document]
  client.freeze if _options[:freeze]
  client
end
new(_session, _document={}) click to toggle source
# File lib/pincers/http/client.rb, line 33
def initialize(_session, _document={})
  @session = _session
  @document = _document
  @frozen = false
end

Public Instance Methods

absolute_uri_for(_url) click to toggle source
# File lib/pincers/http/client.rb, line 95
def absolute_uri_for(_url)
  uri = _url.is_a?(URI) ? _url : Utils.parse_uri(_url)
  if uri.relative?
    raise ArgumentError, 'Absolute url was required' if @document.nil?
    uri = URI.join(@document.uri, uri)
  end
  uri
end
cookies() click to toggle source
# File lib/pincers/http/client.rb, line 47
def cookies
  @session.cookie_jar.cookies
end
delete(_url, &_block) click to toggle source
# File lib/pincers/http/client.rb, line 80
def delete(_url, &_block)
  request = build_request :delete, _url
  _block.call request unless _block.nil?
  perform_in_session request
end
fork(_keep_session = false) click to toggle source
# File lib/pincers/http/client.rb, line 86
def fork(_keep_session = false)
  fork_session = _keep_session ? @session : @session.clone
  self.class.new fork_session, @document
end
freeze() click to toggle source
# File lib/pincers/http/client.rb, line 39
def freeze
  @frozen = true
end
get(_url, _query = nil, &_block) click to toggle source
# File lib/pincers/http/client.rb, line 59
def get(_url, _query = nil, &_block)
  request = build_request :get, _url
  request.set_query _query unless _query.nil?
  _block.call request unless _block.nil?
  perform_in_session request
end
join(_other_client) click to toggle source
# File lib/pincers/http/client.rb, line 91
def join(_other_client)
  @session.sync _other_client.session
end
post(_url, _data = nil, &_block) click to toggle source
# File lib/pincers/http/client.rb, line 66
def post(_url, _data = nil, &_block)
  request = build_request :post, _url
  load_data_in_request request, _data unless _data.nil?
  _block.call request unless _block.nil?
  perform_in_session request
end
put(_url, _data = nil, &_block) click to toggle source
# File lib/pincers/http/client.rb, line 73
def put(_url, _data = nil, &_block)
  request = build_request :put, _url
  load_data_in_request request, _data unless _data.nil?
  _block.call request unless _block.nil?
  perform_in_session request
end
unfreeze() click to toggle source
# File lib/pincers/http/client.rb, line 43
def unfreeze
  @frozen = false
end

Private Instance Methods

build_request(_type, _url) click to toggle source
# File lib/pincers/http/client.rb, line 108
def build_request(_type, _url)
  Request.new _type, absolute_uri_for(_url)
end
load_data_in_request(_request, _data) click to toggle source
# File lib/pincers/http/client.rb, line 112
def load_data_in_request(_request, _data)
  if _data.is_a? Hash
    mode = :form
    if _data.keys.length == 1 and SUPPORTED_MODES.include? _data.keys.first
      mode = _data.keys.first
      _data = _data[mode]
    end

    case mode
    when :form
      _request.set_form_data _data
    when :urlencoded
      _request.set_form_data _data, Utils::FORM_URLENCODED
    when :multipart
      _request.set_form_data _data, Utils::FORM_MULTIPART
    end
  else
    _request.data = _data.to_s
  end
end
perform_in_session(_request) click to toggle source
# File lib/pincers/http/client.rb, line 133
def perform_in_session(_request)
  begin
    new_document = @session.perform _request
  rescue
    @document = nil unless frozen
    raise
  end

  if frozen
    self.class.new @session, @document
  else
    @document = new_document
    self
  end
end