Class: Culerity::RemoteObjectProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/culerity/remote_object_proxy.rb

Direct Known Subclasses

RemoteBrowserProxy

Instance Method Summary collapse

Constructor Details

#initialize(remote_object_id, io) ⇒ RemoteObjectProxy

Returns a new instance of RemoteObjectProxy.



11
12
13
14
# File 'lib/culerity/remote_object_proxy.rb', line 11

def initialize(remote_object_id, io)
  @remote_object_id = remote_object_id
  @io = io
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



32
33
34
# File 'lib/culerity/remote_object_proxy.rb', line 32

def method_missing(name, *args, &block)
  send_remote(name, *args, &block)
end

Instance Method Details

#exitObject



51
52
53
# File 'lib/culerity/remote_object_proxy.rb', line 51

def exit
  @io << '["_exit_"]'
end

#idObject

Commonly used to get the HTML id attribute Use ‘object_id` to get the local objects’ id.



20
21
22
# File 'lib/culerity/remote_object_proxy.rb', line 20

def id
  send_remote(:id)
end

#inspectObject



24
25
26
# File 'lib/culerity/remote_object_proxy.rb', line 24

def inspect
  send_remote(:inspect)
end

#respond_to?(name) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/culerity/remote_object_proxy.rb', line 28

def respond_to?(name)
  send_remote :respond_to?, name
end

#send_remote(name, *args, &blk) ⇒ Object

Calls the passed method on the remote object with any arguments specified. Behaves the same as Object#send.

If you pass it a block then it will append the block as a “lambda { … }”. If your block returns a lambda string (“lambda { … }”) then it will be passed straight through, otherwise it will be wrapped in a lambda string before sending.



44
45
46
47
48
49
# File 'lib/culerity/remote_object_proxy.rb', line 44

def send_remote(name, *args, &blk)
  input = [remote_object_id, %Q{"#{name}"}, *args.map{|a| arg_to_string(a)}]
  serialized_block = ", #{block_to_string(&blk)}" if block_given?
  @io << "[[#{input.join(", ")}]#{serialized_block}]\n"
  process_result @io.gets.to_s.strip
end