Parent

Class/Module Index [+]

Quicksearch

Celluloid::Cell

Wrap the given subject with an Cell

Attributes

proxy[R]
subject[R]

Public Class Methods

new(subject, options, actor_options) click to toggle source
# File lib/celluloid/cell.rb, line 20
def initialize(subject, options, actor_options)
  @actor                      = Actor.new(self, actor_options)
  @subject                    = subject
  @receiver_block_executions  = options[:receiver_block_executions]
  @exclusive_methods          = options[:exclusive_methods]
  @finalizer                  = options[:finalizer]

  @subject.instance_variable_set(OWNER_IVAR, @actor)

  if exit_handler_name = options[:exit_handler_name]
    @actor.exit_handler = ExitHandler.new(self, @subject, exit_handler_name)
  end

  @actor.handle(Call) do |message|
    invoke(message)
  end
  @actor.handle(BlockCall) do |message|
    task(:invoke_block) { message.dispatch }
  end
  @actor.handle(BlockResponse, Response) do |message|
    message.dispatch
  end

  @actor.start
  @proxy = (options[:proxy_class] || CellProxy).new(@actor.proxy, @actor.mailbox, @subject.class.to_s)
end

Public Instance Methods

invoke(call) click to toggle source
# File lib/celluloid/cell.rb, line 48
def invoke(call)
  meth = call.method
  if meth == :__send__
    meth = call.arguments.first
  end
  if @receiver_block_executions && meth
    if @receiver_block_executions.include?(meth.to_sym)
      call.execute_block_on_receiver
    end
  end

  task(:call, meth, :dangerous_suspend => meth == :initialize) {
    call.dispatch(@subject)
  }
end
shutdown() click to toggle source

Run the user-defined finalizer, if one is set

# File lib/celluloid/cell.rb, line 77
def shutdown
  return unless @finalizer && @subject.respond_to?(@finalizer, true)

  task(:finalizer, @finalizer, :dangerous_suspend => true) do
    begin
      @subject.__send__(@finalizer)
    rescue => ex
      Logger.crash("#{@subject.class} finalizer crashed!", ex)
    end
  end
end
task(task_type, method_name = nil, meta = nil, &block) click to toggle source
# File lib/celluloid/cell.rb, line 64
def task(task_type, method_name = nil, meta = nil, &block)
  meta ||= {}
  meta.merge!(:method_name => method_name)
  @actor.task(task_type, meta) do
    if @exclusive_methods && method_name && @exclusive_methods.include?(method_name.to_sym)
      Celluloid.exclusive { yield }
    else
      yield
    end
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.