class Ribbon::Intercom::Package
Attributes
sdk[R]
Public Class Methods
_package_obj(subject, data=nil)
click to toggle source
# File lib/ribbon/intercom/package.rb, line 27 def _package_obj(subject, data=nil) new(encode_subject(subject), data) end
decode_subject(encoded_subject)
click to toggle source
# File lib/ribbon/intercom/package.rb, line 35 def decode_subject(encoded_subject) Marshal.load(encoded_subject) end
encode_subject(subject)
click to toggle source
# File lib/ribbon/intercom/package.rb, line 31 def encode_subject(subject) Marshal.dump(subject) end
init_packages(object, sdk)
click to toggle source
Walks the object and initializes all packages (i.e., sets them up to be accessed by the end-user on the client).
# File lib/ribbon/intercom/package.rb, line 42 def init_packages(object, sdk) Utils.walk(object) { |object| object.send(:_init, sdk) if object.is_a?(Package) object } end
new(subject_data=nil, data=nil)
click to toggle source
# File lib/ribbon/intercom/package.rb, line 52 def initialize(subject_data=nil, data=nil) @_subject_data = subject_data @_data = data end
package(subject)
click to toggle source
Package
up any non-basic objects that include Packageable::Mixin
.
# File lib/ribbon/intercom/package.rb, line 10 def package(subject) Utils.walk(subject) { |subject, context| if Utils.basic_type?(subject) subject elsif context == :hash_key # Hash keys must be basic types. raise Errors::UnsafeResponseError, subject.inspect elsif subject.is_a?(Packageable::Mixin) _package_obj(subject, package(subject.package_data)) elsif subject.is_a?(Class) && subject < Packageable::Mixin _package_obj(subject) else raise Errors::UnsafeResponseError, subject.inspect end } end
Public Instance Methods
begin()
click to toggle source
Begin a method chain (must be completed with ‘#end`).
When ‘#end` is called on the method chain, the chain will be resolved remotely. This allows the chain of methods to be executed in one round-trip.
# File lib/ribbon/intercom/package.rb, line 62 def begin Utils::MethodChain.begin { |methods| queue = Packet::MethodQueue.new methods.each { |meth, *args| queue.enqueue(meth, *args) } _send_method_queue(queue) } end
Private Instance Methods
_call(method_name, *args)
click to toggle source
Call a method on the subject remotely.
# File lib/ribbon/intercom/package.rb, line 84 def _call(method_name, *args) _send_method_queue(Packet::MethodQueue.new.enqueue(method_name, *args)) end
_init(sdk)
click to toggle source
Initializes the package on the client-side.
# File lib/ribbon/intercom/package.rb, line 90 def _init(sdk) @sdk = sdk self.class.init_packages(@_data, sdk) mock_safe! if sdk.mock_safe? end
_process_response(packet)
click to toggle source
# File lib/ribbon/intercom/package.rb, line 114 def _process_response(packet) @_subject_data = packet.subject @_data = self.class.init_packages(packet.package_data, sdk) packet.retval end
_send_method_queue(method_queue)
click to toggle source
# File lib/ribbon/intercom/package.rb, line 96 def _send_method_queue(method_queue) _process_response( sdk.send_packet( subject: @_subject_data, method_queue: method_queue ) ) end
marshal_dump()
click to toggle source
# File lib/ribbon/intercom/package.rb, line 105 def marshal_dump [@_subject_data, @_data] end
marshal_load(array)
click to toggle source
# File lib/ribbon/intercom/package.rb, line 109 def marshal_load(array) @_subject_data = array[0] @_data = array[1] end
method_missing(meth, *args, &block)
click to toggle source
Calls superclass method
# File lib/ribbon/intercom/package.rb, line 72 def method_missing(meth, *args, &block) if @_data && @_data.key?(meth) @_data[meth] elsif sdk _call(meth, *args) else super end end