Ravn::SpecHelpers::
PassingActor
class
A Concurrent::Actor::Context that passes every message it receives to its children, and can be told to spawn child actors with :spawn
messages.
def self::logger_wrapper
return lambda do |loglevel, progname, message = nil, &block|
Loggability[ self ].add( loglevel, message, progname, &block )
end
end
to_spawn_options( name_or_opts, *args )
def self::to_spawn_options( name_or_opts, *args )
options = super
options[ :logger ] ||= self.logger_wrapper
return options
end
def on_message( message )
if message.respond_to?( :to_a )
message, *args = message.to_a
else
args = []
end
case message
when :spawn
actor_class = args.shift
return actor_class.spawn!( *args )
else
self.children.each{|c| c.tell( message ) }
end
end