class NewEden::Connection

Constants

CACHE_TIMEOUT
REQUEST_TIMEOUT

Attributes

game_server[R]
hydra[R]
key_id[R]
server[R]
test_server[R]
vcode[R]

Public Class Methods

new(key_id, vcode, use_test = false) click to toggle source
# File lib/neweden/connection.rb, line 18
def initialize(key_id, vcode, use_test = false)
  @key_id         = key_id
  @vcode          = vcode
  @game_server    = "api.eveonline.com".freeze
  @test_server    = "apitest.eveonline.com".freeze
  @server = use_test ? @test_server : @game_server
  @hydra = Typhoeus::Hydra.new
end

Public Instance Methods

handle_response(response) click to toggle source
# File lib/neweden/connection.rb, line 50
def handle_response(response)
  if response.timed_out?
    raise TimeoutError, "Response timed out."
  elsif response.code == 0
    raise NoResponseError, "No response received."
  elsif response.code == 404
    raise NotFoundError, "API endpoint not found."
  elsif !response.success?
    raise UnsuccessfulResponseError, "Received HTTP response: #{response.code.to_s}"
  end

  xml = Nokogiri::XML.parse(response.body)

  unless (xml/:eveapi/:error).empty?
    error_code = (xml/:error).attribute('code').value.to_i
    case error_code
    when 203
      raise AuthenticationError, "Invalid key id or vcode."
    when 124, 125
      raise NotInvolvedInFactionalWarfare, "Not involved in factional warfare."
    else
      raise ApiError, (xml/:eveapi/:error).children.map { |e| e.to_s.gsub(/\.$/, '') }.join(", ")
    end
  end

  xml
end
raw_request(endpoint, method = :post, params = {}) click to toggle source
# File lib/neweden/connection.rb, line 36
def raw_request(endpoint, method = :post, params = {})
  url = "https://#{@server}/#{sanitize_endpoint(endpoint)}"
  case method
  when :get
    Typhoeus::Request.get(url, request_params(params))
  when :put
    Typhoeus::Request.put(url, request_params(params))
  when :delete
    Typhoeus::Request.delete(url, request_params(params))
  else
    Typhoeus::Request.post(url, request_params(params))
  end
end
request(endpoint, method = :post, params = {}) click to toggle source
# File lib/neweden/connection.rb, line 27
def request(endpoint, method = :post, params = {})
  xml = handle_response(raw_request(endpoint, method, params))
  if xml
    Hash.from_xml((xml/:eveapi/:result).to_s)[:result] # rescue raise XMLParsingError, "No result in set"
  else
    raise XMLParsingError, "No XML parsed successfully"
  end
end
request_params(params = {}) click to toggle source
# File lib/neweden/connection.rb, line 90
def request_params(params = {})
  if @key_id.nil? || @vcode.nil?
    {
      :headers => { :Accept => "application/xml" },
      :timeout => REQUEST_TIMEOUT
    }
  else
    {
      :headers => { :Accept => "application/xml" },
      :timeout => REQUEST_TIMEOUT,
      :params => params.merge({ :keyID => @key_id, :vCode => @vcode })
    }
  end
end
request_url() click to toggle source
# File lib/neweden/connection.rb, line 86
def request_url
  "https://#{@server}/#{sanitize_endpoint(endpoint)}"
end
use_game_server() click to toggle source
# File lib/neweden/connection.rb, line 78
def use_game_server
  @server = @game_server
end
use_test_server() click to toggle source
# File lib/neweden/connection.rb, line 82
def use_test_server
  @server = @test_server
end

Private Instance Methods

sanitize_endpoint(endpoint) click to toggle source
# File lib/neweden/connection.rb, line 107
def sanitize_endpoint(endpoint)
  endpoint.strip.gsub(/^\/+/, '')
end