class Pocus::Session

Sends authenticated JSON requests to remote service using HTTPS.

Attributes

base_url[R]
credentials[R]
logger[RW]

Public Class Methods

new(host: 'api.invoc.us', app_id:, username:, password:, logger: Logger.new('/dev/null')) click to toggle source
# File lib/pocus/session.rb, line 23
def initialize(host: 'api.invoc.us', app_id:, username:, password:, logger: Logger.new('/dev/null'))
  @base_url = "https://#{host}/icp".freeze
  @credentials = {
    'API-AppId'    => app_id,
    'API-Username' => username,
    'API-Password' => password
  }
  @logger = logger
end

Public Instance Methods

pro?() click to toggle source

'Pro' is legacy as moniker dropped.

# File lib/pocus/session.rb, line 34
def pro?
  base_url =~ /invoc.us/
end
send_request(method, path, fields = {}) click to toggle source

Accepts hash of fields to send. Returns parsed response body, always a hash.

# File lib/pocus/session.rb, line 40
def send_request(method, path, fields = {})
  response = send_logged_request(URI(base_url + path), method, request_data(fields))
  fail UnexpectedHttpResponse, response unless response.is_a? Net::HTTPSuccess
  JSON.parse(response.body)
end

Protected Instance Methods

headers(type = 'application/json') click to toggle source
# File lib/pocus/session.rb, line 48
def headers(type = 'application/json')
  Hash['API-Version' => '2.2', 'Accept' => type, 'Content-Type' => type]
end
https(uri) click to toggle source
# File lib/pocus/session.rb, line 52
def https(uri)
  Net::HTTP.new(uri.host, uri.port).tap do |http|
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
end
log_request_response(uri, method, data) { |uri, method, data| ... } click to toggle source
# File lib/pocus/session.rb, line 69
def log_request_response(uri, method, data)
  logger.info  "[#{self.class.name}] request = #{method} #{uri}#{data ? '?' + data : ''}"
  response = nil
  tms = Benchmark.measure do
    response = yield uri, method, data
  end
  logger.info  "[#{self.class.name}] response (#{ms(tms)}ms): #{response.inspect} #{response.body}"
  response
end
ms(tms) click to toggle source
# File lib/pocus/session.rb, line 79
def ms(tms)
  (tms.real*1000).round(3)
end
request_data(fields) click to toggle source
# File lib/pocus/session.rb, line 59
def request_data(fields)
  fields.to_json unless fields.empty?
end
send_logged_request(uri, method, data) click to toggle source
# File lib/pocus/session.rb, line 63
def send_logged_request(uri, method, data)
  log_request_response(uri, method, data) do |u, m, d|
    https(uri).send_request(m, u.to_s, d, headers.merge(credentials))
  end
end