msgpack 0.6.0-x86-mswin32-60

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.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.travis.yml +26 -0
  4. data/ChangeLog +129 -0
  5. data/Dockerfile +62 -0
  6. data/LICENSE +177 -0
  7. data/README.rdoc +141 -0
  8. data/Rakefile +68 -0
  9. data/bench/pack.rb +23 -0
  10. data/bench/pack_log.rb +33 -0
  11. data/bench/pack_log_long.rb +65 -0
  12. data/bench/run.sh +14 -0
  13. data/bench/run_long.sh +35 -0
  14. data/bench/unpack.rb +21 -0
  15. data/bench/unpack_log.rb +34 -0
  16. data/bench/unpack_log_long.rb +67 -0
  17. data/doclib/msgpack.rb +77 -0
  18. data/doclib/msgpack/buffer.rb +193 -0
  19. data/doclib/msgpack/core_ext.rb +101 -0
  20. data/doclib/msgpack/error.rb +14 -0
  21. data/doclib/msgpack/packer.rb +134 -0
  22. data/doclib/msgpack/unpacker.rb +146 -0
  23. data/ext/java/org/msgpack/jruby/Buffer.java +221 -0
  24. data/ext/java/org/msgpack/jruby/Decoder.java +201 -0
  25. data/ext/java/org/msgpack/jruby/Encoder.java +308 -0
  26. data/ext/java/org/msgpack/jruby/ExtensionValue.java +136 -0
  27. data/ext/java/org/msgpack/jruby/MessagePackLibrary.java +107 -0
  28. data/ext/java/org/msgpack/jruby/Packer.java +78 -0
  29. data/ext/java/org/msgpack/jruby/Types.java +37 -0
  30. data/ext/java/org/msgpack/jruby/Unpacker.java +170 -0
  31. data/ext/msgpack/buffer.c +695 -0
  32. data/ext/msgpack/buffer.h +447 -0
  33. data/ext/msgpack/buffer_class.c +507 -0
  34. data/ext/msgpack/buffer_class.h +32 -0
  35. data/ext/msgpack/compat.h +114 -0
  36. data/ext/msgpack/core_ext.c +129 -0
  37. data/ext/msgpack/core_ext.h +26 -0
  38. data/ext/msgpack/extconf.rb +30 -0
  39. data/ext/msgpack/packer.c +168 -0
  40. data/ext/msgpack/packer.h +441 -0
  41. data/ext/msgpack/packer_class.c +302 -0
  42. data/ext/msgpack/packer_class.h +30 -0
  43. data/ext/msgpack/rbinit.c +33 -0
  44. data/ext/msgpack/rmem.c +94 -0
  45. data/ext/msgpack/rmem.h +109 -0
  46. data/ext/msgpack/sysdep.h +115 -0
  47. data/ext/msgpack/sysdep_endian.h +50 -0
  48. data/ext/msgpack/sysdep_types.h +46 -0
  49. data/ext/msgpack/unpacker.c +771 -0
  50. data/ext/msgpack/unpacker.h +122 -0
  51. data/ext/msgpack/unpacker_class.c +405 -0
  52. data/ext/msgpack/unpacker_class.h +32 -0
  53. data/lib/msgpack.rb +13 -0
  54. data/lib/msgpack/version.rb +3 -0
  55. data/msgpack.gemspec +31 -0
  56. data/msgpack.org.md +46 -0
  57. data/spec/cases.json +1 -0
  58. data/spec/cases.msg +0 -0
  59. data/spec/cases_compact.msg +0 -0
  60. data/spec/cases_spec.rb +39 -0
  61. data/spec/cruby/buffer_io_spec.rb +256 -0
  62. data/spec/cruby/buffer_packer.rb +29 -0
  63. data/spec/cruby/buffer_spec.rb +572 -0
  64. data/spec/cruby/buffer_unpacker.rb +19 -0
  65. data/spec/cruby/packer_spec.rb +120 -0
  66. data/spec/cruby/unpacker_spec.rb +305 -0
  67. data/spec/format_spec.rb +282 -0
  68. data/spec/jruby/benchmarks/shootout_bm.rb +73 -0
  69. data/spec/jruby/benchmarks/symbolize_keys_bm.rb +25 -0
  70. data/spec/jruby/msgpack/unpacker_spec.rb +290 -0
  71. data/spec/jruby/msgpack_spec.rb +142 -0
  72. data/spec/pack_spec.rb +67 -0
  73. data/spec/random_compat.rb +24 -0
  74. data/spec/spec_helper.rb +27 -0
  75. data/spec/unpack_spec.rb +60 -0
  76. metadata +208 -0
