module BSON::Integer
Injects behaviour for encoding and decoding integer values to and from raw bytes as specified by the BSON
spec.
@see bsonspec.org/#/specification
@since 2.0.0
Constants
- BSON_ARRAY_INDEXES
A hash of index values for array optimization.
@since 2.0.0
- BSON_INDEX_SIZE
The
BSON
index size.@since 2.0.0
- MAX_32BIT
The maximum 32 bit integer value.
@since 2.0.0
- MAX_64BIT
The maximum 64 bit integer value.
@since 2.0.0
- MIN_32BIT
The minimum 32 bit integer value.
@since 2.0.0
- MIN_64BIT
The minimum 64 bit integer value.
@since 2.0.0
Public Instance Methods
Is this integer a valid BSON
32 bit value?
@example Is the integer a valid 32 bit value?
1024.bson_int32?
@return [ true, false ] If the integer is 32 bit.
@since 2.0.0
# File lib/bson/integer.rb, line 65 def bson_int32? (MIN_32BIT <= self) && (self <= MAX_32BIT) end
Is this integer a valid BSON
64 bit value?
@example Is the integer a valid 64 bit value?
1024.bson_int64?
@return [ true, false ] If the integer is 64 bit.
@since 2.0.0
# File lib/bson/integer.rb, line 77 def bson_int64? (MIN_64BIT <= self) && (self <= MAX_64BIT) end
Get the BSON
type for this integer. Will depend on whether the integer is 32 bit or 64 bit.
@example Get the BSON
type for the integer.
1024.bson_type
@return [ String
] The single byte BSON
type.
@see bsonspec.org/#/specification
@since 2.0.0
# File lib/bson/integer.rb, line 92 def bson_type bson_int32? ? Int32::BSON_TYPE : (bson_int64? ? Int64::BSON_TYPE : out_of_range!) end
Get the integer as encoded BSON
.
@example Get the integer as encoded BSON
.
1024.to_bson
@return [ BSON::ByteBuffer
] The buffer with the encoded object.
@see bsonspec.org/#/specification
@since 2.0.0
# File lib/bson/integer.rb, line 106 def to_bson(buffer = ByteBuffer.new, validating_keys = Config.validating_keys?) if bson_int32? buffer.put_int32(self) elsif bson_int64? buffer.put_int64(self) else out_of_range! end end
Convert the integer to a 32 bit (4 bytes) raw bytes string.
@example Convert the integer to it's 32 bit bytes.
1024.to_bson_int32
@param [ String
] encoded The string to encode to.
@return [ String
] The encoded string.
@since 2.0.0
# File lib/bson/integer.rb, line 126 def to_bson_int32(encoded) append_bson_int32(encoded) end
Convert the integer to a 64 bit (8 bytes) raw bytes string.
@example Convert the integer to it's 64 bit bytes.
1024.to_bson_int64
@param [ String
] encoded The string to encode to.
@return [ String
] The encoded string.
@since 2.0.0
# File lib/bson/integer.rb, line 140 def to_bson_int64(encoded) append_bson_int32(encoded) encoded << ((self >> 32) & 255) encoded << ((self >> 40) & 255) encoded << ((self >> 48) & 255) encoded << ((self >> 56) & 255) end
Convert the integer to a BSON
string key.
@example Convert the integer to a BSON
key string.
1.to_bson_key
@param [ true, false ] validating_keys If BSON
should validate the key.
@return [ String
] The string key.
@since 2.0.0
# File lib/bson/integer.rb, line 158 def to_bson_key(validating_keys = Config.validating_keys?) to_s.to_bson_key(validating_keys) end
Private Instance Methods
# File lib/bson/integer.rb, line 164 def append_bson_int32(encoded) encoded << (self & 255) encoded << ((self >> 8) & 255) encoded << ((self >> 16) & 255) encoded << ((self >> 24) & 255) end
# File lib/bson/integer.rb, line 171 def out_of_range! raise RangeError.new("#{self} is not a valid 8 byte integer value.") end