class Celluloid::Proxy::Block

Attributes

block[R]
call[R]
execution[W]

Public Class Methods

new(mailbox, call, block) click to toggle source
# File lib/celluloid/proxy/block.rb, line 5
def initialize(mailbox, call, block)
  @mailbox = mailbox
  @call = call
  @block = block
  @execution = :sender
end

Public Instance Methods

to_proc() click to toggle source
# File lib/celluloid/proxy/block.rb, line 12
def to_proc
  if @execution == :sender
    lambda do |*values|
      if task = Thread.current[:celluloid_task]
        @mailbox << ::Celluloid::Call::Block.new(self, ::Celluloid::Actor.current.mailbox, values)
        # TODO: if respond fails, the Task will never be resumed
        task.suspend(:invokeblock)
      else
        # FIXME: better exception
        raise "No task to suspend"
      end
    end
  else
    @block
  end
end