msgpack 0.6.2-java → 0.7.0dev1-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/msgpack.rb +4 -0
- data/lib/msgpack/factory.rb +60 -0
- data/lib/msgpack/msgpack.jar +0 -0
- data/lib/msgpack/packer.rb +28 -0
- data/lib/msgpack/unpacker.rb +28 -0
- data/lib/msgpack/version.rb +1 -1
- data/spec/cruby/buffer_io_spec.rb +2 -3
- data/spec/cruby/buffer_spec.rb +1 -3
- data/spec/cruby/unpacker_spec.rb +14 -2
- data/spec/ext_value_spec.rb +99 -0
- data/spec/exttypes.rb +51 -0
- data/spec/factory_spec.rb +236 -0
- data/spec/jruby/msgpack/unpacker_spec.rb +25 -0
- data/spec/{jruby/msgpack_spec.rb → msgpack_spec.rb} +1 -1
- data/spec/pack_spec.rb +0 -6
- data/spec/packer_spec.rb +95 -0
- data/spec/spec_helper.rb +12 -1
- data/spec/unpack_spec.rb +1 -4
- data/spec/unpacker_spec.rb +133 -0
- metadata +41 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1074cd38a1217bb758be1ce482c293956f051c29
|
4
|
+
data.tar.gz: 53cac06789fb384cf3407e61e7cbb5d4ef2f263b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d311e9a8d3729e29398660f0416d83a93e1d6c751851a0b240e11ec6ee18bd904d9b3ab2a249028a9591b8cb13281493eaf1fe7c97148ab56999be9bbea19f5
|
7
|
+
data.tar.gz: 274602def6f21adeb764c70ac6b506ef72f245983c9c63ab12d977bbd981da9e94976858d583750cd55c2d4c93c4a5333f2103ed04fa8feaa68079261ea8a8b4
|
data/lib/msgpack.rb
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
module MessagePack
|
2
|
+
class Factory
|
3
|
+
# see ext for other methods
|
4
|
+
|
5
|
+
# [ {type: id, class: Class(or nil), packer: arg, unpacker: arg}, ... ]
|
6
|
+
def registered_types(selector=:both)
|
7
|
+
packer, unpacker = registered_types_internal
|
8
|
+
# packer: Class -> [tid, proc, arg]
|
9
|
+
# unpacker: tid -> [klass, proc, arg]
|
10
|
+
|
11
|
+
list = []
|
12
|
+
|
13
|
+
case selector
|
14
|
+
when :both
|
15
|
+
packer.each_pair do |klass, ary|
|
16
|
+
type = ary[0]
|
17
|
+
packer_arg = ary[2]
|
18
|
+
unpacker_arg = nil
|
19
|
+
if unpacker.has_key?(type) && unpacker[type][0] == klass
|
20
|
+
unpacker_arg = unpacker.delete(type)[2]
|
21
|
+
end
|
22
|
+
list << {type: type, class: klass, packer: packer_arg, unpacker: unpacker_arg}
|
23
|
+
end
|
24
|
+
|
25
|
+
# unpacker definition only
|
26
|
+
unpacker.each_pair do |type, ary|
|
27
|
+
list << {type: type, class: ary[0], packer: nil, unpacker: ary[2]}
|
28
|
+
end
|
29
|
+
|
30
|
+
when :packer
|
31
|
+
packer.each_pair do |klass, ary|
|
32
|
+
list << {type: ary[0], class: klass, packer: ary[2]}
|
33
|
+
end
|
34
|
+
|
35
|
+
when :unpacker
|
36
|
+
unpacker.each_pair do |type, ary|
|
37
|
+
list << {type: type, class: ary[0], unpacker: ary[2]}
|
38
|
+
end
|
39
|
+
|
40
|
+
else
|
41
|
+
raise ArgumentError, "invalid selector #{selector}"
|
42
|
+
end
|
43
|
+
|
44
|
+
list.sort{|a, b| a[:type] <=> b[:type] }
|
45
|
+
end
|
46
|
+
|
47
|
+
def type_registered?(klass_or_type, selector=:both)
|
48
|
+
case klass_or_type
|
49
|
+
when Class
|
50
|
+
klass = klass_or_type
|
51
|
+
registered_types(selector).any?{|entry| klass <= entry[:class] }
|
52
|
+
when Integer
|
53
|
+
type = klass_or_type
|
54
|
+
registered_types(selector).any?{|entry| type == entry[:type] }
|
55
|
+
else
|
56
|
+
raise ArgumentError, "class or type id"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/msgpack/msgpack.jar
CHANGED
Binary file
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module MessagePack
|
2
|
+
class Packer
|
3
|
+
# see ext for other methods
|
4
|
+
|
5
|
+
def registered_types
|
6
|
+
list = []
|
7
|
+
|
8
|
+
registered_types_internal.each_pair do |klass, ary|
|
9
|
+
list << {type: ary[0], class: klass, packer: ary[2]}
|
10
|
+
end
|
11
|
+
|
12
|
+
list.sort{|a, b| a[:type] <=> b[:type] }
|
13
|
+
end
|
14
|
+
|
15
|
+
def type_registered?(klass_or_type)
|
16
|
+
case klass_or_type
|
17
|
+
when Class
|
18
|
+
klass = klass_or_type
|
19
|
+
registered_types.any?{|entry| klass <= entry[:class] }
|
20
|
+
when Integer
|
21
|
+
type = klass_or_type
|
22
|
+
registered_types.any?{|entry| type == entry[:type] }
|
23
|
+
else
|
24
|
+
raise ArgumentError, "class or type id"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module MessagePack
|
2
|
+
class Unpacker
|
3
|
+
# see ext for other methods
|
4
|
+
|
5
|
+
def registered_types
|
6
|
+
list = []
|
7
|
+
|
8
|
+
registered_types_internal.each_pair do |type, ary|
|
9
|
+
list << {type: type, class: ary[0], unpacker: ary[2]}
|
10
|
+
end
|
11
|
+
|
12
|
+
list.sort{|a, b| a[:type] <=> b[:type] }
|
13
|
+
end
|
14
|
+
|
15
|
+
def type_registered?(klass_or_type)
|
16
|
+
case klass_or_type
|
17
|
+
when Class
|
18
|
+
klass = klass_or_type
|
19
|
+
registered_types.any?{|entry| klass == entry[:class] }
|
20
|
+
when Integer
|
21
|
+
type = klass_or_type
|
22
|
+
registered_types.any?{|entry| type == entry[:type] }
|
23
|
+
else
|
24
|
+
raise ArgumentError, "class or type id"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/msgpack/version.rb
CHANGED
@@ -32,7 +32,7 @@ describe Buffer do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'close closes internal io' do
|
35
|
-
io.
|
35
|
+
expect(io).to receive(:close)
|
36
36
|
buffer.close
|
37
37
|
end
|
38
38
|
|
@@ -137,7 +137,7 @@ describe Buffer do
|
|
137
137
|
|
138
138
|
50.times {
|
139
139
|
fragments = []
|
140
|
-
|
140
|
+
r.bytes(0)
|
141
141
|
|
142
142
|
r.rand(4).times do
|
143
143
|
n = r.rand(1024*1400)
|
@@ -253,4 +253,3 @@ describe Buffer do
|
|
253
253
|
}
|
254
254
|
end
|
255
255
|
end
|
256
|
-
|
data/spec/cruby/buffer_spec.rb
CHANGED
@@ -379,7 +379,6 @@ describe Buffer do
|
|
379
379
|
end
|
380
380
|
|
381
381
|
it 'big write -> short write' do
|
382
|
-
biglen = 1024*1024 + 2
|
383
382
|
big1 = "a" * (1024*1024 + 2)
|
384
383
|
|
385
384
|
case_keys.each {|k|
|
@@ -557,7 +556,7 @@ describe Buffer do
|
|
557
556
|
n = r.rand(1024*1400)
|
558
557
|
begin
|
559
558
|
b.skip_all(n)
|
560
|
-
|
559
|
+
s.slice!(0, n)
|
561
560
|
b.size.should == s.size
|
562
561
|
ensure EOFError
|
563
562
|
b.size.should == s.size
|
@@ -569,4 +568,3 @@ describe Buffer do
|
|
569
568
|
}
|
570
569
|
end
|
571
570
|
end
|
572
|
-
|
data/spec/cruby/unpacker_spec.rb
CHANGED
@@ -21,7 +21,10 @@ describe Unpacker do
|
|
21
21
|
unpacker.feed("\x81")
|
22
22
|
lambda {
|
23
23
|
unpacker.read_array_header
|
24
|
-
}.should raise_error(MessagePack::TypeError)
|
24
|
+
}.should raise_error(MessagePack::TypeError) # TypeError is included in UnexpectedTypeError
|
25
|
+
lambda {
|
26
|
+
unpacker.read_array_header
|
27
|
+
}.should raise_error(MessagePack::UnexpectedTypeError)
|
25
28
|
end
|
26
29
|
|
27
30
|
it 'read_map_header converts an map to key-value sequence' do
|
@@ -55,7 +58,10 @@ describe Unpacker do
|
|
55
58
|
unpacker.feed("\x91")
|
56
59
|
lambda {
|
57
60
|
unpacker.read_map_header
|
58
|
-
}.should raise_error(MessagePack::TypeError)
|
61
|
+
}.should raise_error(MessagePack::TypeError) # TypeError is included in UnexpectedTypeError
|
62
|
+
lambda {
|
63
|
+
unpacker.read_map_header
|
64
|
+
}.should raise_error(MessagePack::UnexpectedTypeError)
|
59
65
|
end
|
60
66
|
|
61
67
|
it 'skip_nil succeeds' do
|
@@ -134,6 +140,12 @@ describe Unpacker do
|
|
134
140
|
objects.should == [sample_object] * 4
|
135
141
|
end
|
136
142
|
|
143
|
+
it 'feed_each enumerator' do
|
144
|
+
raw = sample_object.to_msgpack.to_s * 4
|
145
|
+
|
146
|
+
unpacker.feed_each(raw).to_a.should == [sample_object] * 4
|
147
|
+
end
|
148
|
+
|
137
149
|
it 'reset clears internal buffer' do
|
138
150
|
# 1-element array
|
139
151
|
unpacker.feed("\x91")
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe MessagePack::ExtensionValue do
|
5
|
+
subject do
|
6
|
+
described_class.new(1, "data")
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#type/#type=' do
|
10
|
+
it 'returns value set by #initialize' do
|
11
|
+
subject.type.should == 1
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'assigns a value' do
|
15
|
+
subject.type = 2
|
16
|
+
subject.type.should == 2
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#payload/#payload=' do
|
21
|
+
it 'returns value set by #initialize' do
|
22
|
+
subject.payload.should == "data"
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'assigns a value' do
|
26
|
+
subject.payload = "a"
|
27
|
+
subject.payload.should == "a"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#==/#eql?/#hash' do
|
32
|
+
it 'returns equivalent if the content is same' do
|
33
|
+
ext1 = MessagePack::ExtensionValue.new(1, "data")
|
34
|
+
ext2 = MessagePack::ExtensionValue.new(1, "data")
|
35
|
+
(ext1 == ext2).should be true
|
36
|
+
ext1.eql?(ext2).should be true
|
37
|
+
(ext1.hash == ext2.hash).should be true
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'returns not equivalent if type is not same' do
|
41
|
+
ext1 = MessagePack::ExtensionValue.new(1, "data")
|
42
|
+
ext2 = MessagePack::ExtensionValue.new(2, "data")
|
43
|
+
(ext1 == ext2).should be false
|
44
|
+
ext1.eql?(ext2).should be false
|
45
|
+
(ext1.hash == ext2.hash).should be false
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'returns not equivalent if payload is not same' do
|
49
|
+
ext1 = MessagePack::ExtensionValue.new(1, "data")
|
50
|
+
ext2 = MessagePack::ExtensionValue.new(1, "value")
|
51
|
+
(ext1 == ext2).should be false
|
52
|
+
ext1.eql?(ext2).should be false
|
53
|
+
(ext1.hash == ext2.hash).should be false
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#to_msgpack' do
|
58
|
+
it 'serializes very short payload' do
|
59
|
+
ext = MessagePack::ExtensionValue.new(1, "a"*2).to_msgpack
|
60
|
+
ext.should == "\xd5\x01" + "a"*2
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'serializes short payload' do
|
64
|
+
ext = MessagePack::ExtensionValue.new(1, "a"*18).to_msgpack
|
65
|
+
ext.should == "\xc7\x12\x01" + "a"*18
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'serializes long payload' do
|
69
|
+
ext = MessagePack::ExtensionValue.new(1, "a"*65540).to_msgpack
|
70
|
+
ext.should == "\xc9\x00\x01\x00\x04\x01" + "a"*65540
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'with a packer serializes to a packer' do
|
74
|
+
ext = MessagePack::ExtensionValue.new(1, "aa")
|
75
|
+
packer = MessagePack::Packer.new
|
76
|
+
ext.to_msgpack(packer)
|
77
|
+
packer.buffer.to_s.should == "\xd5\x01aa"
|
78
|
+
end
|
79
|
+
|
80
|
+
[-129, -65540, -(2**40), 128, 65540, 2**40].each do |type|
|
81
|
+
context "with invalid type (#{type})" do
|
82
|
+
it 'raises RangeError' do
|
83
|
+
lambda { MessagePack::ExtensionValue.new(type, "a").to_msgpack }.should raise_error(RangeError)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#dup' do
|
90
|
+
it 'duplicates' do
|
91
|
+
ext1 = MessagePack::ExtensionValue.new(1, "data")
|
92
|
+
ext2 = ext1.dup
|
93
|
+
ext2.type = 2
|
94
|
+
ext2.payload = "data2"
|
95
|
+
ext1.type.should == 1
|
96
|
+
ext1.payload.should == "data"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
data/spec/exttypes.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
class DummyTimeStamp1
|
2
|
+
TYPE = 15
|
3
|
+
|
4
|
+
attr_reader :utime, :usec, :time
|
5
|
+
|
6
|
+
def initialize(utime, usec)
|
7
|
+
@utime = utime
|
8
|
+
@usec = usec
|
9
|
+
@time = Time.at(utime, usec)
|
10
|
+
end
|
11
|
+
|
12
|
+
def ==(other)
|
13
|
+
self.utime == other.utime && self.usec == other.usec
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.type_id
|
17
|
+
15
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.from_msgpack_ext(data)
|
21
|
+
new(*data.unpack('I*'))
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_msgpack_ext
|
25
|
+
[@utime,@usec].pack('I*')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class DummyTimeStamp2
|
30
|
+
TYPE = 16
|
31
|
+
|
32
|
+
attr_reader :utime, :usec, :time
|
33
|
+
|
34
|
+
def initialize(utime, usec)
|
35
|
+
@utime = utime
|
36
|
+
@usec = usec
|
37
|
+
@time = Time.at(utime, usec)
|
38
|
+
end
|
39
|
+
|
40
|
+
def ==(other)
|
41
|
+
self.utime == other.utime && self.usec == other.usec
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.deserialize(data)
|
45
|
+
new(* data.split(',', 2).map(&:to_i))
|
46
|
+
end
|
47
|
+
|
48
|
+
def serialize
|
49
|
+
[@utime,@usec].map(&:to_s).join(',')
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,236 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
eval("return") if java?
|
5
|
+
|
6
|
+
describe MessagePack::Factory do
|
7
|
+
subject do
|
8
|
+
described_class.new
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#packer' do
|
12
|
+
it 'creates a Packer instance' do
|
13
|
+
subject.packer.should be_kind_of(MessagePack::Packer)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'creates new instance' do
|
17
|
+
subject.packer.object_id.should_not == subject.packer.object_id
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#unpacker' do
|
22
|
+
it 'creates a Unpacker instance' do
|
23
|
+
subject.unpacker.should be_kind_of(MessagePack::Unpacker)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'creates new instance' do
|
27
|
+
subject.unpacker.object_id.should_not == subject.unpacker.object_id
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'creates unpacker with symbolize_keys option' do
|
31
|
+
unpacker = subject.unpacker(symbolize_keys: true)
|
32
|
+
unpacker.feed(MessagePack.pack({'k'=>'v'}))
|
33
|
+
unpacker.read.should == {:k => 'v'}
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'creates unpacker with allow_unknown_ext option' do
|
37
|
+
unpacker = subject.unpacker(allow_unknown_ext: true)
|
38
|
+
unpacker.feed(MessagePack::ExtensionValue.new(1, 'a').to_msgpack)
|
39
|
+
unpacker.read.should == MessagePack::ExtensionValue.new(1, 'a')
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'creates unpacker without allow_unknown_ext option' do
|
43
|
+
unpacker = subject.unpacker
|
44
|
+
unpacker.feed(MessagePack::ExtensionValue.new(1, 'a').to_msgpack)
|
45
|
+
expect{ unpacker.read }.to raise_error(MessagePack::UnknownExtTypeError)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class MyType
|
50
|
+
def initialize(a, b)
|
51
|
+
@a = a
|
52
|
+
@b = b
|
53
|
+
end
|
54
|
+
|
55
|
+
attr_reader :a, :b
|
56
|
+
|
57
|
+
def to_msgpack_ext
|
58
|
+
[a, b].pack('CC')
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.from_msgpack_ext(data)
|
62
|
+
new(*data.unpack('CC'))
|
63
|
+
end
|
64
|
+
|
65
|
+
def to_msgpack_ext_only_a
|
66
|
+
[a, 0].pack('CC')
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.from_msgpack_ext_only_b(data)
|
70
|
+
a, b = *data.unpack('CC')
|
71
|
+
new(0, b)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class MyType2 < MyType
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#registered_types' do
|
79
|
+
it 'returns Array' do
|
80
|
+
expect(subject.registered_types).to be_instance_of(Array)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'returns Array of Hash contains :type, :class, :packer, :unpacker' do
|
84
|
+
subject.register_type(0x20, ::MyType)
|
85
|
+
subject.register_type(0x21, ::MyType2)
|
86
|
+
|
87
|
+
list = subject.registered_types
|
88
|
+
|
89
|
+
expect(list.size).to eq(2)
|
90
|
+
expect(list[0]).to be_instance_of(Hash)
|
91
|
+
expect(list[1]).to be_instance_of(Hash)
|
92
|
+
expect(list[0].keys.sort).to eq([:type, :class, :packer, :unpacker].sort)
|
93
|
+
expect(list[1].keys.sort).to eq([:type, :class, :packer, :unpacker].sort)
|
94
|
+
|
95
|
+
expect(list[0][:type]).to eq(0x20)
|
96
|
+
expect(list[0][:class]).to eq(::MyType)
|
97
|
+
expect(list[0][:packer]).to eq(:to_msgpack_ext)
|
98
|
+
expect(list[0][:unpacker]).to eq(:from_msgpack_ext)
|
99
|
+
|
100
|
+
expect(list[1][:type]).to eq(0x21)
|
101
|
+
expect(list[1][:class]).to eq(::MyType2)
|
102
|
+
expect(list[1][:packer]).to eq(:to_msgpack_ext)
|
103
|
+
expect(list[1][:unpacker]).to eq(:from_msgpack_ext)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'returns Array of Hash which has nil for unregistered feature' do
|
107
|
+
subject.register_type(0x21, ::MyType2, unpacker: :from_msgpack_ext)
|
108
|
+
subject.register_type(0x20, ::MyType, packer: :to_msgpack_ext)
|
109
|
+
|
110
|
+
list = subject.registered_types
|
111
|
+
|
112
|
+
expect(list.size).to eq(2)
|
113
|
+
expect(list[0]).to be_instance_of(Hash)
|
114
|
+
expect(list[1]).to be_instance_of(Hash)
|
115
|
+
expect(list[0].keys.sort).to eq([:type, :class, :packer, :unpacker].sort)
|
116
|
+
expect(list[1].keys.sort).to eq([:type, :class, :packer, :unpacker].sort)
|
117
|
+
|
118
|
+
expect(list[0][:type]).to eq(0x20)
|
119
|
+
expect(list[0][:class]).to eq(::MyType)
|
120
|
+
expect(list[0][:packer]).to eq(:to_msgpack_ext)
|
121
|
+
expect(list[0][:unpacker]).to be_nil
|
122
|
+
|
123
|
+
expect(list[1][:type]).to eq(0x21)
|
124
|
+
expect(list[1][:class]).to eq(::MyType2)
|
125
|
+
expect(list[1][:packer]).to be_nil
|
126
|
+
expect(list[1][:unpacker]).to eq(:from_msgpack_ext)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe '#type_registered?' do
|
131
|
+
it 'receive Class or Integer, and return bool' do
|
132
|
+
expect(subject.type_registered?(0x00)).to be_falsy
|
133
|
+
expect(subject.type_registered?(0x01)).to be_falsy
|
134
|
+
expect(subject.type_registered?(::MyType)).to be_falsy
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'has option to specify what types are registered for' do
|
138
|
+
expect(subject.type_registered?(0x00, :both)).to be_falsy
|
139
|
+
expect(subject.type_registered?(0x00, :packer)).to be_falsy
|
140
|
+
expect(subject.type_registered?(0x00, :unpacker)).to be_falsy
|
141
|
+
expect{ subject.type_registered?(0x00, :something) }.to raise_error(ArgumentError)
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'returns true if specified type or class is already registered' do
|
145
|
+
subject.register_type(0x20, ::MyType)
|
146
|
+
subject.register_type(0x21, ::MyType2)
|
147
|
+
|
148
|
+
expect(subject.type_registered?(0x00)).to be_falsy
|
149
|
+
expect(subject.type_registered?(0x01)).to be_falsy
|
150
|
+
|
151
|
+
expect(subject.type_registered?(0x20)).to be_truthy
|
152
|
+
expect(subject.type_registered?(0x21)).to be_truthy
|
153
|
+
expect(subject.type_registered?(::MyType)).to be_truthy
|
154
|
+
expect(subject.type_registered?(::MyType2)).to be_truthy
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
describe '#register_type' do
|
159
|
+
let :src do
|
160
|
+
::MyType.new(1, 2)
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'registers #to_msgpack_ext and .from_msgpack_ext by default' do
|
164
|
+
subject.register_type(0x7f, ::MyType)
|
165
|
+
|
166
|
+
data = subject.packer.write(src).to_s
|
167
|
+
my = subject.unpacker.feed(data).read
|
168
|
+
my.a.should == 1
|
169
|
+
my.b.should == 2
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'registers custom packer method name' do
|
173
|
+
subject.register_type(0x7f, ::MyType, packer: :to_msgpack_ext_only_a, unpacker: :from_msgpack_ext)
|
174
|
+
|
175
|
+
data = subject.packer.write(src).to_s
|
176
|
+
my = subject.unpacker.feed(data).read
|
177
|
+
my.a.should == 1
|
178
|
+
my.b.should == 0
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'registers custom unpacker method name' do
|
182
|
+
subject.register_type(0x7f, ::MyType, packer: :to_msgpack_ext, unpacker: 'from_msgpack_ext_only_b')
|
183
|
+
|
184
|
+
data = subject.packer.write(src).to_s
|
185
|
+
my = subject.unpacker.feed(data).read
|
186
|
+
my.a.should == 0
|
187
|
+
my.b.should == 2
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'registers custom proc objects' do
|
191
|
+
pk = lambda {|obj| [obj.a + obj.b].pack('C') }
|
192
|
+
uk = lambda {|data| ::MyType.new(data.unpack('C').first, -1) }
|
193
|
+
subject.register_type(0x7f, ::MyType, packer: pk, unpacker: uk)
|
194
|
+
|
195
|
+
data = subject.packer.write(src).to_s
|
196
|
+
my = subject.unpacker.feed(data).read
|
197
|
+
my.a.should == 3
|
198
|
+
my.b.should == -1
|
199
|
+
end
|
200
|
+
|
201
|
+
it 'does not affect existent packer and unpackers' do
|
202
|
+
subject.register_type(0x7f, ::MyType)
|
203
|
+
packer = subject.packer
|
204
|
+
unpacker = subject.unpacker
|
205
|
+
|
206
|
+
subject.register_type(0x7f, ::MyType, packer: :to_msgpack_ext_only_a, unpacker: :from_msgpack_ext_only_b)
|
207
|
+
|
208
|
+
data = packer.write(src).to_s
|
209
|
+
my = unpacker.feed(data).read
|
210
|
+
my.a.should == 1
|
211
|
+
my.b.should == 2
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
describe 'DefaultFactory' do
|
216
|
+
it 'is a factory' do
|
217
|
+
MessagePack::DefaultFactory.should be_kind_of(MessagePack::Factory)
|
218
|
+
end
|
219
|
+
|
220
|
+
require_relative 'exttypes'
|
221
|
+
|
222
|
+
it 'should be referred by MessagePack.pack and MessagePack.unpack' do
|
223
|
+
skip("not supported yet in JRuby implementation") if java?
|
224
|
+
MessagePack::DefaultFactory.register_type(DummyTimeStamp1::TYPE, DummyTimeStamp1)
|
225
|
+
MessagePack::DefaultFactory.register_type(DummyTimeStamp2::TYPE, DummyTimeStamp2, packer: :serialize, unpacker: :deserialize)
|
226
|
+
|
227
|
+
t = Time.now
|
228
|
+
|
229
|
+
dm1 = DummyTimeStamp1.new(t.to_i, t.usec)
|
230
|
+
expect(MessagePack.unpack(MessagePack.pack(dm1))).to eq(dm1)
|
231
|
+
|
232
|
+
dm2 = DummyTimeStamp1.new(t.to_i, t.usec)
|
233
|
+
expect(MessagePack.unpack(MessagePack.pack(dm2))).to eq(dm2)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
@@ -72,6 +72,31 @@ describe ::MessagePack::Unpacker do
|
|
72
72
|
subject.should_not be_finished
|
73
73
|
end
|
74
74
|
end
|
75
|
+
|
76
|
+
describe '#read' do
|
77
|
+
context 'with a buffer' do
|
78
|
+
it 'reads objects' do
|
79
|
+
objects = []
|
80
|
+
subject.feed(buffer1)
|
81
|
+
subject.feed(buffer2)
|
82
|
+
subject.feed(buffer3)
|
83
|
+
objects << subject.read
|
84
|
+
objects << subject.read
|
85
|
+
objects << subject.read
|
86
|
+
objects.should == [{'foo' => 'bar'}, {'hello' => {'world' => [1, 2, 3]}}, {'x' => 'y'}]
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'reads map header' do
|
90
|
+
subject.feed({}.to_msgpack)
|
91
|
+
subject.read_map_header.should == 0
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'reads array header' do
|
95
|
+
subject.feed([].to_msgpack)
|
96
|
+
subject.read_array_header.should == 0
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
75
100
|
|
76
101
|
describe '#each' do
|
77
102
|
context 'with a buffer' do
|
@@ -112,7 +112,7 @@ describe MessagePack do
|
|
112
112
|
|
113
113
|
context 'with other things' do
|
114
114
|
it 'raises an error on #pack with an unsupported type' do
|
115
|
-
expect { MessagePack.pack(self) }.to raise_error(
|
115
|
+
expect { MessagePack.pack(self) }.to raise_error(NoMethodError, /^undefined method `to_msgpack'/)
|
116
116
|
end
|
117
117
|
|
118
118
|
it 'rasies an error on #unpack with garbage' do
|
data/spec/pack_spec.rb
CHANGED
@@ -35,9 +35,6 @@ describe MessagePack do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'calls custom to_msgpack method' do
|
38
|
-
if /java/ =~ RUBY_PLATFORM
|
39
|
-
skip "custom to_msgpack fallback is not supported yet in JRuby implementation"
|
40
|
-
end
|
41
38
|
MessagePack.pack(CustomPack01.new).should == [1,2].to_msgpack
|
42
39
|
MessagePack.pack(CustomPack02.new).should == [1,2].to_msgpack
|
43
40
|
CustomPack01.new.to_msgpack.should == [1,2].to_msgpack
|
@@ -45,9 +42,6 @@ describe MessagePack do
|
|
45
42
|
end
|
46
43
|
|
47
44
|
it 'calls custom to_msgpack method with io' do
|
48
|
-
if /java/ =~ RUBY_PLATFORM
|
49
|
-
skip "custom to_msgpack fallback with io is not supported yet in JRuby implementation"
|
50
|
-
end
|
51
45
|
s01 = StringIO.new
|
52
46
|
MessagePack.pack(CustomPack01.new, s01)
|
53
47
|
s01.string.should == [1,2].to_msgpack
|
data/spec/packer_spec.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MessagePack::Packer do
|
4
|
+
class ValueOne
|
5
|
+
def initialize(num)
|
6
|
+
@num = num
|
7
|
+
end
|
8
|
+
def num
|
9
|
+
@num
|
10
|
+
end
|
11
|
+
def to_msgpack_ext
|
12
|
+
@num.to_msgpack
|
13
|
+
end
|
14
|
+
def self.from_msgpack_ext(data)
|
15
|
+
self.new(MessagePack.unpack(data))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class ValueTwo
|
20
|
+
def initialize(num)
|
21
|
+
@num_s = num.to_s
|
22
|
+
end
|
23
|
+
def num
|
24
|
+
@num_s.to_i
|
25
|
+
end
|
26
|
+
def to_msgpack_ext
|
27
|
+
@num_s.to_msgpack
|
28
|
+
end
|
29
|
+
def self.from_msgpack_ext(data)
|
30
|
+
self.new(MessagePack.unpack(data))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#type_registered?' do
|
35
|
+
it 'receive Class or Integer, and return bool' do
|
36
|
+
skip("not supported yet in JRuby implementation") if java?
|
37
|
+
expect(subject.type_registered?(0x00)).to be_falsy
|
38
|
+
expect(subject.type_registered?(0x01)).to be_falsy
|
39
|
+
expect(subject.type_registered?(::ValueOne)).to be_falsy
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns true if specified type or class is already registered' do
|
43
|
+
skip("not supported yet in JRuby implementation") if java?
|
44
|
+
subject.register_type(0x30, ::ValueOne, :to_msgpack_ext)
|
45
|
+
subject.register_type(0x31, ::ValueTwo, :to_msgpack_ext)
|
46
|
+
|
47
|
+
expect(subject.type_registered?(0x00)).to be_falsy
|
48
|
+
expect(subject.type_registered?(0x01)).to be_falsy
|
49
|
+
|
50
|
+
expect(subject.type_registered?(0x30)).to be_truthy
|
51
|
+
expect(subject.type_registered?(0x31)).to be_truthy
|
52
|
+
expect(subject.type_registered?(::ValueOne)).to be_truthy
|
53
|
+
expect(subject.type_registered?(::ValueTwo)).to be_truthy
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#register_type' do
|
58
|
+
it 'get type and class mapping for packing' do
|
59
|
+
skip("not supported yet in JRuby implementation") if java?
|
60
|
+
packer = MessagePack::Packer.new
|
61
|
+
packer.register_type(0x01, ValueOne){|obj| obj.to_msgpack_ext }
|
62
|
+
packer.register_type(0x02, ValueTwo){|obj| obj.to_msgpack_ext }
|
63
|
+
|
64
|
+
packer = MessagePack::Packer.new
|
65
|
+
packer.register_type(0x01, ValueOne, :to_msgpack_ext)
|
66
|
+
packer.register_type(0x02, ValueTwo, :to_msgpack_ext)
|
67
|
+
|
68
|
+
packer = MessagePack::Packer.new
|
69
|
+
packer.register_type(0x01, ValueOne, &:to_msgpack_ext)
|
70
|
+
packer.register_type(0x02, ValueTwo, &:to_msgpack_ext)
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'returns a Hash which contains map of Class and type' do
|
74
|
+
skip("not supported yet in JRuby implementation") if java?
|
75
|
+
packer = MessagePack::Packer.new
|
76
|
+
packer.register_type(0x01, ValueOne, :to_msgpack_ext)
|
77
|
+
packer.register_type(0x02, ValueTwo, :to_msgpack_ext)
|
78
|
+
|
79
|
+
expect(packer.registered_types).to be_a(Array)
|
80
|
+
expect(packer.registered_types.size).to eq(2)
|
81
|
+
|
82
|
+
one = packer.registered_types[0]
|
83
|
+
expect(one.keys.sort).to eq([:type, :class, :packer].sort)
|
84
|
+
expect(one[:type]).to eq(0x01)
|
85
|
+
expect(one[:class]).to eq(ValueOne)
|
86
|
+
expect(one[:packer]).to eq(:to_msgpack_ext)
|
87
|
+
|
88
|
+
two = packer.registered_types[1]
|
89
|
+
expect(two.keys.sort).to eq([:type, :class, :packer].sort)
|
90
|
+
expect(two[:type]).to eq(0x02)
|
91
|
+
expect(two[:class]).to eq(ValueTwo)
|
92
|
+
expect(two[:packer]).to eq(:to_msgpack_ext)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -15,13 +15,24 @@ end
|
|
15
15
|
|
16
16
|
require 'msgpack'
|
17
17
|
|
18
|
-
|
18
|
+
def java?
|
19
|
+
/java/ =~ RUBY_PLATFORM
|
20
|
+
end
|
21
|
+
|
22
|
+
if java?
|
19
23
|
RSpec.configure do |c|
|
20
24
|
c.treat_symbols_as_metadata_keys_with_true_values = true
|
21
25
|
c.filter_run_excluding :encodings => !(defined? Encoding)
|
22
26
|
end
|
23
27
|
else
|
28
|
+
RSpec.configure do |config|
|
29
|
+
config.expect_with :rspec do |c|
|
30
|
+
c.syntax = [:should, :expect]
|
31
|
+
end
|
32
|
+
end
|
24
33
|
Packer = MessagePack::Packer
|
25
34
|
Unpacker = MessagePack::Unpacker
|
26
35
|
Buffer = MessagePack::Buffer
|
36
|
+
Factory = MessagePack::Factory
|
37
|
+
ExtensionValue = MessagePack::ExtensionValue
|
27
38
|
end
|
data/spec/unpack_spec.rb
CHANGED
@@ -13,10 +13,7 @@ describe MessagePack do
|
|
13
13
|
MessagePack.unpack(MessagePack.pack(symbolized_hash), :symbolize_keys => true).should == symbolized_hash
|
14
14
|
end
|
15
15
|
|
16
|
-
it 'Unpacker#
|
17
|
-
if /java/ =~ RUBY_PLATFORM
|
18
|
-
skip "Unpacker#unpack returns nil in JRuby (incompatible)"
|
19
|
-
end
|
16
|
+
it 'Unpacker#read symbolize_keys' do
|
20
17
|
unpacker = MessagePack::Unpacker.new(:symbolize_keys => true)
|
21
18
|
symbolized_hash = {:a => 'b', :c => 'd'}
|
22
19
|
unpacker.feed(MessagePack.pack(symbolized_hash)).read.should == symbolized_hash
|
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MessagePack::Unpacker do
|
4
|
+
class ValueOne
|
5
|
+
attr_reader :num
|
6
|
+
def initialize(num)
|
7
|
+
@num = num
|
8
|
+
end
|
9
|
+
def ==(obj)
|
10
|
+
self.num == obj.num
|
11
|
+
end
|
12
|
+
def num
|
13
|
+
@num
|
14
|
+
end
|
15
|
+
def to_msgpack_ext
|
16
|
+
@num.to_msgpack
|
17
|
+
end
|
18
|
+
def self.from_msgpack_ext(data)
|
19
|
+
self.new(MessagePack.unpack(data))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class ValueTwo
|
24
|
+
attr_reader :num_s
|
25
|
+
def initialize(num)
|
26
|
+
@num_s = num.to_s
|
27
|
+
end
|
28
|
+
def ==(obj)
|
29
|
+
self.num_s == obj.num_s
|
30
|
+
end
|
31
|
+
def num
|
32
|
+
@num_s.to_i
|
33
|
+
end
|
34
|
+
def to_msgpack_ext
|
35
|
+
@num_s.to_msgpack
|
36
|
+
end
|
37
|
+
def self.from_msgpack_ext(data)
|
38
|
+
self.new(MessagePack.unpack(data))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#type_registered?' do
|
43
|
+
it 'receive Class or Integer, and return bool' do
|
44
|
+
skip("not supported yet in JRuby implementation") if java?
|
45
|
+
expect(subject.type_registered?(0x00)).to be_falsy
|
46
|
+
expect(subject.type_registered?(0x01)).to be_falsy
|
47
|
+
expect(subject.type_registered?(::ValueOne)).to be_falsy
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'returns true if specified type or class is already registered' do
|
51
|
+
skip("not supported yet in JRuby implementation") if java?
|
52
|
+
subject.register_type(0x30, ::ValueOne, :from_msgpack_ext)
|
53
|
+
subject.register_type(0x31, ::ValueTwo, :from_msgpack_ext)
|
54
|
+
|
55
|
+
expect(subject.type_registered?(0x00)).to be_falsy
|
56
|
+
expect(subject.type_registered?(0x01)).to be_falsy
|
57
|
+
|
58
|
+
expect(subject.type_registered?(0x30)).to be_truthy
|
59
|
+
expect(subject.type_registered?(0x31)).to be_truthy
|
60
|
+
expect(subject.type_registered?(::ValueOne)).to be_truthy
|
61
|
+
expect(subject.type_registered?(::ValueTwo)).to be_truthy
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'cannot detect unpack rule with block, not method' do
|
65
|
+
skip("not supported yet in JRuby implementation") if java?
|
66
|
+
subject.register_type(0x40){|data| ValueOne.from_msgpack_ext(data) }
|
67
|
+
|
68
|
+
expect(subject.type_registered?(0x40)).to be_truthy
|
69
|
+
expect(subject.type_registered?(ValueOne)).to be_falsy
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'with ext definitions' do
|
74
|
+
it 'get type and class mapping for packing' do
|
75
|
+
skip("not supported yet in JRuby implementation") if java?
|
76
|
+
unpacker = MessagePack::Unpacker.new
|
77
|
+
unpacker.register_type(0x01){|data| ValueOne.from_msgpack_ext }
|
78
|
+
unpacker.register_type(0x02){|data| ValueTwo.from_msgpack_ext(data) }
|
79
|
+
|
80
|
+
unpacker = MessagePack::Unpacker.new
|
81
|
+
unpacker.register_type(0x01, ValueOne, :from_msgpack_ext)
|
82
|
+
unpacker.register_type(0x02, ValueTwo, :from_msgpack_ext)
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'returns a Array of Hash which contains :type, :class and :unpacker' do
|
86
|
+
skip("not supported yet in JRuby implementation") if java?
|
87
|
+
unpacker = MessagePack::Unpacker.new
|
88
|
+
unpacker.register_type(0x02, ValueTwo, :from_msgpack_ext)
|
89
|
+
unpacker.register_type(0x01, ValueOne, :from_msgpack_ext)
|
90
|
+
|
91
|
+
list = unpacker.registered_types
|
92
|
+
|
93
|
+
expect(list).to be_a(Array)
|
94
|
+
expect(list.size).to eq(2)
|
95
|
+
|
96
|
+
one = list[0]
|
97
|
+
expect(one.keys.sort).to eq([:type, :class, :unpacker].sort)
|
98
|
+
expect(one[:type]).to eq(0x01)
|
99
|
+
expect(one[:class]).to eq(ValueOne)
|
100
|
+
expect(one[:unpacker]).to eq(:from_msgpack_ext)
|
101
|
+
|
102
|
+
two = list[1]
|
103
|
+
expect(two.keys.sort).to eq([:type, :class, :unpacker].sort)
|
104
|
+
expect(two[:type]).to eq(0x02)
|
105
|
+
expect(two[:class]).to eq(ValueTwo)
|
106
|
+
expect(two[:unpacker]).to eq(:from_msgpack_ext)
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'returns a Array of Hash, which contains nil for class if block unpacker specified' do
|
110
|
+
skip("not supported yet in JRuby implementation") if java?
|
111
|
+
unpacker = MessagePack::Unpacker.new
|
112
|
+
unpacker.register_type(0x01){|data| ValueOne.from_msgpack_ext }
|
113
|
+
unpacker.register_type(0x02, &ValueTwo.method(:from_msgpack_ext))
|
114
|
+
|
115
|
+
list = unpacker.registered_types
|
116
|
+
|
117
|
+
expect(list).to be_a(Array)
|
118
|
+
expect(list.size).to eq(2)
|
119
|
+
|
120
|
+
one = list[0]
|
121
|
+
expect(one.keys.sort).to eq([:type, :class, :unpacker].sort)
|
122
|
+
expect(one[:type]).to eq(0x01)
|
123
|
+
expect(one[:class]).to be_nil
|
124
|
+
expect(one[:unpacker]).to be_instance_of(Proc)
|
125
|
+
|
126
|
+
two = list[1]
|
127
|
+
expect(two.keys.sort).to eq([:type, :class, :unpacker].sort)
|
128
|
+
expect(two[:type]).to eq(0x02)
|
129
|
+
expect(two[:class]).to be_nil
|
130
|
+
expect(two[:unpacker]).to be_instance_of(Proc)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: msgpack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0dev1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-09-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.9.4
|
48
48
|
name: rake-compiler
|
49
49
|
prerelease: false
|
50
50
|
type: :development
|
@@ -52,35 +52,35 @@ dependencies:
|
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 0.
|
55
|
+
version: 0.9.4
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
name:
|
61
|
+
version: 0.4.3
|
62
|
+
name: rake-compiler-dock
|
63
63
|
prerelease: false
|
64
64
|
type: :development
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 0.4.3
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
76
|
-
name:
|
75
|
+
version: '3.3'
|
76
|
+
name: rspec
|
77
77
|
prerelease: false
|
78
78
|
type: :development
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - ~>
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
83
|
+
version: '3.3'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
@@ -95,6 +95,20 @@ dependencies:
|
|
95
95
|
- - ~>
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: 0.8.2
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
name: json
|
105
|
+
prerelease: false
|
106
|
+
type: :development
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
98
112
|
description: MessagePack is a binary-based efficient object serialization library. It enables to exchange structured objects between many languages like JSON. But unlike JSON, it is very fast and small.
|
99
113
|
email:
|
100
114
|
- frsyuki@gmail.com
|
@@ -104,7 +118,10 @@ extensions: []
|
|
104
118
|
extra_rdoc_files: []
|
105
119
|
files:
|
106
120
|
- lib/msgpack.rb
|
121
|
+
- lib/msgpack/factory.rb
|
107
122
|
- lib/msgpack/msgpack.jar
|
123
|
+
- lib/msgpack/packer.rb
|
124
|
+
- lib/msgpack/unpacker.rb
|
108
125
|
- lib/msgpack/version.rb
|
109
126
|
- spec/cases.json
|
110
127
|
- spec/cases.msg
|
@@ -116,15 +133,20 @@ files:
|
|
116
133
|
- spec/cruby/buffer_unpacker.rb
|
117
134
|
- spec/cruby/packer_spec.rb
|
118
135
|
- spec/cruby/unpacker_spec.rb
|
136
|
+
- spec/ext_value_spec.rb
|
137
|
+
- spec/exttypes.rb
|
138
|
+
- spec/factory_spec.rb
|
119
139
|
- spec/format_spec.rb
|
120
140
|
- spec/jruby/benchmarks/shootout_bm.rb
|
121
141
|
- spec/jruby/benchmarks/symbolize_keys_bm.rb
|
122
142
|
- spec/jruby/msgpack/unpacker_spec.rb
|
123
|
-
- spec/
|
143
|
+
- spec/msgpack_spec.rb
|
124
144
|
- spec/pack_spec.rb
|
145
|
+
- spec/packer_spec.rb
|
125
146
|
- spec/random_compat.rb
|
126
147
|
- spec/spec_helper.rb
|
127
148
|
- spec/unpack_spec.rb
|
149
|
+
- spec/unpacker_spec.rb
|
128
150
|
homepage: http://msgpack.org/
|
129
151
|
licenses:
|
130
152
|
- Apache 2.0
|
@@ -140,9 +162,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
140
162
|
version: '0'
|
141
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
164
|
requirements:
|
143
|
-
- - '
|
165
|
+
- - '>'
|
144
166
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
167
|
+
version: 1.3.1
|
146
168
|
requirements: []
|
147
169
|
rubyforge_project: msgpack
|
148
170
|
rubygems_version: 2.4.6
|
@@ -160,13 +182,18 @@ test_files:
|
|
160
182
|
- spec/cruby/buffer_unpacker.rb
|
161
183
|
- spec/cruby/packer_spec.rb
|
162
184
|
- spec/cruby/unpacker_spec.rb
|
185
|
+
- spec/ext_value_spec.rb
|
186
|
+
- spec/exttypes.rb
|
187
|
+
- spec/factory_spec.rb
|
163
188
|
- spec/format_spec.rb
|
164
189
|
- spec/jruby/benchmarks/shootout_bm.rb
|
165
190
|
- spec/jruby/benchmarks/symbolize_keys_bm.rb
|
166
191
|
- spec/jruby/msgpack/unpacker_spec.rb
|
167
|
-
- spec/
|
192
|
+
- spec/msgpack_spec.rb
|
168
193
|
- spec/pack_spec.rb
|
194
|
+
- spec/packer_spec.rb
|
169
195
|
- spec/random_compat.rb
|
170
196
|
- spec/spec_helper.rb
|
171
197
|
- spec/unpack_spec.rb
|
198
|
+
- spec/unpacker_spec.rb
|
172
199
|
has_rdoc: false
|