class Epi::Daemon::Responder

Attributes

receiver[R]

Public Class Methods

new(receiver, callback) click to toggle source
# File lib/epi/daemon/responder.rb, line 31
def initialize(receiver, callback)
  @receiver = receiver
  @callback = callback
end
run(receiver, name, data) { |run| ... } click to toggle source

Runs a responder by name.

@param receiver [Receiver] The receiver that is running the responder @param name [String] Name of the responder to invoke, e.g. ‘command’ @param data [Hash] Data included in the message, to be extracted onto the responder before it is run

# File lib/epi/daemon/responder.rb, line 12
def self.run(receiver, name, data, &callback)
  klass_name = name.camelize.to_sym
  klass = Responders.const_defined?(klass_name) && Responders.const_get(klass_name)
  raise Fatal, 'Unknown message type' unless Class === klass && klass < Responder
  responder = klass.new(receiver, callback)
  data.each { |key, value| responder.__send__ :"#{key}=", value }
  if responder.respond_to? :run_async
    responder.run_async
  else
    yield responder.run
  end
end

Public Instance Methods

done(result = nil) click to toggle source
# File lib/epi/daemon/responder.rb, line 44
def done(result = nil)
  @callback.call result
end
logger() click to toggle source
# File lib/epi/daemon/responder.rb, line 27
def logger
  Epi.logger
end
puts(text) click to toggle source
# File lib/epi/daemon/responder.rb, line 40
def puts(text)
  receiver.puts text
end
run() click to toggle source
# File lib/epi/daemon/responder.rb, line 36
def run
  raise NotImplementedError, "You need to define #run for class #{self.class.name}"
end