Class: Tair::Protocol::TairObject
- Inherits:
-
BinData::Record
- Object
- BinData::Record
- Tair::Protocol::TairObject
- Defined in:
- lib/tair/protocol/tair_object.rb
Constant Summary collapse
- TYPE_INT =
2
- TYPE_STRING =
4
- TYPE_BOOL =
6
- TYPE_LONG =
8
- TYPE_DATE =
10
- TYPE_BYTE =
12
- TYPE_FLOAT =
14
- TYPE_DOUBLE =
16
- TYPE_BYTEARRAY =
18
- TYPE_SERIALIZE =
20
- TYPE_INCDATA =
22
- TYPE_MIXEDKEY =
24
- MAX_INT32 =
0x7FFFFFFF
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.from(rb_value) ⇒ Object
59 60 61 62 63 |
# File 'lib/tair/protocol/tair_object.rb', line 59 def self.from(rb_value) new.tap do |o| o.value = rb_value end end |
Instance Method Details
#value ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/tair/protocol/tair_object.rb', line 24 def value case value_type when TYPE_LONG then raw_value.unpack('Q').first when TYPE_STRING then raw_value.to_s when TYPE_BOOL then raw_value == "\x01" when TYPE_DOUBLE then raw_value.unpack('D').first when TYPE_SERIALIZE then Marshal.load(raw_value) end end |
#value=(v) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/tair/protocol/tair_object.rb', line 36 def value=(v) case v when String [TYPE_STRING, v] when Fixnum # 数字暂时不能超过64位 [TYPE_LONG, [v].pack('Q')] when TrueClass, FalseClass [TYPE_BOOL, v ? "\x01" : "\x00"] when Float # 浮点数字统一用 double 型 [TYPE_DOUBLE, [v].pack('D')] else # serialize 类型仅限于 ruby 语言使用 # 和其他语言共用时不方便,请谨慎选择 [TYPE_SERIALIZE, Marshal.dump(v)] end.tap do |t, nv| self.value_type = t self.raw_value = nv end end |