module EasyPost

Constants

VERSION

Public Class Methods

api_base() click to toggle source
# File lib/easypost.rb, line 53
def self.api_base
  @api_base
end
api_base=(api_base) click to toggle source
# File lib/easypost.rb, line 49
def self.api_base=(api_base)
  @api_base = api_base
end
api_key() click to toggle source
# File lib/easypost.rb, line 45
def self.api_key
  @api_key
end
api_key=(api_key) click to toggle source
# File lib/easypost.rb, line 41
def self.api_key=(api_key)
  @api_key = api_key
end
http_config() click to toggle source
# File lib/easypost.rb, line 74
def self.http_config
  @http_config ||= reset_http_config
end
http_config=(http_config_params) click to toggle source
# File lib/easypost.rb, line 78
def self.http_config=(http_config_params)
  http_config.merge!(http_config_params)
end
make_client(uri) click to toggle source
# File lib/easypost.rb, line 82
def self.make_client(uri)
  client = if http_config[:proxy]
             proxy_uri = URI(http_config[:proxy])
             Net::HTTP.new(
               uri.host,
               uri.port,
               proxy_uri.host,
               proxy_uri.port,
               proxy_uri.user,
               proxy_uri.password
             )
           else
             Net::HTTP.new(uri.host, uri.port)
           end
  client.use_ssl = true

  http_config.each do |name, value|
    # Discrepancies between RestClient and Net::HTTP.
    if name == :verify_ssl
      name = :verify_mode
    elsif name == :timeout
      name = :read_timeout
    end

    # Handled in the creation of the client.
    if name == :proxy
      next
    end

    client.send("#{name}=", value)
  end

  client
end
make_request(method, path, api_key=nil, body=nil) click to toggle source
# File lib/easypost.rb, line 117
def self.make_request(method, path, api_key=nil, body=nil)
  client = make_client(URI(@api_base))

  request = Net::HTTP.const_get(method.capitalize).new(path)
  if body
    request.body = JSON.dump(EasyPost::Util.objects_to_ids(body))
  end

  request["Content-Type"] = "application/json"
  request["User-Agent"] = "EasyPost/v2 RubyClient/#{VERSION} Ruby/#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
  if api_key = api_key || @api_key
    request["Authorization"] = "Basic #{Base64.strict_encode64("#{api_key}:")}"
  end

  response = client.request(request)

  if (400..599).include? response.code.to_i
    error = JSON.parse(response.body)["error"]
    raise EasyPost::Error.new(error["message"], response.code.to_i, error["code"], error["errors"], response.body)
  end

  if response["Content-Type"].include? "application/json"
    JSON.parse(response.body)
  else
    response.body
  end
rescue JSON::ParserError
  raise RuntimeError.new(
    "Invalid response object from API, unable to decode.\n#{response.body}"
  )
end
reset_http_config() click to toggle source
# File lib/easypost.rb, line 57
def self.reset_http_config
  @http_config = {
    timeout: 60,
    open_timeout: 30,
    verify_ssl: OpenSSL::SSL::VERIFY_PEER,
  }

  ruby_version = Gem::Version.new(RUBY_VERSION)
  if ruby_version >= Gem::Version.new("2.5.0")
    @http_config[:min_version] = OpenSSL::SSL::TLS1_2_VERSION
  else
    @http_config[:ssl_version] = :TLSv1_2
  end

  @http_config
end