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