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