class APIHandler

Constants

BASE_URL_MISSING_MSG

Attributes

api_base_url[RW]
handler[R]
name[R]
version[R]

Public Class Methods

new(api_name, api_version, api_handler) click to toggle source
# File lib/qaa/api_handler.rb, line 16
def initialize(api_name, api_version, api_handler)
  @name     = api_name
  @version  = api_version
  @handler  = api_handler
end

Public Instance Methods

api_delete(params) click to toggle source
# File lib/qaa/api_handler.rb, line 42
def api_delete(params)
  uri        = queried_string_uri(api_handler_url, params)
  request    = Net::HTTP::Delete.new(uri)
  send_request(uri, request)
end
api_get(params) click to toggle source
# File lib/qaa/api_handler.rb, line 36
def api_get(params)
  uri        = queried_string_uri(api_handler_url, params)
  request    = Net::HTTP::Get.new(uri)
  send_request(uri, request)
end
api_post(params) click to toggle source
# File lib/qaa/api_handler.rb, line 22
def api_post(params)
  uri          = URI.parse(api_handler_url)
  request      = Net::HTTP::Post.new(uri)
  request.body = params.to_json
  send_request(uri, request)
end
api_put(params) click to toggle source
# File lib/qaa/api_handler.rb, line 29
def api_put(params)
  uri          = URI.parse(api_handler_url)
  request      = Net::HTTP::Put.new(uri)
  request.body = params.to_json
  send_request(uri, request)
end
base_url() click to toggle source
# File lib/qaa/api_handler.rb, line 11
def base_url
  raise BASE_URL_MISSING_MSG unless self.class.api_base_url
  self.class.api_base_url
end

Private Instance Methods

api_handler_url() click to toggle source
# File lib/qaa/api_handler.rb, line 80
def api_handler_url
  nodes_url = "#{base_url}/#{name}/nodes"
  nodes     = api_nodes(nodes_url)
  url       = api_url(nodes)
  "#{url}/#{version}/#{handler}"
end
api_nodes(nodes_url) click to toggle source
# File lib/qaa/api_handler.rb, line 67
def api_nodes(nodes_url)
  nodes_uri  = URI.parse(nodes_url)
  response   = send_request(nodes_uri, Net::HTTP::Get.new(nodes_uri))
  nodes_list = JSON.parse(response.body, symbolize_names: true)[:node][:nodes]
  nodes_list.reject { |node| node[:value].empty? }
end
api_url(nodes) click to toggle source
# File lib/qaa/api_handler.rb, line 74
def api_url(nodes)
  api_urls = nodes.map { |node| node[:value] }
  api_urls.each { |url| url.sub!('-pub', '') }
  api_urls.sample
end
queried_string_uri(handler_url, params) click to toggle source
# File lib/qaa/api_handler.rb, line 50
def queried_string_uri(handler_url, params)
  params_str = ''
  params.each {|k, v|
    if v.is_a? Array
      v.each {|value| params_str << (params_str.empty? ? "?#{k}=#{value}" : "&#{k}=#{value}")}
    else
      params_str << (params_str.empty? ? "?#{k}=#{v}" : "&#{k}=#{v}")
    end
  }
  URI.parse("#{handler_url}#{params_str}")
end
send_request(uri, request) click to toggle source
# File lib/qaa/api_handler.rb, line 62
def send_request(uri, request)
  conn = Net::HTTP.new(uri.host, uri.port)
  conn.request(request)
end