module Mongo::Protocol::Registry
Provides a registry for looking up a message class based on op code.
@since 2.5.0
Constants
- MAPPINGS
A Mapping of all the op codes to their corresponding Ruby classes.
@since 2.5.0
Public Instance Methods
get(op_code, message = nil)
click to toggle source
Get the class for the given op code and raise an error if it's not found.
@example Get the type for the op code.
Mongo::Protocol::Registry.get(1)
@return [ Class ] The corresponding Ruby class for the message type.
@since 2.5.0
# File lib/mongo/protocol/registry.rb, line 38 def get(op_code, message = nil) if type = MAPPINGS[op_code] type else handle_unsupported_op_code!(op_code) end end
register(op_code, type)
click to toggle source
Register the Ruby type for the corresponding op code.
@example Register the op code.
Mongo::Protocol::Registry.register(1, Reply)
@param [ Fixnum ] op_code The op code. @param [ Class ] type The class the op code maps to.
@return [ Class ] The class.
@since 2.5.0
# File lib/mongo/protocol/registry.rb, line 57 def register(op_code, type) MAPPINGS.store(op_code, type) define_type_reader(type) end
Private Instance Methods
define_type_reader(type)
click to toggle source
# File lib/mongo/protocol/registry.rb, line 64 def define_type_reader(type) type.module_eval <<-MOD def op_code; OP_CODE; end MOD end
handle_unsupported_op_code!(op_code)
click to toggle source
# File lib/mongo/protocol/registry.rb, line 70 def handle_unsupported_op_code!(op_code) message = "Detected unknown message type with op code: #{op_code}." raise Error::UnsupportedMessageType.new(message) end