msgpack 0.7.4 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -1
  3. data/.rubocop.yml +3 -0
  4. data/.travis.yml +27 -14
  5. data/ChangeLog +89 -1
  6. data/Gemfile +6 -1
  7. data/README.rdoc +55 -1
  8. data/Rakefile +5 -1
  9. data/bench/pack_symbols.rb +28 -0
  10. data/bench/run_symbols.sh +26 -0
  11. data/doclib/msgpack.rb +2 -2
  12. data/doclib/msgpack/core_ext.rb +20 -20
  13. data/doclib/msgpack/factory.rb +33 -0
  14. data/doclib/msgpack/packer.rb +20 -0
  15. data/doclib/msgpack/time.rb +22 -0
  16. data/doclib/msgpack/timestamp.rb +44 -0
  17. data/ext/java/org/msgpack/jruby/Buffer.java +4 -0
  18. data/ext/java/org/msgpack/jruby/Encoder.java +48 -18
  19. data/ext/java/org/msgpack/jruby/ExtensionRegistry.java +67 -38
  20. data/ext/java/org/msgpack/jruby/Factory.java +20 -8
  21. data/ext/java/org/msgpack/jruby/MessagePackLibrary.java +0 -92
  22. data/ext/java/org/msgpack/jruby/Packer.java +114 -11
  23. data/ext/java/org/msgpack/jruby/Unpacker.java +15 -8
  24. data/ext/msgpack/buffer.h +14 -0
  25. data/ext/msgpack/buffer_class.c +1 -1
  26. data/ext/msgpack/compat.h +10 -0
  27. data/ext/msgpack/factory_class.c +24 -17
  28. data/ext/msgpack/factory_class.h +0 -2
  29. data/ext/msgpack/packer.c +5 -4
  30. data/ext/msgpack/packer.h +13 -1
  31. data/ext/msgpack/packer_class.c +130 -43
  32. data/ext/msgpack/packer_class.h +0 -2
  33. data/ext/msgpack/packer_ext_registry.c +2 -2
  34. data/ext/msgpack/packer_ext_registry.h +64 -25
  35. data/ext/msgpack/rbinit.c +0 -2
  36. data/ext/msgpack/unpacker.c +3 -3
  37. data/ext/msgpack/unpacker_class.c +25 -56
  38. data/ext/msgpack/unpacker_class.h +0 -2
  39. data/ext/msgpack/unpacker_ext_registry.c +2 -2
  40. data/ext/msgpack/unpacker_ext_registry.h +3 -3
  41. data/lib/msgpack.rb +36 -0
  42. data/lib/msgpack/core_ext.rb +139 -0
  43. data/lib/msgpack/factory.rb +21 -0
  44. data/lib/msgpack/symbol.rb +9 -0
  45. data/lib/msgpack/time.rb +29 -0
  46. data/lib/msgpack/timestamp.rb +76 -0
  47. data/lib/msgpack/version.rb +8 -1
  48. data/msgpack.gemspec +6 -7
  49. data/spec/cruby/buffer_spec.rb +6 -1
  50. data/spec/factory_spec.rb +134 -0
  51. data/spec/msgpack_spec.rb +52 -0
  52. data/spec/packer_spec.rb +200 -0
  53. data/spec/timestamp_spec.rb +121 -0
  54. data/spec/unpacker_spec.rb +29 -0
  55. metadata +29 -23
  56. data/ext/msgpack/core_ext.c +0 -144
  57. data/ext/msgpack/core_ext.h +0 -26
data/spec/msgpack_spec.rb CHANGED
@@ -159,4 +159,56 @@ describe MessagePack do
159
159
  packed.should start_with("\xDA\x00\x20")
160
160
  end
161
161
  end
