class Flexirest::Connection

Attributes

base_url[RW]
session[RW]

Public Class Methods

new(base_url) click to toggle source
# File lib/flexirest/connection.rb, line 12
def initialize(base_url)
  @base_url                      = base_url
  @session                       = new_session
end

Public Instance Methods

delete(path, data, options={}) click to toggle source
# File lib/flexirest/connection.rb, line 91
def delete(path, data, options={})
  set_defaults(options)
  make_safe_request(path) do
    @session.delete(path) do |req|
      set_per_request_timeout(req, options) if options[:timeout]
      req.headers = req.headers.merge(options[:headers])
      req.body = data
      sign_request(req, options[:api_auth])
    end
  end
end
get(path, options={}) click to toggle source
# File lib/flexirest/connection.rb, line 44
def get(path, options={})
  set_defaults(options)
  make_safe_request(path) do
    @session.get(path) do |req|
      set_per_request_timeout(req, options) if options[:timeout]
      req.headers = req.headers.merge(options[:headers])
      sign_request(req, options[:api_auth])
    end
  end
end
headers() click to toggle source
# File lib/flexirest/connection.rb, line 21
def headers
  @session.headers
end
make_safe_request(path, &block) click to toggle source
# File lib/flexirest/connection.rb, line 25
def make_safe_request(path, &block)
  block.call
rescue Faraday::TimeoutError
  raise Flexirest::TimeoutException.new("Timed out getting #{full_url(path)}")
rescue Faraday::ConnectionFailed => e1
  if e1.respond_to?(:cause) && e1.cause.is_a?(Net::OpenTimeout)
    raise Flexirest::TimeoutException.new("Timed out getting #{full_url(path)}")
  end
  begin
    reconnect
    block.call
  rescue Faraday::ConnectionFailed => e2
    if e2.respond_to?(:cause) && e2.cause.is_a?(Net::OpenTimeout)
      raise Flexirest::TimeoutException.new("Timed out getting #{full_url(path)}")
    end
    raise Flexirest::ConnectionFailedException.new("Unable to connect to #{full_url(path)}")
  end
end
patch(path, data, options={}) click to toggle source
# File lib/flexirest/connection.rb, line 67
def patch(path, data, options={})
  set_defaults(options)
  make_safe_request(path) do
    @session.patch(path) do |req|
      set_per_request_timeout(req, options) if options[:timeout]
      req.headers = req.headers.merge(options[:headers])
      req.body = data
      sign_request(req, options[:api_auth])
    end
  end
end
post(path, data, options={}) click to toggle source
# File lib/flexirest/connection.rb, line 79
def post(path, data, options={})
  set_defaults(options)
  make_safe_request(path) do
    @session.post(path) do |req|
      set_per_request_timeout(req, options) if options[:timeout]
      req.headers = req.headers.merge(options[:headers])
      req.body = data
      sign_request(req, options[:api_auth])
    end
  end
end
put(path, data, options={}) click to toggle source
# File lib/flexirest/connection.rb, line 55
def put(path, data, options={})
  set_defaults(options)
  make_safe_request(path) do
    @session.put(path) do |req|
      set_per_request_timeout(req, options) if options[:timeout]
      req.headers = req.headers.merge(options[:headers])
      req.body = data
      sign_request(req, options[:api_auth])
    end
  end
end
reconnect() click to toggle source
# File lib/flexirest/connection.rb, line 17
def reconnect
  @session         = new_session
end

Private Instance Methods

full_url(path) click to toggle source
# File lib/flexirest/connection.rb, line 114
def full_url(path)
  @session.build_url(path).to_s
end
new_session() click to toggle source
# File lib/flexirest/connection.rb, line 110
def new_session
  Faraday.new({url: @base_url}, &Flexirest::Base.faraday_config)
end
set_defaults(options) click to toggle source
# File lib/flexirest/connection.rb, line 118
def set_defaults(options)
  options[:headers]   ||= {}
  options[:api_auth]  ||= {}
  return options
end
set_per_request_timeout(req, options) click to toggle source
# File lib/flexirest/connection.rb, line 105
def set_per_request_timeout(req, options)
  req.options.timeout = options[:timeout].to_i
  req.options.open_timeout = options[:timeout].to_i
end
sign_request(request, api_auth) click to toggle source
# File lib/flexirest/connection.rb, line 124
def sign_request(request, api_auth)
  return if api_auth[:api_auth_access_id].nil? || api_auth[:api_auth_secret_key].nil?
  ApiAuth.sign!(
    request,
    api_auth[:api_auth_access_id],
    api_auth[:api_auth_secret_key],
    api_auth[:api_auth_options])
rescue ArgumentError
  if api_auth[:api_auth_options] && api_auth[:api_auth_options].keys.size > 0
    Flexirest::Logger.warn("Specifying Api-Auth options isn't supported with your version of ApiAuth")
  end
  ApiAuth.sign!(
    request,
    api_auth[:api_auth_access_id],
    api_auth[:api_auth_secret_key])
end