1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
module Concurrent
module Actor
module Utils
module AsAdHoc
def initialize(*args, &initializer)
@on_message = Type! initializer.call(*args), Proc
end
def on_message(message)
instance_exec message, &@on_message
end
end
# Allows quick creation of actors with behaviour defined by blocks.
# @example ping
# AdHoc.spawn :forward, an_actor do |where|
# # this block has to return proc defining #on_message behaviour
# -> message { where.tell message }
# end
class AdHoc < Context
include AsAdHoc
end
end
end
end
|