162
+
163
+ context 'when a Bignum has a small value' do
164
+ tests['numbers'].take(10).each do |desc, unpacked, packed|
165
+ it("encodes #{desc} to the smallest representation") do
166
+ bignum = (1 << 64).coerce(unpacked)[0]
167
+ MessagePack.pack(bignum).should eq(packed)
168
+ end
169
+ end
170
+ end
171
+
172
+ context 'when the source is na IO-like object' do
173
+ require 'tempfile'
174
+ require 'stringio'
175
+
176
+ it 'work with IO destination object as 2nd argument of MessagePack.pack' do
177
+ Tempfile.create("pack-test") do |io|
178
+ return_value = MessagePack.pack(utf8enc('hello world'), io)
179
+ return_value.should be_nil
180
+
181
+ io.rewind
182
+ io.read.force_encoding(Encoding::ASCII_8BIT).should eq("\xABhello world".force_encoding(Encoding::ASCII_8BIT))
183
+ end
184
+ end
185
+
186
+ it 'work with IO-like StringIO destination object as 2nd argument of MessagePack.pack' do
187
+ io = StringIO.new
188
+ return_value = MessagePack.pack(utf8enc('hello world'), io)
189
+ return_value.should be_nil
190
+
191
+ io.rewind
192
+ io.read.force_encoding(Encoding::ASCII_8BIT).should eq("\xABhello world".force_encoding(Encoding::ASCII_8BIT))
193
+ end
194
+
195
+ it 'work with IO source object as source of MessagePack.unpack' do
196
+ Tempfile.create("unpack-test") do |io|
197
+ MessagePack.pack(utf8enc('hello world'), io)
198
+ io.rewind
199
+
200
+ return_value = MessagePack.unpack(io)
201
+ return_value.should eq(utf8enc('hello world'))
202
+ end
203
+ end
204
+
205
+ it 'work with IO-like StringIO object of MessagePack.unpack' do
206
+ io = StringIO.new
207
+ MessagePack.pack(utf8enc('hello world'), io)
208
+ io.rewind
209
+
210
+ return_value = MessagePack.unpack(io)
211
+ return_value.should eq(utf8enc('hello world'))
212
+ end
213
+ end
162
214
  end
data/spec/packer_spec.rb CHANGED
@@ -134,6 +134,41 @@ describe MessagePack::Packer do
134
134
  packer.to_s.should == "\x81"
135
135
  end
136
136
 
137
+ it 'write_bin_header 0' do
138
+ packer.write_bin_header(0)
139
+ packer.to_s.should == "\xC4\x00"
140
+ end
141
+
142
+ it 'write_bin_header 255' do
143
+ packer.write_bin_header(255)
144
+ packer.to_s.should == "\xC4\xFF"
145
+ end
146
+
147
+ it 'write_bin_header 256' do
148
+ packer.write_bin_header(256)
149
+ packer.to_s.should == "\xC5\x01\x00"
150
+ end
151
+
152
+ it 'write_bin_header 65535' do
153
+ packer.write_bin_header(65535)
154
+ packer.to_s.should == "\xC5\xFF\xFF"
155
+ end
156
+
157
+ it 'write_bin_header 65536' do
158
+ packer.write_bin_header(65536)
159
+ packer.to_s.should == "\xC6\x00\x01\x00\x00"
160
+ end
161
+
162
+ it 'write_bin_header 999999' do
163
+ packer.write_bin_header(999999)
164
+ packer.to_s.should == "\xC6\x00\x0F\x42\x3F"
165
+ end
166
+
167
+ it 'write_bin' do
168
+ packer.write_bin("hello")
169
+ packer.to_s.should == "\xC4\x05hello"
170
+ end
171
+
137
172
  describe '#write_float32' do
