module Bones::RPC::Protocol::AdapterHelper::ClassMethods
Provides a DSL for defining struct-like fields for building messages for the Mongo Wire.
@example
class Command extend Message::ClassMethods int32 :length end Command.fields # => [:length] command = Command.new command.length = 12 command.serialize_length("") # => "\f\x00\x00\x00"
Public Instance Methods
any(name)
click to toggle source
# File lib/bones/rpc/protocol/adapter_helper.rb, line 76 def any(name) attr_accessor name class_eval <<-RUBY, __FILE__, __LINE__ + 1 def process_#{name} #{name} end RUBY fields << name end
binary(name)
click to toggle source
Declare a binary field.
@example
class Query < Message binary :collection end
@param [String] name the name of this field
# File lib/bones/rpc/protocol/adapter_helper.rb, line 96 def binary(name) attr_accessor name class_eval <<-RUBY, __FILE__, __LINE__ + 1 def process_#{name} #{name} end RUBY fields << name end
deserialize(adapter, buffer="")
click to toggle source
# File lib/bones/rpc/protocol/adapter_helper.rb, line 64 def deserialize(adapter, buffer="") adapter = Adapter.get(adapter) message = adapter.deserialize(buffer) message.shift new(adapter, *message) end
fields()
click to toggle source
@return [Array] the fields defined for this message
# File lib/bones/rpc/protocol/adapter_helper.rb, line 72 def fields @fields ||= [] end
finalize()
click to toggle source
Declares the message class as complete, and defines its serialization method from the declared fields.
# File lib/bones/rpc/protocol/adapter_helper.rb, line 142 def finalize class_eval <<-EOS, __FILE__, __LINE__ + 1 def process list = [] #{fields.map { |f| "list << process_#{f}" }.join("\n")} list end EOS end
integer(name)
click to toggle source
# File lib/bones/rpc/protocol/adapter_helper.rb, line 108 def integer(name) attr_accessor name class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{name} @#{name} ||= 0 end def process_#{name} #{name} end RUBY fields << name end
list(name)
click to toggle source
# File lib/bones/rpc/protocol/adapter_helper.rb, line 124 def list(name) attr_accessor name class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{name} @#{name} ||= [] end def process_#{name} #{name} end RUBY fields << name end
Private Instance Methods
inherited(subclass)
click to toggle source
This ensures that subclasses of the primary wire message classes have identical fields.
Calls superclass method
# File lib/bones/rpc/protocol/adapter_helper.rb, line 156 def inherited(subclass) super subclass.fields.replace(fields) end