Class: Epi::Daemon::Responder

Inherits:
Object
  • Object
show all
Includes:
Exceptions
Defined in:
lib/epi/daemon/responder.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(receiver, callback) ⇒ Responder

Returns a new instance of Responder.



31
32
33
34
# File 'lib/epi/daemon/responder.rb', line 31

def initialize(receiver, callback)
  @receiver = receiver
  @callback = callback
end

Instance Attribute Details

#receiverObject (readonly)

Returns the value of attribute receiver.



25
26
27
# File 'lib/epi/daemon/responder.rb', line 25

def receiver
  @receiver
end

Class Method Details

.run(receiver, name, data, &callback) ⇒ Object

Runs a responder by name.

Parameters:

  • receiver (Receiver)

    The receiver that is running the responder

  • name (String)

    Name of the responder to invoke, e.g. 'command'

  • data (Hash)

    Data included in the message, to be extracted onto the responder before it is run

Raises:



12
13
14
15
16
17
18
19
20
21
22
23
# 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

Instance Method Details

#done(result = nil) ⇒ Object



44
45
46
# File 'lib/epi/daemon/responder.rb', line 44

def done(result = nil)
  @callback.call result
end

#loggerObject



27
28
29
# File 'lib/epi/daemon/responder.rb', line 27

def logger
  Epi.logger
end

#puts(text) ⇒ Object



40
41
42
# File 'lib/epi/daemon/responder.rb', line 40

def puts(text)
  receiver.puts text
end

#runObject

Raises:

  • (NotImplementedError)


36
37
38
# File 'lib/epi/daemon/responder.rb', line 36

def run
  raise NotImplementedError, "You need to define #run for class #{self.class.name}"
end