138
173
  tests = [
139
174
  ['small floats', 3.14, "\xCA\x40\x48\xF5\xC3"],
@@ -178,6 +213,29 @@ describe MessagePack::Packer do
178
213
  Array.new.to_msgpack.class.should == String
179
214
  end
180
215
 
216
+ it 'to_msgpack with packer equals to_msgpack' do
217
+ nil.to_msgpack(MessagePack::Packer.new).to_str.should == nil.to_msgpack
218
+ true.to_msgpack(MessagePack::Packer.new).to_str.should == true.to_msgpack
219
+ false.to_msgpack(MessagePack::Packer.new).to_str.should == false.to_msgpack
220
+ 1.to_msgpack(MessagePack::Packer.new).to_str.should == 1.to_msgpack
221
+ 1.0.to_msgpack(MessagePack::Packer.new).to_str.should == 1.0.to_msgpack
222
+ "".to_msgpack(MessagePack::Packer.new).to_str.should == "".to_msgpack
223
+ Hash.new.to_msgpack(MessagePack::Packer.new).to_str.should == Hash.new.to_msgpack
224
+ Array.new.to_msgpack(MessagePack::Packer.new).to_str.should == Array.new.to_msgpack
225
+ end
226
+
227
+ it 'raises type error on wrong type' do
228
+ packer = MessagePack::Packer.new
229
+ expect { packer.write_float "hello" }.to raise_error(TypeError)
230
+ expect { packer.write_string 1 }.to raise_error(TypeError)
231
+ expect { packer.write_bin 1 }.to raise_error(TypeError)
232
+ expect { packer.write_array "hello" }.to raise_error(TypeError)
233
+ expect { packer.write_hash "hello" }.to raise_error(TypeError)
234
+ expect { packer.write_symbol "hello" }.to raise_error(TypeError)
235
+ expect { packer.write_int "hello" }.to raise_error(TypeError)
236
+ expect { packer.write_extension "hello" }.to raise_error(TypeError)
237
+ end
238
+
181
239
  class CustomPack01
182
240
  def to_msgpack(pk=nil)
183
241
  return MessagePack.pack(self, pk) unless pk.class == MessagePack::Packer
@@ -323,6 +381,148 @@ describe MessagePack::Packer do
323
381
  expect(two[:class]).to eq(ValueTwo)
324
382
  expect(two[:packer]).to eq(:to_msgpack_ext)
325
383
  end
384
+
385
+ context 'when it has no ext type but a super class has' do
386
+ before { stub_const('Value', Class.new) }
387
+ before do
388
+ Value.class_eval do
389
+ def to_msgpack_ext
390
+ 'value_msgpacked'
391
+ end
392
+ end
393
+ end
394
+ before { packer.register_type(0x01, Value, :to_msgpack_ext) }
395
+
396
+ context "when it is a child class" do
397
+ before { stub_const('InheritedValue', Class.new(Value)) }
398
+ subject { packer.pack(InheritedValue.new).to_s }
399
+
400
+ it { is_expected.to eq "\xC7\x0F\x01value_msgpacked" }
401
+
402
+ context "when it is a grandchild class" do
403
+ before { stub_const('InheritedTwiceValue', Class.new(InheritedValue)) }
404
+ subject { packer.pack(InheritedTwiceValue.new).to_s }
405
+
406
+ it { is_expected.to eq "\xC7\x0F\x01value_msgpacked" }
407
+ end
408
+ end
409
+ end
410
+
411
+ context 'when it and its super class has an ext type' do
412
+ before { stub_const('Value', Class.new) }
413
+ before do
414
+ Value.class_eval do
415
+ def to_msgpack_ext
416
+ 'value_msgpacked'
417
+ end
418
+ end
419
+ end
420
+ before { packer.register_type(0x01, Value, :to_msgpack_ext) }
421
+
422
+ context "when it is a child class" do
423
+ before { stub_const('InheritedValue', Class.new(Value)) }
424
+ before do
425
+ InheritedValue.class_eval do
426
+ def to_msgpack_ext
427
+ 'inherited_value_msgpacked'
428
+ end
429
+ end
430
+ end
431
+
432
+ before { packer.register_type(0x02, InheritedValue, :to_msgpack_ext) }
433
+ subject { packer.pack(InheritedValue.new).to_s }
434
+
435
+ it { is_expected.to eq "\xC7\x19\x02inherited_value_msgpacked" }
436
+ end
437
+
438
+ context "even when it is a child class" do
439
+ before { stub_const('InheritedValue', Class.new(Value)) }
440
+ before do
441
+ InheritedValue.class_eval do
442
+ def to_msgpack_ext
443
+ 'inherited_value_msgpacked'
444
+ end
445
+ end
446
+ end
447
+
448
+ before { packer.register_type(0x02, InheritedValue, :to_msgpack_ext) }
449
+ subject { packer.pack(Value.new).to_s }
450
+
451
+ it { is_expected.to eq "\xC7\x0F\x01value_msgpacked" }
452
+ end
453
+ end
454
+
455
+ context 'when it has no ext type but an included module has' do
456
+ subject { packer.pack(Value.new).to_s }
457
+
458
+ before do
459
+ mod = Module.new do
460
+ def to_msgpack_ext
461
+ 'value_msgpacked'
462
+ end
463
+ end
464
+ stub_const('Mod', mod)
465
+ end
466
+ before { packer.register_type(0x01, Mod, :to_msgpack_ext) }
467
+
468
+ before { stub_const('Value', Class.new{ include Mod }) }
469
+
470
+ it { is_expected.to eq "\xC7\x0F\x01value_msgpacked" }
471
+ end
472
+
473
+ context 'when it has no ext type but it was extended by a module which has one' do
474
+ subject { packer.pack(object).to_s }
475
+ let(:object) { Object.new.extend Mod }
476
+
477
+ before do
478
+ mod = Module.new do
479
+ def to_msgpack_ext
480
+ 'value_msgpacked'
481
+ end
482
+ end
483
+ stub_const('Mod', mod)
484
+ end
485
+ before { packer.register_type(0x01, Mod, :to_msgpack_ext) }
486
+
487
+
488
+ it { is_expected.to eq "\xC7\x0F\x01value_msgpacked" }
489
+ end
490
+
491
+ context 'when registering a type for symbols' do
492
+ before { packer.register_type(0x00, ::Symbol, :to_msgpack_ext) }
493
+
494
+ it 'packs symbols in an ext type' do
495
+ expect(packer.pack(:symbol).to_s).to eq "\xc7\x06\x00symbol"
496
+ end
497
+ end
498
+ end
499
+
500
+ describe "fixnum and bignum" do
501
+ it "fixnum.to_msgpack" do
502
+ 23.to_msgpack.should == "\x17"
503
+ end
504
+
505
+ it "fixnum.to_msgpack(packer)" do
506
+ 23.to_msgpack(packer)
507
+ packer.to_s.should == "\x17"
508
+ end
509
+
510
+ it "bignum.to_msgpack" do
511
+ -4294967296.to_msgpack.should == "\xD3\xFF\xFF\xFF\xFF\x00\x00\x00\x00"
512
+ end
513
+
514
+ it "bignum.to_msgpack(packer)" do
515
+ -4294967296.to_msgpack(packer)
516
+ packer.to_s.should == "\xD3\xFF\xFF\xFF\xFF\x00\x00\x00\x00"
517
+ end
518
+
519
+ it "unpack(fixnum)" do
520
+ MessagePack.unpack("\x17").should == 23
521
+ end
522
+
523
+ it "unpack(bignum)" do
524
+ MessagePack.unpack("\xD3\xFF\xFF\xFF\xFF\x00\x00\x00\x00").should == -4294967296
525
+ end
326
526
  end
327
527
 
328
528
  describe "ext formats" do
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe MessagePack::Timestamp do
6
+ describe 'malformed format' do
7
+ it do
8
+ expect do
9
+ MessagePack::Timestamp.from_msgpack_ext([0xd4, 0x00].pack("C*"))
10
+ end.to raise_error(MessagePack::MalformedFormatError)
11
+ end
12
+ end
13
+
14
+ describe 'register_type with Time' do
15
+ let(:factory) do
16
+ factory = MessagePack::Factory.new
17
+ factory.register_type(
18
+ MessagePack::Timestamp::TYPE,
19
+ Time,
20
+ packer: MessagePack::Time::Packer,
21
+ unpacker: MessagePack::Time::Unpacker
22
+ )
23
+ factory
24
+ end
25
+
26
+ let(:time) { Time.local(2019, 6, 17, 1, 2, 3, 123_456_789 / 1000.0) }
27
+ it 'serializes and deserializes Time' do
28
+ prefix_fixext8_with_type_id = [0xd7, -1].pack("c*")
29
+
30
+ packed = factory.pack(time)
31
+ expect(packed).to start_with(prefix_fixext8_with_type_id)
32
+ expect(packed.size).to eq(10)
33
+ unpacked = factory.unpack(packed)
34
+ expect(unpacked.to_i).to eq(time.to_i)
35
+ expect(unpacked.to_f).to eq(time.to_f)
36
+ # expect(unpacked).to eq(time) # we can't do it because of nsec (rational vs float?)
37
+ end
38
+
39
+ let(:time_without_nsec) { Time.local(2019, 6, 17, 1, 2, 3, 0) }
40
+ it 'serializes time without nanosec as fixext4' do
41
+ prefix_fixext4_with_type_id = [0xd6, -1].pack("c*")
42
+
43
+ packed = factory.pack(time_without_nsec)
44
+ expect(packed).to start_with(prefix_fixext4_with_type_id)
45
+ expect(packed.size).to eq(6)
46
+ unpacked = factory.unpack(packed)
47
+ expect(unpacked).to eq(time_without_nsec)
48
+ end
49
+
50
+ let(:time_after_2514) { Time.at(1 << 34) } # the max num of 34bit int means 2514-05-30 01:53:04 UTC
51
+ it 'serializes time after 2038 as ext8' do
52
+ prefix_ext8_with_12bytes_payload_and_type_id = [0xc7, 12, -1].pack("c*")
53
+
54
+ expect(time_after_2514.to_i).to be > 0xffffffff
55
+ packed = factory.pack(time_after_2514)
56
+ expect(packed).to start_with(prefix_ext8_with_12bytes_payload_and_type_id)
57
+ expect(packed.size).to eq(15)
58
+ end
59
+
60
+ it 'runs correctly (regression)' do
61
+ expect(factory.unpack(factory.pack(Time.utc(2200)))).to eq(Time.utc(2200))
62
+ end
63
+ end
64
+
65
+ describe 'register_type with MessagePack::Timestamp' do
66
+ let(:factory) do
67
+ factory = MessagePack::Factory.new
68
+ factory.register_type(MessagePack::Timestamp::TYPE, MessagePack::Timestamp)
69
+ factory
70
+ end
71
+
72
+ let(:timestamp) { MessagePack::Timestamp.new(Time.now.tv_sec, 123_456_789) }
73
+ it 'serializes and deserializes MessagePack::Timestamp' do
74
+ packed = factory.pack(timestamp)
75
+ unpacked = factory.unpack(packed)
76
+ expect(unpacked).to eq(timestamp)
77
+ end
78
+ end
79
+
80
+ describe 'timestamp32' do
81
+ it 'handles [1, 0]' do
82
+ t = MessagePack::Timestamp.new(1, 0)
83
+
84
+ payload = t.to_msgpack_ext
85
+ unpacked = MessagePack::Timestamp.from_msgpack_ext(payload)
86
+
87
+ expect(unpacked).to eq(t)
88
+ end
89
+ end
90
+
91
+ describe 'timestamp64' do
92
+ it 'handles [1, 1]' do
93
+ t = MessagePack::Timestamp.new(1, 1)
94
+
95
+ payload = t.to_msgpack_ext
96
+ unpacked = MessagePack::Timestamp.from_msgpack_ext(payload)
97
+
98
+ expect(unpacked).to eq(t)
99
+ end
100
+ end
101
+
102
+ describe 'timestamp96' do
103
+ it 'handles [-1, 0]' do
104
+ t = MessagePack::Timestamp.new(-1, 0)
105
+
106
+ payload = t.to_msgpack_ext
107
+ unpacked = MessagePack::Timestamp.from_msgpack_ext(payload)
108
+
109
+ expect(unpacked).to eq(t)
110
+ end
111
+
112
+ it 'handles [-1, 999_999_999]' do
113
+ t = MessagePack::Timestamp.new(-1, 999_999_999)
114
+
115
+ payload = t.to_msgpack_ext
116
+ unpacked = MessagePack::Timestamp.from_msgpack_ext(payload)
117
+
118
+ expect(unpacked).to eq(t)
119
+ end
120
+ end
121
+ end
@@ -477,6 +477,24 @@ describe MessagePack::Unpacker do
477
477
  expect(two[:class]).to be_nil
478
478
  expect(two[:unpacker]).to be_instance_of(Proc)
479
479
  end
480
+
481
+ describe "registering an ext type for a module" do
482
+ subject { unpacker.feed("\xc7\x06\x00module").unpack }
483
+
484
+ let(:unpacker) { MessagePack::Unpacker.new }
485
+
486
+ before do
487
+ mod = Module.new do
488
+ def self.from_msgpack_ext(data)
489
+ "unpacked #{data}"
490
+ end
491
+ end
492
+ stub_const('Mod', mod)
493
+ end
494
+
495
+ before { unpacker.register_type(0x00, Mod, :from_msgpack_ext) }
496
+ it { is_expected.to eq "unpacked module" }
497
+ end
480
498
  end
481
499
 
482
500
  def flatten(struct, results = [])
@@ -564,6 +582,17 @@ describe MessagePack::Unpacker do
564
582
  objects.should == [{'foo' => 'bar'}, {'hello' => {'world' => [1, 2, 3]}}, {'x' => 'y'}]
565
583
  end
566
584
  end
585
+
586
+ context 'with a stream and symbolize_keys passed to the constructor' do
587
+ it 'yields each object in the stream, with symbolized keys' do
588
+ objects = []
589
+ unpacker = described_class.new(StringIO.new(buffer1 + buffer2 + buffer3), symbolize_keys: true)
590
+ unpacker.each do |obj|
591
+ objects << obj
592
+ end
593
+ objects.should == [{:foo => 'bar'}, {:hello => {:world => [1, 2, 3]}}, {:x => 'y'}]
594
+ end
595
+ end
567
596
  end
568
597
 
569
598
  describe '#feed_each' do
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.7.4
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
@@ -10,64 +10,64 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-01-08 00:00:00.000000000 Z
13
+ date: 2020-02-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - "~>"
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '1.0'
21
+ version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - "~>"
26
+ - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: '1.0'
28
+ version: '0'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rake
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - "~>"
33
+ - - ">="
34
34
  - !ruby/object:Gem::Version
35
- version: 0.9.2
35
+ version: '0'
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - "~>"
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 0.9.2
42
+ version: '0'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rake-compiler
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: 0.9.4
49
+ version: '1.0'
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: 0.9.4
56
+ version: '1.0'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: rake-compiler-dock
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - "~>"
62
62
  - !ruby/object:Gem::Version
63
- version: 0.5.0
63
+ version: '1.0'
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - "~>"
69
69
  - !ruby/object:Gem::Version
70
- version: 0.5.0
70
+ version: '1.0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: rspec
73
73
  requirement: !ruby/object:Gem::Requirement
@@ -86,16 +86,16 @@ dependencies:
86
86
  name: yard
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - "~>"
89
+ - - ">="
90
90
  - !ruby/object:Gem::Version
91
- version: 0.8.2
91
+ version: '0'
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - "~>"
96
+ - - ">="
97
97
  - !ruby/object:Gem::Version
98
- version: 0.8.2
98
+ version: '0'
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: json
101
101
  requirement: !ruby/object:Gem::Requirement
@@ -134,8 +134,10 @@ files:
134
134
  - bench/pack.rb
135
135
  - bench/pack_log.rb
136
136
  - bench/pack_log_long.rb
137
+ - bench/pack_symbols.rb
137
138
  - bench/run.sh
138
139
  - bench/run_long.sh
140
+ - bench/run_symbols.sh
139
141
  - bench/unpack.rb
140
142
  - bench/unpack_log.rb
141
143
  - bench/unpack_log_long.rb
@@ -146,6 +148,8 @@ files:
146
148
  - doclib/msgpack/extension_value.rb
147
149
  - doclib/msgpack/factory.rb
148
150
  - doclib/msgpack/packer.rb
151
+ - doclib/msgpack/time.rb
152
+ - doclib/msgpack/timestamp.rb
149
153
  - doclib/msgpack/unpacker.rb
150
154
  - ext/java/org/msgpack/jruby/Buffer.java
151
155
  - ext/java/org/msgpack/jruby/Decoder.java
@@ -162,8 +166,6 @@ files:
162
166
  - ext/msgpack/buffer_class.c
163
167
  - ext/msgpack/buffer_class.h
164
168
  - ext/msgpack/compat.h
165
- - ext/msgpack/core_ext.c
166
- - ext/msgpack/core_ext.h
167
169
  - ext/msgpack/extconf.rb
168
170
  - ext/msgpack/extension_value_class.c
169
171
  - ext/msgpack/extension_value_class.h
@@ -188,8 +190,12 @@ files:
188
190
  - ext/msgpack/unpacker_ext_registry.c
189
191
  - ext/msgpack/unpacker_ext_registry.h
190
192
  - lib/msgpack.rb
193
+ - lib/msgpack/core_ext.rb
191
194
  - lib/msgpack/factory.rb
192
195
  - lib/msgpack/packer.rb
196
+ - lib/msgpack/symbol.rb
197
+ - lib/msgpack/time.rb
198
+ - lib/msgpack/timestamp.rb
193
199
  - lib/msgpack/unpacker.rb
194
200
  - lib/msgpack/version.rb
195
201
  - msgpack.gemspec
@@ -215,6 +221,7 @@ files:
215
221
  - spec/packer_spec.rb
216
222
  - spec/random_compat.rb
217
223
  - spec/spec_helper.rb
224
+ - spec/timestamp_spec.rb
218
225
  - spec/unpack_spec.rb
219
226
  - spec/unpacker_spec.rb
220
227
  homepage: http://msgpack.org/
@@ -236,8 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
236
243
  - !ruby/object:Gem::Version
237
244
  version: '0'
238
245
  requirements: []
239
- rubyforge_project: msgpack
240
- rubygems_version: 2.5.1
246
+ rubygems_version: 3.1.2
241
247
  signing_key:
242
248
  specification_version: 4
243
249
  summary: MessagePack, a binary-based efficient data interchange format.
@@ -263,6 +269,6 @@ test_files:
263
269
  - spec/packer_spec.rb
264
270
  - spec/random_compat.rb
265
271
  - spec/spec_helper.rb
272
+ - spec/timestamp_spec.rb
266
273
  - spec/unpack_spec.rb
267
274
  - spec/unpacker_spec.rb
268
- has_rdoc: false