class Pione::DRbPatch::ClientRequest

ClientRequest represents client’s requests.

Attributes

argv[R]
available[R]
block[R]
msg_id[R]
obj[R]
req_id[R]

Public Class Methods

new(req_id, obj, msg_id, argv, block, available) click to toggle source
# File lib/pione/patch/drb-patch.rb, line 311
def initialize(req_id, obj, msg_id, argv, block, available)
  @req_id = req_id
  @obj = obj
  @msg_id = msg_id.intern
  @argv = argv
  @block = block
  @available = available
end
receive(client) click to toggle source
# File lib/pione/patch/drb-patch.rb, line 300
def self.receive(client)
  self.new(*client.recv_request)
end

Public Instance Methods

eval() click to toggle source
# File lib/pione/patch/drb-patch.rb, line 320
def eval
  if @available
    @block ? eval_with_block : eval_without_block
  else
    raise BadRequestError
  end
end

Private Instance Methods

block_yield(x) click to toggle source
# File lib/pione/patch/drb-patch.rb, line 347
def block_yield(x)
  if x.size == 1 && x[0].class == Array
    x[0] = DRbArray.new(x[0])
  end
  @block.call(*x)
end
eval_with_block() click to toggle source
# File lib/pione/patch/drb-patch.rb, line 354
def eval_with_block
  @obj.__send__(@msg_id, *@argv) do |*x|
    jump_error = nil
    begin
      block_value = block_yield(x)
    rescue LocalJumpError
      jump_error = $!
    end
    if jump_error
      case jump_error.reason
      when :break
        break(jump_error.exit_value)
      else
        raise jump_error
      end
    end
    block_value
  end
end
eval_without_block() click to toggle source
# File lib/pione/patch/drb-patch.rb, line 338
def eval_without_block
  if Proc === @obj && @msg_id == :__drb_yield
    ary = @argv.size == 1 ? @argv : [@argv]
    ary.map(&@obj)[0]
  else
    @obj.__send__(@msg_id, *@argv)
  end
end
valid?() click to toggle source

Checks whether it can invoke method.

# File lib/pione/patch/drb-patch.rb, line 331
def valid?
  return false unless @req_id
  return false unless @msg_id
  return false unless @argv
  return true
end