class PusherPlatform::BaseClient

Public Class Methods

new(options) click to toggle source
# File lib/pusher-platform/base_client.rb, line 6
def initialize(options)
  raise "Unspecified host" if options[:host].nil?
  port_string = options[:port] || ''
  host_string = "https://#{options[:host]}#{port_string}"
  @connection = Excon.new(host_string)

  @instance_id = options[:instance_id]
  @service_name = options[:service_name]
  @service_version = options[:service_version]
end

Public Instance Methods

request(options) click to toggle source
# File lib/pusher-platform/base_client.rb, line 17
def request(options)
  raise "Unspecified request method" if options[:method].nil?
  raise "Unspecified request path" if options[:path].nil?

  headers = if options[:headers]
    options[:headers].dup
  else
    {}
  end

  if options[:jwt]
    headers["Authorization"] = "Bearer #{options[:jwt]}"
  end

  path = "services/#{@service_name}/#{@service_version}/#{@instance_id}/#{options[:path]}"
  body = unless options[:body].nil?
    options[:body].to_json
  end

  response = @connection.request(
    method: options[:method],
    path: sanitise_path(path),
    headers: headers,
    body: body,
    query: options[:query]
  )

  if response.status >= 200 && response.status <= 299
    return response
  elsif response.status >= 300 && response.status <= 399
    raise "unsupported redirect response: #{response.status}"
  elsif response.status >= 400 && response.status <= 599
    error_description = begin
      JSON.parse(response.body)
    rescue
      response.body
    end
    raise ErrorResponse.new(response.status, response.headers, error_description)
  else
    raise "unsupported response code: #{response.status}"
  end
end

Private Instance Methods

sanitise_path(path) click to toggle source
# File lib/pusher-platform/base_client.rb, line 62
def sanitise_path(path)
  path.gsub(/\/+/, "/").gsub(/\/+$/, "")
end