module OpenAPI::ClassMethods

Attributes

api_methods[RW]
application_key[RW]
application_secret[RW]
auth_token[RW]
cache[RW]
client_id[RW]
logger[RW]
max_retry[RW]
request_timeout[RW]
site[RW]
use_ssl[RW]

Public Instance Methods

build_path(path, params=nil) click to toggle source
# File lib/openapi/client.rb, line 46
def build_path(path, params=nil)
  uri = URI("/#{path}")
  if params != nil
    uri.query = URI.encode_www_form(params)
  end
  return uri
end
call_api(request) click to toggle source
# File lib/openapi/client.rb, line 30
def call_api(request)
  Timer.timeout(request_timeout) do
    start_time = Time.now
    response = http_client.request(request)
    log_request_and_response(request, response, Time.now - start_time)

    response = OpenAPI::Response.wrap(response)
    return response
  end
rescue Timeout::Error => e
  unless logger.nil?
    logger.error "Request timed out after #{request_timeout} seconds: [#{request.path} #{request.body}]"
  end
  raise e
end
create_method(name, callback) click to toggle source
# File lib/openapi/client.rb, line 24
def create_method(name, callback)
  metaclass.instance_eval do
    define_method(name, callback)
  end
end
do_request(http_method, path, params: {}, body: nil, headers: {}, options: {}) click to toggle source
# File lib/openapi/client.rb, line 58
def do_request(http_method, path, params: {}, body: nil, headers: {}, options: {})
  path = build_path(path, params)
  klass = Net::HTTP.const_get(http_method.to_s.capitalize)
  request = klass.new(path.to_s)
  request.add_field "Content-Type", headers["Content-Type"] || "application/json"

  if options[:skip_auth] != true && !auth_token.nil?
    auth_token.headers.each do |k,v|
      request.add_field k, v
    end
  end

  request.add_field "Accept", headers["Accept"] || "application/json"
  headers.each do |h,v|
    request.add_field h, v
  end
  request.body = body if body.present?
  response = call_api(request)
  return response
end
format_time(time) click to toggle source
# File lib/openapi/client.rb, line 105
def format_time(time)
  time = Time.parse(time) if time.is_a?(String)
  time.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
end
http_client() click to toggle source
# File lib/openapi/client.rb, line 88
def http_client
  uri = URI(site)
  client = Net::HTTP.new(uri.hostname, uri.port)
  if uri.scheme == "https"
    client.tap{|http| http.use_ssl = true}
  end
  return client
end
log_request_and_response(request, response, time) click to toggle source
# File lib/openapi/client.rb, line 97
def log_request_and_response(request, response, time)
  return if logger.nil?
  time = (time * 1000).to_i
  http_method = request.class.to_s.split('::')[-1]
  logger.info "#{self.class.name} (#{time}ms): [#{http_method} #{request.path} #{request.to_hash}, #{request.body}], [#{response.code}, #{response.body}]"
  logger.flush if logger.respond_to?(:flush)
end
verify_configuration_values(*symbols) click to toggle source
# File lib/openapi/client.rb, line 79
def verify_configuration_values(*symbols)
  absent_values = symbols.select{|symbol| instance_variable_get("@#{symbol}").nil? }
  raise("Must configure #{absent_values.join(", ")} before making this request.") unless absent_values.empty?
end