class Stargate::Server::Caller

Internal: We need a way to call registered stuff. This little service handles it. Caller is defined per registry version and operates only within its context.

Public Class Methods

new(registry_version) click to toggle source
# File lib/stargate/server/caller.rb, line 9
def initialize(registry_version)
  @marshaller       = Marshaller.new(registry_version)
  @registry_version = registry_version
end

Public Instance Methods

call(klass_name, method, *args) click to toggle source
# File lib/stargate/server/caller.rb, line 14
def call(klass_name, method, *args)
  method, metadata = method.to_sym, @registry_version[klass_name]
  metadata.class_methods.include?(method) or raise MethodNotExposedError, "Method not exposed: #{klass_name}.#{method}"
  result = metadata.klass.send(method, *args)
  log.debug("Method call performed", class: klass_name, method: method, result:result.inspect)
  @marshaller.marshal(result)
end