class NSOne::Transport::NetHttp

Public Class Methods

new(base_url, api_version, api_key) click to toggle source
# File lib/nsone/transport/net_http.rb, line 15
def initialize(base_url, api_version, api_key)
  @base_url = base_url
  @api_version = api_version
  @api_key = api_key
end

Public Instance Methods

request(method, path, body = nil) click to toggle source
# File lib/nsone/transport/net_http.rb, line 21
def request(method, path, body = nil)
  if method == "GET" && body
    query = URI.encode_www_form(JSON.parse(body).to_a)
    uri = URI.join(@base_url, "#{@api_version}#{path}?#{query}")
  else
    uri = URI.join(@base_url, "#{@api_version}#{path}")
  end
  Net::HTTP.start(uri.host, uri.port, opts(uri)) do |http|
    response = http.send_request(method, uri, body, headers(body))
    process_response(response, get_rates(response))
  end
end

Private Instance Methods

default_headers() click to toggle source
# File lib/nsone/transport/net_http.rb, line 74
def default_headers
  { "X-NSONE-Key" => @api_key }
end
get_rates(response) click to toggle source
# File lib/nsone/transport/net_http.rb, line 50
def get_rates(response)
  Hash.new.tap do | h |
    h[:by] = response["x-ratelimit-by"] if response["x-ratelimit-by"]
    h[:remaining] = response["x-ratelimit-remaining"] if response["x-ratelimit-remaining"]
    h[:limit] = response["x-ratelimit-limit"].to_i if response["x-ratelimit-limit"]
    h[:period] = response["x-ratelimit-period"].to_i if response["x-ratelimit-period"]
    h[:rate] = (h[:limit] / h[:period]).to_f if h[:limit] && h[:period]
  end
end
headers(body) click to toggle source
# File lib/nsone/transport/net_http.rb, line 69
def headers(body)
  extra_headers = body.nil? ? {} : { "Content-Type" => "application/json" }
  default_headers.merge(extra_headers)
end
opts(uri) click to toggle source
# File lib/nsone/transport/net_http.rb, line 60
def opts(uri)
  if uri.scheme == "https"
    {
      use_ssl: true,
      ssl_mode: OpenSSL::SSL::VERIFY_PEER
    }
  end
end
process_response(response, rates = {}) click to toggle source
# File lib/nsone/transport/net_http.rb, line 36
def process_response(response, rates = {})
  body = JSON.parse(response.body)
  case response
  when Net::HTTPTooManyRequests
    raise NSOne::Transport::RateLimitExceeded, "#{response}, #{body}"
  when Net::HTTPOK
    NSOne::Response::Success.new(body, response.code.to_i, rates)
  else
    NSOne::Response::Error.new(body, response.code.to_i, rates)
  end
rescue JSON::ParserError => e
  raise NSOne::Transport::ResponseParseError, "#{response.code_type} #{response.code} error: #{e}"
end