class Phabulous::Conduit::Client

Constants

Error

Attributes

cert[RW]
host[RW]
session[RW]
token[RW]
user[RW]

Public Class Methods

new(_host = Phabulous.configuration.host, _user = Phabulous.configuration.user, _cert = Phabulous.configuration.cert) click to toggle source
# File lib/phabulous/conduit/client.rb, line 13
def initialize(_host = Phabulous.configuration.host,
               _user = Phabulous.configuration.user, _cert = Phabulous.configuration.cert)
  self.host = _host
  self.user = _user
  self.cert = _cert
  self.session = nil
end

Public Instance Methods

connect() click to toggle source
# File lib/phabulous/conduit/client.rb, line 25
def connect
  self.token = Time.now.to_i

  if result = request('conduit.connect', connection_payload)
    self.session = Conduit::Session.new(result['connectionID'], result['sessionKey'])
  end

  self.session
end
ping() click to toggle source
# File lib/phabulous/conduit/client.rb, line 21
def ping
  request('conduit.ping')
end
request(method, data = {}) click to toggle source
# File lib/phabulous/conduit/client.rb, line 35
def request(method, data = {})
  post_body = post_body(data)
  response = self.class.post("#{self.host}/api/#{method}", body: post_body,
                             :headers => { 'Content-Type' => 'application/json' } )

  if response.parsed_response['result']
    response.parsed_response['result']
  else
    raise Error, "Conduit error: #{response.parsed_response['error_info']}"
  end
end

Protected Instance Methods

auth_signature() click to toggle source
# File lib/phabulous/conduit/client.rb, line 68
def auth_signature
  Digest::SHA1.hexdigest("#{self.token}#{self.cert}")
end
connection_payload() click to toggle source
# File lib/phabulous/conduit/client.rb, line 57
def connection_payload
  {
    'client' => "phabulous gem",
    'clientVersion' => Phabulous::VERSION,
    'user' => self.user,
    'host' => self.host,
    'authToken' => self.token,
    'authSignature' => auth_signature,
  }
end
post_body(data) click to toggle source
# File lib/phabulous/conduit/client.rb, line 49
def post_body(data)
  if session
    data.merge!(__conduit__: self.session.to_hash)
  end

  { params: data.to_json, output: 'json' }
end