@@ -0,0 +1,32 @@
1
+ /*
2
+ * MessagePack for Ruby
3
+ *
4
+ * Copyright (C) 2008-2013 Sadayuki Furuhashi
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+ #ifndef MSGPACK_RUBY_UNPACKER_CLASS_H__
19
+ #define MSGPACK_RUBY_UNPACKER_CLASS_H__
20
+
21
+ #include "unpacker.h"
22
+
23
+ extern VALUE cMessagePack_Unpacker;
24
+
25
+ void MessagePack_Unpacker_module_init(VALUE mMessagePack);
26
+
27
+ VALUE MessagePack_unpack(int argc, VALUE* argv);
28
+
29
+ void MessagePack_Unpacker_initialize(msgpack_unpacker_t* uk, VALUE io, VALUE options);
30
+
31
+ #endif
32
+
@@ -0,0 +1,13 @@
1
+ require "msgpack/version"
2
+
3
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby" # This is same with `/java/ =~ RUBY_VERSION`
4
+ require "java"
5
+ require "msgpack/msgpack.jar"
6
+ org.msgpack.jruby.MessagePackLibrary.new.load(JRuby.runtime, false)
7
+ else
8
+ begin
9
+ require "msgpack/#{RUBY_VERSION[/\d+.\d+/]}/msgpack"
10
+ rescue LoadError
11
+ require "msgpack/msgpack"
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module MessagePack
2
+ VERSION = "0.6.0"
3
+ end
@@ -0,0 +1,31 @@
1
+ $LOAD_PATH.push File.expand_path("../lib", __FILE__)
2
+ require 'msgpack/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "msgpack"
6
+ s.version = MessagePack::VERSION
7
+ s.summary = "MessagePack, a binary-based efficient data interchange format."
8
+ s.description = %q{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.}
9
+ s.authors = ["Sadayuki Furuhashi", "Theo Hultberg"]
10
+ s.email = ["frsyuki@gmail.com", "theo@iconara.net"]
11
+ s.license = "Apache 2.0"
12
+ s.homepage = "http://msgpack.org/"
13
+ s.rubyforge_project = "msgpack"
14
+ s.has_rdoc = false
15
+ s.require_paths = ["lib"]
16
+ if /java/ =~ RUBY_PLATFORM
17
+ s.files = Dir['lib/**/*.rb', 'lib/**/*.jar']
18
+ s.platform = Gem::Platform.new('java')
19
+ else
20
+ s.files = `git ls-files`.split("\n")
21
+ s.extensions = ["ext/msgpack/extconf.rb"]
22
+ end
23
+ s.test_files = `git ls-files -- {test,spec}/*`.split("\n")
24
+
25
+ s.add_development_dependency 'bundler', ['~> 1.0']
26
+ s.add_development_dependency 'rake', ['~> 0.9.2']
27
+ s.add_development_dependency 'rake-compiler', ['~> 0.8.3']
28
+ s.add_development_dependency 'rspec', ['~> 2.11']
29
+ s.add_development_dependency 'json', ['~> 1.7']
30
+ s.add_development_dependency 'yard', ['~> 0.8.2']
31
+ end
@@ -0,0 +1,46 @@
1
+ # MessagePack for Ruby
2
+
3
+ ```
4
+ require 'msgpack'
5
+ msg = [1,2,3].to_msgpack #=> "\x93\x01\x02\x03"
6
+ MessagePack.unpack(msg) #=> [1,2,3]
7
+ ```
8
+
9
+ ## Install
10
+
11
+ ```
12
+ gem install msgpack
13
+ ```
14
+
15
+ ## Use cases
16
+
17
+ * Create REST API returing MessagePack using Rails + [RABL](https://github.com/nesquena/rabl)
18
+ * Store objects efficiently in memcached or Redis
19
+ * Upload data in efficient format from mobile devices. See also MessagePack for [Objective-C](https://github.com/msgpack/msgpack-objectivec) and [Java](https://github.com/msgpack/msgpack-java)
20
+
21
+ ## Links
22
+
23
+ * [Github](https://github.com/msgpack/msgpack-ruby)
24
+ * [API document](http://ruby.msgpack.org/)
25
+
26
+ ## Streaming API
27
+
28
+ ```
29
+ # serialize a 2-element array [e1, e2]
30
+ pk = MessagePack::Packer.new(io)
31
+ pk.write_array_header(2).write(e1).write(e2).flush
32
+ ```
33
+
34
+ ```
35
+ # deserialize objects from an IO
36
+ u = MessagePack::Unpacker.new(io)
37
+ u.each { |obj| ... }
38
+ ```
39
+
40
+ ```
41
+ # event-driven deserialization
42
+ def on_read(data)
43
+ @u ||= MessagePack::Unpacker.new
44
+ @u.feed_each(data) { |obj| ... }
45
+ end
46
+ ```
@@ -0,0 +1 @@
1
+ [false,true,null,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,127,127,255,65535,4294967295,-32,-32,-128,-32768,-2147483648,0.0,-0.0,1.0,-1.0,"a","a","a","","","",[0],[0],[0],[],[],[],{},{},{},{"a":97},{"a":97},{"a":97},[[]],[["a"]]]
Binary file
Binary file
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+
4
+ describe MessagePack do
5
+ here = File.dirname(__FILE__)
6
+ CASES = File.read("#{here}/cases.msg")
7
+ CASES_JSON = File.read("#{here}/cases.json")
8
+ CASES_COMPACT = File.read("#{here}/cases_compact.msg")
9
+
10
+ it 'compare with json' do
11
+ ms = []
12
+ MessagePack::Unpacker.new.feed_each(CASES) {|m|
13
+ ms << m
14
+ }
15
+
16
+ js = JSON.load(CASES_JSON)
17
+
18
+ ms.zip(js) {|m,j|
19
+ m.should == j
20
+ }
21
+ end
22
+
23
+ it 'compare with compat' do
24
+ ms = []
25
+ MessagePack::Unpacker.new.feed_each(CASES) {|m|
26
+ ms << m
27
+ }
28
+
29
+ cs = []
30
+ MessagePack::Unpacker.new.feed_each(CASES_COMPACT) {|c|
31
+ cs << c
32
+ }
33
+
34
+ ms.zip(cs) {|m,c|
35
+ m.should == c
36
+ }
37
+ end
38
+ end
39
+
@@ -0,0 +1,256 @@
1
+ require 'spec_helper'
2
+ require 'random_compat'
3
+
4
+ require 'stringio'
5
+ if defined?(Encoding)
6
+ Encoding.default_external = 'ASCII-8BIT'
7
+ end
8
+
9
+ describe Buffer do
10
+ r = Random.new
11
+ random_seed = r.seed
12
+ puts "buffer_io random seed: 0x#{random_seed.to_s(16)}"
13
+
14
+ let :source do
15
+ ''
16
+ end
17
+
18
+ def set_source(s)
19
+ source.replace(s)
20
+ end
21
+
22
+ let :io do
23
+ StringIO.new(source.dup)
24
+ end
25
+
26
+ let :buffer do
27
+ Buffer.new(io)
28
+ end
29
+
30
+ it 'io returns internal io' do
31
+ buffer.io.should == io
32
+ end
33
+
34
+ it 'close closes internal io' do
35
+ io.should_receive(:close)
36
+ buffer.close
37
+ end
38
+
39
+ it 'short feed and read all' do
40
+ set_source 'aa'
41
+ buffer.read.should == 'aa'
42
+ end
43
+
44
+ it 'short feed and read short' do
45
+ set_source 'aa'
46
+ buffer.read(1).should == 'a'
47
+ buffer.read(1).should == 'a'
48
+ buffer.read(1).should == nil
49
+ end
50
+
51
+ it 'long feed and read all' do
52
+ set_source ' '*(1024*1024)
53
+ s = buffer.read
54
+ s.size.should == source.size
55
+ s.should == source
56
+ end
57
+
58
+ it 'long feed and read mixed' do
59
+ set_source ' '*(1024*1024)
60
+ buffer.read(10).should == source.slice!(0, 10)
61
+ buffer.read(10).should == source.slice!(0, 10)
62
+ buffer.read(10).should == source.slice!(0, 10)
63
+ s = buffer.read
64
+ s.size.should == source.size
65
+ s.should == source
66
+ end
67
+
68
+ it 'eof' do
69
+ set_source ''
70
+ buffer.read.should == ''
71
+ end
72
+
73
+ it 'eof 2' do
74
+ set_source 'a'
75
+ buffer.read.should == 'a'
76
+ buffer.read.should == ''
77
+ end
78
+
79
+ it 'write short once and flush' do
80
+ buffer.write('aa')
81
+ buffer.flush
82
+ io.string.should == 'aa'
83
+ end
84
+
85
+ it 'write short twice and flush' do
86
+ buffer.write('a')
87
+ buffer.write('a')
88
+ buffer.flush
89
+ io.string.should == 'aa'
90
+ end
91
+
92
+ it 'write long once and flush' do
93
+ s = ' '*(1024*1024)
94
+ buffer.write s
95
+ buffer.flush
96
+ io.string.size.should == s.size
97
+ io.string.should == s
98
+ end
99
+
100
+ it 'write short multi and flush' do
101
+ s = ' '*(1024*1024)
102
+ 1024.times {
103
+ buffer.write ' '*1024
104
+ }
105
+ buffer.flush
106
+ io.string.size.should == s.size
107
+ io.string.should == s
108
+ end
109
+
110
+ it 'random read' do
111
+ r = Random.new(random_seed)
112
+
113
+ 50.times {
114
+ fragments = []
115
+
116
+ r.rand(4).times do
117
+ n = r.rand(1024*1400)
118
+ s = r.bytes(n)
119
+ fragments << s
120
+ end
121
+
122
+ io = StringIO.new(fragments.join)
123
+ b = Buffer.new(io)
124
+
125
+ fragments.each {|s|
126
+ x = b.read(s.size)
127
+ x.size.should == s.size
128
+ x.should == s
129
+ }
130
+ b.empty?.should == true
131
+ b.read.should == ''
132
+ }
133
+ end
134
+
135
+ it 'random read_all' do
136
+ r = Random.new(random_seed)
137
+
138
+ 50.times {
139
+ fragments = []
140
+ sx = r.bytes(0)
141
+
142
+ r.rand(4).times do
143
+ n = r.rand(1024*1400)
144
+ s = r.bytes(n)
145
+ fragments << s
146
+ end
147
+
148
+ io = StringIO.new(fragments.join)
149
+ b = Buffer.new(io)
150
+
151
+ fragments.each {|s|
152
+ x = b.read_all(s.size)
153
+ x.size.should == s.size
154
+ x.should == s
155
+ }
156
+ b.empty?.should == true
157
+ lambda {
158
+ b.read_all(1)
159
+ }.should raise_error(EOFError)
160
+ }
161
+ end
162
+
163
+ it 'random skip' do
164
+ r = Random.new(random_seed)
165
+
166
+ 50.times {
167
+ fragments = []
168
+
169
+ r.rand(4).times do
170
+ n = r.rand(1024*1400)
171
+ s = r.bytes(n)
172
+ fragments << s
173
+ end
174
+
175
+ io = StringIO.new(fragments.join)
176
+ b = Buffer.new(io)
177
+
178
+ fragments.each {|s|
179
+ b.skip(s.size).should == s.size
180
+ }
181
+ b.empty?.should == true
182
+ b.skip(1).should == 0
183
+ }
184
+ end
185
+
186
+ it 'random skip_all' do
187
+ r = Random.new(random_seed)
188
+
189
+ 50.times {
190
+ fragments = []
191
+
192
+ r.rand(4).times do
193
+ n = r.rand(1024*1400)
194
+ s = r.bytes(n)
195
+ fragments << s
196
+ end
197
+
198
+ io = StringIO.new(fragments.join)
199
+ b = Buffer.new(io)
200
+
201
+ fragments.each {|s|
202
+ lambda {
203
+ b.skip_all(s.size)
204
+ }.should_not raise_error
205
+ }
206
+ b.empty?.should == true
207
+ lambda {
208
+ b.skip_all(1)
209
+ }.should raise_error(EOFError)
210
+ }
211
+ end
212
+
213
+ it 'random write and flush' do
214
+ r = Random.new(random_seed)
215
+
216
+ 50.times {
217
+ s = r.bytes(0)
218
+ io = StringIO.new
219
+ b = Buffer.new(io)
220
+
221
+ r.rand(4).times do
222
+ n = r.rand(1024*1400)
223
+ x = r.bytes(n)
224
+ s << x
225
+ b.write(x)
226
+ end
227
+
228
+ (io.string.size + b.size).should == s.size
229
+
230
+ b.flush
231
+
232
+ io.string.size.should == s.size
233
+ io.string.should == s
234
+ }
235
+ end
236
+
237
+ it 'random write and clear' do
238
+ r = Random.new(random_seed)
239
+ b = Buffer.new
240
+
241
+ 50.times {
242
+ s = r.bytes(0)
243
+
244
+ r.rand(4).times do
245
+ n = r.rand(1024*1400)
246
+ x = r.bytes(n)
247
+ s << x
248
+ b.write(x)
249
+ end
250
+
251
+ b.size.should == s.size
252
+ b.clear
253
+ }
254
+ end
255
+ end
256
+
@@ -0,0 +1,29 @@
1
+ # encoding: ascii-8bit
2
+ require 'spec_helper'
3
+
4
+ require 'stringio'
5
+ if defined?(Encoding)
6
+ Encoding.default_external = 'ASCII-8BIT'
7
+ end
8
+
9
+ describe Packer do
10
+ let :packer do
11
+ Packer.new
12
+ end
13
+
14
+ it 'initialize' do
15
+ Packer.new
16
+ Packer.new(nil)
17
+ Packer.new(StringIO.new)
18
+ Packer.new({})
19
+ Packer.new(StringIO.new, {})
20
+ end
21
+
22
+ it 'buffer' do
23
+ o1 = packer.buffer.object_id
24
+ packer.buffer << 'frsyuki'
25
+ packer.buffer.to_s.should == 'frsyuki'
26
+ packer.buffer.object_id.should == o1
27
+ end
28
+ end
29
+