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