module Vaporizer::HttpClient

Public Instance Methods

define_httparty_request_wrapper(name, method, route, extra_headers = {}) click to toggle source
# File lib/vaporizer/http_client.rb, line 11
def define_httparty_request_wrapper(name, method, route, extra_headers = {})
  splited_route = split_route(route)
  route_params_defined = extract_params_from_route(splited_route)
  sub_paths = splited_route - route_params_defined

  route_params_defined = strip_symbolize_route_params(route_params_defined)

  define_singleton_method name do |params_given = {}, query_params = {}|
    headers = { 'app_id' => Vaporizer.config.app_id,
                'app_key' => Vaporizer.config.app_key
              }.merge(extra_headers)

    opts = { headers: headers }.merge(query_params)

    params_values = get_route_params_values(route_params_defined, params_given)
    built_path = build_path(sub_paths, params_values)

    response = Vaporizer::HttpClient.send(method, built_path, opts)
    handle_response(response)
  end
end
get_route_params_values(url_params, params_given) click to toggle source
# File lib/vaporizer/http_client.rb, line 33
def get_route_params_values(url_params, params_given)
  params_values = []
  url_params.each do |param|
    if !params_given.keys.include?(param)
      raise Vaporizer::MissingPathParameter, "Path parameter #{param} is missing"
    else
      params_values << params_given[param]
    end
  end
  params_values
end

Private Instance Methods

build_path(sub_paths, params_values) click to toggle source
# File lib/vaporizer/http_client.rb, line 60
def build_path(sub_paths, params_values)
  sub_paths.zip(params_values).flatten.compact.join
end
extract_params_from_route(splited_path) click to toggle source
# File lib/vaporizer/http_client.rb, line 72
def extract_params_from_route(splited_path)
  splited_path.select { |e| e[0] == ':' }
end
handle_response(response) click to toggle source
# File lib/vaporizer/http_client.rb, line 46
def handle_response(response)
  if response.not_found?
    raise Vaporizer::NotFound, "#{response.code}"
  elsif response.client_error?
    raise Vaporizer::ClientError, "#{response.code}"
  elsif response.server_error?
    raise Vaporizer::ServerError, "#{response.code}"
  elsif response.success?
    response.parsed_response
  else
    raise Vaporizer::Error, "#{response.code}"
  end
end
split_route(route) click to toggle source
# File lib/vaporizer/http_client.rb, line 68
def split_route(route)
  route.split(/(:[a-z_]+)/)
end
strip_symbolize_route_params(params_array) click to toggle source
# File lib/vaporizer/http_client.rb, line 64
def strip_symbolize_route_params(params_array)
  params_array.map { |param| param[1..-1].to_sym }
end