Class: Phabricator::ConduitClient

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/phabricator/conduit_client.rb

Instance Method Summary collapse

Constructor Details

#initializeConduitClient

Returns a new instance of ConduitClient.



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/phabricator/conduit_client.rb', line 9

def initialize
  # Find the .arcrc file for Phabricator credentials.
  filename = File.expand_path('~/.arcrc')

  if File.readable?(filename)
    @settings = JSON.parse(File.read(filename))['hosts'].first
  else
    raise '~/.arcrc does not exist or is not readable.'
  end

  connect
end

Instance Method Details

#connectObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/phabricator/conduit_client.rb', line 22

def connect
  token = Time.now.to_i

  data = {
    client: 'phabricator-ruby',
    clientVersion: Phabricator::VERSION,
    user: credentials['user'],
    host: host,
    authToken: token,
    authSignature: Digest::SHA1.hexdigest("#{token}#{credentials['cert']}")
  }

  response = JSON.parse(post('conduit.connect', data, __conduit__: true))

  # TODO: Something something error handling

  @conduit = {
    connectionID: response['result']['connectionID'],
    sessionKey: response['result']['sessionKey']
  }
end

#request(http_method, method, data = {}) ⇒ Object



44
45
46
47
# File 'lib/phabricator/conduit_client.rb', line 44

def request(http_method, method, data={})
  # TODO: validation on http_method
  self.send(http_method, method, data.merge(__conduit__: @conduit))
end