Class: ZSS::Client

Inherits:
Object
  • Object
show all
Includes:
LoggerFacade::Loggable
Defined in:
lib/zss/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sid, config = {}) ⇒ Client

Returns a new instance of Client.



11
12
13
14
15
16
# File 'lib/zss/client.rb', line 11

def initialize sid, config = {}
  @frontend   = config[:frontend] || Configuration.default.frontend
  @sid      = sid.to_s.upcase
  @identity = config[:identity] || "client"
  @timeout  = config[:timeout] || 1000
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object (private)



40
41
42
43
44
45
46
# File 'lib/zss/client.rb', line 40

def method_missing method, *args
  # since we cannot use / on method names we replace _ with /
  verb = method.to_s.gsub('_', '/')
  payload = args[0]
  options = args[1] || {}
  call verb, payload, options
end

Instance Attribute Details

#frontendObject (readonly)

Returns the value of attribute frontend.



9
10
11
# File 'lib/zss/client.rb', line 9

def frontend
  @frontend
end

#identityObject (readonly)

Returns the value of attribute identity.



9
10
11
# File 'lib/zss/client.rb', line 9

def identity
  @identity
end

#sidObject (readonly)

Returns the value of attribute sid.



9
10
11
# File 'lib/zss/client.rb', line 9

def sid
  @sid
end

#timeoutObject (readonly)

Returns the value of attribute timeout.



9
10
11
# File 'lib/zss/client.rb', line 9

def timeout
  @timeout
end

Instance Method Details

#call(verb, payload, headers: {}, timeout: nil) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/zss/client.rb', line 18

def call verb, payload, headers: {}, timeout: nil
  action = verb.to_s.upcase
  address = Message::Address.new(sid: sid, verb: action)

  request = Message.new(
    address: address,
    headers: headers,
    payload: payload)

  log.info("Request #{request.rid} sent to #{request.address} with #{timeout}s timeout")

  response = socket.call(request, timeout)

  log.info("Received response to #{request.rid} with status #{response.status}")

  fail ZSS::Error.new(response.status, payload: response.payload) if response.is_error?

  response.payload
end