class Stargate::Client::Protocol::HTTP

Internal

HTTP protocol implementation based on Sinatra engine implemented on the Server side.

Public Instance Methods

call(klass, method, *args) click to toggle source
# File lib/stargate/client/protocol/http.rb, line 18
def call(klass, method, *args)
  log.debug("Executing remote method", class: klass.remote_name, method: method)

  request_options = {}
  request_options[:payload] = codec.encode(args)
  request_options[:timeout] = options[:timeout] if options[:timeout]
  request_headers = { 'Content-Type' => codec.content_type }

  request("#{klass.remote_name}.#{method}", 'POST', request_options, request_headers) do |response|
    data = codec.decode(response.body.to_s)
    raise RemoteExecutionError.from_hash(data) unless response.code == 200
    unpack_payload(data)
  end
end
fetch_definitions() click to toggle source
# File lib/stargate/client/protocol/http.rb, line 7
def fetch_definitions
  log.debug("Loading remote definitions", url: safe_uri.to_s)

  request('definitions', 'GET') do |response|
    raise DirectivesFetchError, "Unable to fetch directives from #{safe_uri.to_s}" unless response.code == 200
    data = codec.decode(response.body.to_s)
    definitions = data['definitions'] or return []
    unpack_definitions(definitions)
  end
end

Private Instance Methods

request(path, method, options = {}, headers = {}, &block) click to toggle source
# File lib/stargate/client/protocol/http.rb, line 35
def request(path, method, options = {}, headers = {}, &block)
  options = {
    url: File.join(uri.to_s, path),
    method: method,
    headers: { 'Accept' => codec.content_type, 'User-Agent' => 'Stargate' }.merge(headers)
  }.merge(options)

  RestClient::Request.execute(options, &block)
end