msgpack 0.6.0pre1-x86-mingw32 → 0.6.2-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b8cb2059cf2c97ba89464da38b62e22bcdcf68e
4
- data.tar.gz: c12418e80eac7d2a7a6a501abe1cb7cc4a168fa5
3
+ metadata.gz: 5fd095586970361584978a13c2269d853d6a4b86
4
+ data.tar.gz: 844b93498126a50c8e6cb83d0a9558723f59b42d
5
5
  SHA512:
6
- metadata.gz: 2899ded84deadd0e46365efaa7464cd6a5ee7fd8a92362eeaa60db9f360ccdaba58d59d6f1682d1e050dc010b7380e33ac470943a3c4c276437e48440e4079d7
7
- data.tar.gz: 3c46b4d61e045a6a2ccd52415152b32d8f29460f90d279f5edb5a6c86f7a1f9c890c19ab71a1f20642aa8743d0278d63e79f119e4f7f1ab2f80d2922cb308bbe
6
+ metadata.gz: 509af082162d7dd14f84dcf89ddc81753d55a09fbc3880ef655c4165c8a0fcd5f8f587207ce17fad3ac1d50f2dc45bb09f155375515555e74c4062c3819e6d14
7
+ data.tar.gz: fefba2952da3f9d658f0f665f89f65acacea62cfcb95873e5e9086e4c30286a9855c2eabaa3e5f776e9096812c05c30b53ce2300a092647c00224060bd30404c
data/ChangeLog CHANGED
@@ -1,3 +1,25 @@
1
+ 2015-07-22 version 0.6.2:
2
+
3
+ * Fix release workflow: Ruby 2.1 and 2.2 are supported for Windows (2.0 is omitted)
4
+ * Fix to encode symbols along its encoding
5
+ * Fix segmentation fault in minor case
6
+
7
+ 2015-07-01 version 0.6.1:
8
+
9
+ * Added :compatibility_mode option to Packer#initialize. Default is false. If it
10
+ is set to true, str8 format and bin format family will not be used.
11
+
12
+ 2015-05-26 version 0.6.0:
13
+
14
+ * Added support for Binary types
15
+ * Fixed to encode/decode between Binary types and ASCII-8BIT Ruby String objects
16
+
17
+ 2015-05-21 version 0.5.12:
18
+
19
+ * Added support for JRuby 9K.
20
+ * Added a benchmarking suite.
21
+ * Fixed a bug in the handling of options given to MessagePack.unpack in JRuby.
22
+
1
23
 
2
24
  2015-02-04 version 0.5.11:
3
25
 
data/Dockerfile CHANGED
@@ -2,23 +2,48 @@ FROM ubuntu:14.04
2
2
  MAINTAINER TAGOMORI Satoshi <tagomoris@gmail.com>
3
3
  LABEL Description="Host image to cross-compile msgpack.gem for mingw32" Vendor="MessagePack Organization" Version="1.0"
4
4
 
5
+ RUN apt-get update -y && apt-get install -y \
6
+ git \
7
+ curl \
8
+ autoconf \
9
+ bison \
10
+ build-essential \
11
+ libssl-dev \
12
+ libyaml-dev \
13
+ libreadline6-dev \
14
+ zlib1g-dev \
15
+ libncurses5-dev \
16
+ libffi-dev \
17
+ libgdbm3 \
18
+ libgdbm-dev \
19
+ mingw-w64 \
20
+ gcc-mingw-w64-i686 \
21
+ gcc-mingw-w64-x86-64 \
22
+ && rm -rf /var/lib/apt/lists/*
23
+
24
+ RUN useradd ubuntu -d /home/ubuntu -m -U
25
+ RUN chown -R ubuntu:ubuntu /home/ubuntu
26
+
5
27
  USER ubuntu
6
28
 
7
- RUN apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
8
- RUN apt-get install gcc-mingw32 mingw-w64
9
- # RUN git?
10
- RUN git clone https://github.com/tagomoris/xbuild.git /home/ubuntu/.xbuild
11
- RUN /home/ubuntu/.xbuild/ruby-install 2.2.2 /home/ubuntu/local/ruby-2.2
12
- RUN PATH=/home/ubuntu/local/ruby-2.2/bin:$PATH /home/ubuntu/local/ruby-2.2/bin/gem install rake-compiler
13
- RUN PATH=/home/ubuntu/local/ruby-2.2/bin:$PATH rake-compiler cross-ruby VERSION=2.2.2 EXTS=--without-extensions
14
- RUN /home/ubuntu/.xbuild/ruby-install 2.1.5 /home/ubuntu/local/ruby-2.1
15
- RUN PATH=/home/ubuntu/local/ruby-2.1/bin:$PATH /home/ubuntu/local/ruby-2.1/bin/gem install rake-compiler
16
- RUN PATH=/home/ubuntu/local/ruby-2.1/bin:$PATH rake-compiler cross-ruby VERSION=2.1.5 EXTS=--without-extensions
17
- RUN /home/ubuntu/.xbuild/ruby-install 2.0.0-p643 /home/ubuntu/local/ruby-2.0
18
- RUN PATH=/home/ubuntu/local/ruby-2.0/bin:$PATH /home/ubuntu/local/ruby-2.0/bin/gem install rake-compiler
19
- RUN PATH=/home/ubuntu/local/ruby-2.0/bin:$PATH rake-compiler cross-ruby VERSION=2.0.0-p643 EXTS=--without-extensions
20
-
21
- RUN git clone https://github.com/msgpack/msgpack-ruby.git /home/ubuntu/msgpack-ruby
29
+ WORKDIR /home/ubuntu
30
+
31
+ RUN git clone https://github.com/tagomoris/xbuild.git
32
+ RUN git clone https://github.com/msgpack/msgpack-ruby.git
33
+
34
+ RUN /home/ubuntu/xbuild/ruby-install 2.1.5 /home/ubuntu/local/ruby-2.1
35
+
36
+ ENV PATH /home/ubuntu/local/ruby-2.1/bin:$PATH
37
+ RUN gem install rake-compiler
38
+ RUN rake-compiler cross-ruby VERSION=2.1.5 HOST=i686-w64-mingw32 EXTS=--without-extensions
39
+ RUN rake-compiler cross-ruby VERSION=2.1.5 HOST=x86_64-w64-mingw32 EXTS=--without-extensions
40
+
41
+ RUN /home/ubuntu/xbuild/ruby-install 2.2.2 /home/ubuntu/local/ruby-2.2
42
+
43
+ ENV PATH /home/ubuntu/local/ruby-2.2/bin:$PATH
44
+ RUN gem install rake-compiler
45
+ RUN rake-compiler cross-ruby VERSION=2.2.2 HOST=i686-w64-mingw32 EXTS=--without-extensions
46
+ RUN rake-compiler cross-ruby VERSION=2.2.2 HOST=x86_64-w64-mingw32 EXTS=--without-extensions
22
47
 
23
48
  WORKDIR /home/ubuntu/msgpack-ruby
24
49
 
@@ -26,5 +51,5 @@ ENV MSGPACK_REPO https://github.com/msgpack/msgpack-ruby.git
26
51
  ENV BUILD_BRANCH master
27
52
  ENV BUILD_POSITION HEAD
28
53
 
29
- ENTRYPOINT ["/home/ubuntu/msgpack-ruby/cross-build.sh", "/home/ubuntu/local/ruby-2.2", "2.0.0-p643:2.1.5:2.2.2"]
30
-
54
+ ### docker run -v `pwd`/pkg:/home/ubuntu/msgpack-ruby/pkg IMAGENAME
55
+ CMD ["bash", "-c", "git remote add dockerbuild $MSGPACK_REPO && git fetch dockerbuild && git checkout $BUILD_BRANCH && git pull dockerbuild $BUILD_BRANCH && git reset --hard $BUILD_POSITION && bundle && rake clean && rake cross native gem RUBY_CC_VERSION=2.1.5:2.2.2"]
@@ -121,6 +121,18 @@ Then, you can run the tasks as follows:
121
121
 
122
122
  bundle exec rake doc
123
123
 
124
+ == How to build -mingw32 rubygems
125
+
126
+ MessagePack mingw32/64 rubygems build process uses {Docker}[https://docs.docker.com/].
127
+
128
+ Set up docker environment at first, and then run docker container to build gems, with shared directory "pkg".
129
+
130
+ docker run -it --rm -v `pwd`/pkg:/home/ubuntu/msgpack-ruby/pkg msgpack/msgpack-rubygem-crosscompile
131
+
132
+ Once this step successes, target gems exist in pkg/msgpack-*-{x86,x64}-mingw32.gem.
133
+
134
+ See also: https://registry.hub.docker.com/u/msgpack/msgpack-rubygem-crosscompile/
135
+
124
136
  = Copyright
125
137
 
126
138
  Author:: Sadayuki Furuhashi <frsyuki@gmail.com>
data/Rakefile CHANGED
@@ -52,8 +52,7 @@ else
52
52
  ext.ext_dir = 'ext/msgpack'
53
53
  ext.cross_compile = true
54
54
  ext.lib_dir = File.join(*['lib', 'msgpack', ENV['FAT_DIR']].compact)
55
- ext.config_options << '--with-out-ext=fiddle'
56
- #ext.cross_platform = 'i386-mswin32'
55
+ ext.cross_platform = ['x86-mingw32', 'x64-mingw32']
57
56
  end
58
57
 
59
58
  RSpec::Core::RakeTask.new(:spec) do |t|
@@ -67,49 +66,3 @@ end
67
66
  CLEAN.include('lib/msgpack/msgpack.*')
68
67
 
69
68
  task :default => [:spec, :build, :doc]
70
-
71
-
72
- ###
73
- ## Cross compile memo
74
- ##
75
- ## Ubuntu Ubuntu 10.04.1 LTS
76
- ##
77
- #
78
- ### install mingw32 cross compiler with w64 support
79
- # sudo apt-get install gcc-mingw32
80
- # sudo apt-get install mingw-w64
81
- #
82
- ### install rbenv
83
- # git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
84
- # echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
85
- # echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
86
- # exec $SHELL -l
87
- #
88
- ### install cross-compiled ruby 2.0.0
89
- # rbenv install 2.0.0-p247
90
- # rbenv shell 2.0.0-p247
91
- # gem update --system
92
- # gem install rake-compiler
93
- # rake-compiler cross-ruby VERSION=2.0.0-p247
94
- #
95
- ### install cross-compiled ruby 1.9.3
96
- # rbenv install 1.9.3-p327
97
- # rbenv shell 1.9.3-p327
98
- # gem update --system
99
- # gem install rake-compiler
100
- # rake-compiler cross-ruby VERSION=1.9.3-p327
101
- #
102
- ### install cross-compiled ruby 1.8.7
103
- # rbenv install 1.8.7-p374
104
- # rbenv shell 1.8.7-p374
105
- # gem update --system
106
- # gem install rake-compiler
107
- # rake-compiler cross-ruby VERSION=1.8.7-p374
108
- #
109
- ### build gem
110
- # rbenv shell 1.8.7-p374
111
- # gem install bundler
112
- # bundle
113
- # rake cross native gem RUBY_CC_VERSION=1.8.7:1.9.3:2.0.0
114
- #
115
-
@@ -17,7 +17,11 @@ module MessagePack
17
17
  # This packer writes serialzied objects into the IO when the internal buffer is filled.
18
18
  # _io_ must respond to write(string) or append(string) method.
19
19
  #
20
- # See also Buffer#initialize for options.
20
+ # Supported options:
21
+ #
22
+ # * *:compatibility_mode* serialize in older versions way, without str8 and bin types
23
+ #
24
+ # See also Buffer#initialize for other options.
21
25
  #
22
26
  def initialize(*args)
23
27
  end
@@ -21,7 +21,6 @@ import org.jcodings.Encoding;
21
21
 
22
22
  @JRubyClass(name="MessagePack::Buffer")
23
23
  public class Buffer extends RubyObject {
24
- private RubyHash options;
25
24
  private IRubyObject io;
26
25
  private ByteBuffer buffer;
27
26
  private boolean writeMode;
@@ -46,9 +45,6 @@ public class Buffer extends RubyObject {
46
45
  if (args[0].respondsTo("read") && args[0].respondsTo("write")) {
47
46
  this.io = args[0];
48
47
  }
49
- if (args[args.length - 1] instanceof RubyHash) {
50
- this.options = (RubyHash) args[args.length - 1];
51
- }
52
48
  }
53
49
  this.buffer = ByteBuffer.allocate(CACHE_LINE_SIZE - ARRAY_HEADER_SIZE);
54
50
  this.writeMode = true;
@@ -34,14 +34,16 @@ public class Encoder {
34
34
  private final Ruby runtime;
35
35
  private final Encoding binaryEncoding;
36
36
  private final Encoding utf8Encoding;
37
+ private final boolean compatibilityMode;
37
38
 
38
39
  private ByteBuffer buffer;
39
40
 
40
- public Encoder(Ruby runtime) {
41
+ public Encoder(Ruby runtime, boolean compatibilityMode) {
41
42
  this.runtime = runtime;
42
43
  this.buffer = ByteBuffer.allocate(CACHE_LINE_SIZE - ARRAY_HEADER_SIZE);
43
44
  this.binaryEncoding = runtime.getEncodingService().getAscii8bitEncoding();
44
45
  this.utf8Encoding = UTF8Encoding.INSTANCE;
46
+ this.compatibilityMode = compatibilityMode;
45
47
  }
46
48
 
47
49
  private void ensureRemainingCapacity(int c) {
@@ -190,7 +192,7 @@ public class Encoder {
190
192
 
191
193
  private void appendString(RubyString object) {
192
194
  Encoding encoding = object.getEncoding();
193
- boolean binary = encoding == binaryEncoding;
195
+ boolean binary = !compatibilityMode && encoding == binaryEncoding;
194
196
  if (encoding != utf8Encoding && encoding != binaryEncoding) {
195
197
  object = (RubyString) ((RubyString) object).encode(runtime.getCurrentContext(), runtime.getEncodingService().getEncoding(utf8Encoding));
196
198
  }
@@ -199,7 +201,7 @@ public class Encoder {
199
201
  if (length < 32 && !binary) {
200
202
  ensureRemainingCapacity(1 + length);
201
203
  buffer.put((byte) (length | FIXSTR));
202
- } else if (length <= 0xff) {
204
+ } else if (length <= 0xff && !compatibilityMode) {
203
205
  ensureRemainingCapacity(2 + length);
204
206
  buffer.put(binary ? BIN8 : STR8);
205
207
  buffer.put((byte) length);
@@ -32,7 +32,12 @@ public class Packer extends RubyObject {
32
32
 
33
33
  @JRubyMethod(name = "initialize", optional = 2)
34
34
  public IRubyObject initialize(ThreadContext ctx, IRubyObject[] args) {
35
- this.encoder = new Encoder(ctx.getRuntime());
35
+ boolean compatibilityMode = false;
36
+ if (args.length > 0 && args[args.length - 1] instanceof RubyHash) {
37
+ RubyHash options = (RubyHash) args[args.length - 1];
38
+ compatibilityMode = options.fastARef(ctx.getRuntime().newSymbol("compatibility_mode")).isTrue();
39
+ }
40
+ this.encoder = new Encoder(ctx.getRuntime(), compatibilityMode);
36
41
  this.buffer = new Buffer(ctx.getRuntime(), ctx.getRuntime().getModule("MessagePack").getClass("Buffer"));
37
42
  this.buffer.initialize(ctx, args);
38
43
  return this;
@@ -18,6 +18,7 @@
18
18
  #ifndef MSGPACK_RUBY_COMPAT_H__
19
19
  #define MSGPACK_RUBY_COMPAT_H__
20
20
 
21
+ #include <stdbool.h>
21
22
  #include "ruby.h"
22
23
 
23
24
  #if defined(HAVE_RUBY_ST_H)
@@ -7,7 +7,9 @@ have_func("rb_intern_str", ["ruby.h"])
7
7
  have_func("rb_sym2str", ["ruby.h"])
8
8
  have_func("rb_str_intern", ["ruby.h"])
9
9
 
10
- $CFLAGS << %[ -I.. -Wall -O3 -g -std=c99]
10
+ unless RUBY_PLATFORM.include? 'mswin'
11
+ $CFLAGS << %[ -I.. -Wall -O3 -g -std=c99]
12
+ end
11
13
  #$CFLAGS << %[ -DDISABLE_RMEM]
12
14
  #$CFLAGS << %[ -DDISABLE_RMEM_REUSE_INTERNAL_FRAGMENT]
13
15
  #$CFLAGS << %[ -DDISABLE_BUFFER_READ_REFERENCE_OPTIMIZE]
@@ -32,11 +32,15 @@ struct msgpack_packer_t {
32
32
 
33
33
  VALUE io;
34
34
  ID io_write_all_method;
35
+ bool compatibility_mode;
35
36
 
36
37
  ID to_msgpack_method;
37
38
  VALUE to_msgpack_arg;
38
39
 
39
40
  VALUE buffer_ref;
41
+
42
+ /* options */
43
+ bool comaptibility_mode;
40
44
  };
41
45
 
42
46
  #define PACKER_BUFFER_(pk) (&(pk)->buffer)
@@ -66,6 +70,11 @@ static inline void msgpack_packer_set_io(msgpack_packer_t* pk, VALUE io, ID io_w
66
70
 
67
71
  void msgpack_packer_reset(msgpack_packer_t* pk);
68
72
 
73
+ static inline void msgpack_packer_set_compat(msgpack_packer_t* pk, bool enable)
74
+ {
75
+ pk->compatibility_mode = enable;
76
+ }
77
+
69
78
  static inline void msgpack_packer_write_nil(msgpack_packer_t* pk)
70
79
  {
71
80
  msgpack_buffer_ensure_writable(PACKER_BUFFER_(pk), 1);
@@ -270,7 +279,7 @@ static inline void msgpack_packer_write_raw_header(msgpack_packer_t* pk, unsigne
270
279
  msgpack_buffer_ensure_writable(PACKER_BUFFER_(pk), 1);
271
280
  unsigned char h = 0xa0 | (uint8_t) n;
272
281
  msgpack_buffer_write_1(PACKER_BUFFER_(pk), h);
273
- } else if(n < 256) {
282
+ } else if(n < 256 && !pk->compatibility_mode) {
274
283
  msgpack_buffer_ensure_writable(PACKER_BUFFER_(pk), 2);
275
284
  unsigned char be = (uint8_t) n;
276
285
  msgpack_buffer_write_byte_and_data(PACKER_BUFFER_(pk), 0xd9, (const void*)&be, 1);
@@ -288,7 +297,7 @@ static inline void msgpack_packer_write_raw_header(msgpack_packer_t* pk, unsigne
288
297
  static inline void msgpack_packer_write_bin_header(msgpack_packer_t* pk, unsigned int n)
289
298
  {
290
299
  if(n < 256) {
291
- msgpack_buffer_ensure_writable(PACKER_BUFFER_(pk), 1);
300
+ msgpack_buffer_ensure_writable(PACKER_BUFFER_(pk), 2);
292
301
  unsigned char be = (uint8_t) n;
293
302
  msgpack_buffer_write_byte_and_data(PACKER_BUFFER_(pk), 0xc4, (const void*)&be, 1);
294
303
  } else if(n < 65536) {
@@ -358,7 +367,6 @@ static inline bool msgpack_packer_is_utf8_compat_string(VALUE v, int encindex)
358
367
 
359
368
  static inline void msgpack_packer_write_string_value(msgpack_packer_t* pk, VALUE v)
360
369
  {
361
- /* TODO encoding conversion? */
362
370
  /* actual return type of RSTRING_LEN is long */
363
371
  unsigned long len = RSTRING_LEN(v);
364
372
  if(len > 0xffffffffUL) {
@@ -368,13 +376,14 @@ static inline void msgpack_packer_write_string_value(msgpack_packer_t* pk, VALUE
368
376
 
369
377
  #ifdef COMPAT_HAVE_ENCODING
370
378
  int encindex = ENCODING_GET(v);
371
- if(msgpack_packer_is_binary(v, encindex)) {
379
+ if(msgpack_packer_is_binary(v, encindex) && !pk->compatibility_mode) {
372
380
  /* write ASCII-8BIT string using Binary type */
373
381
  msgpack_packer_write_bin_header(pk, (unsigned int)len);
374
382
  msgpack_buffer_append_string(PACKER_BUFFER_(pk), v);
375
383
  } else {
376
384
  /* write UTF-8, US-ASCII, or 7bit-safe ascii-compatible string using String type directly */
377
- if(!msgpack_packer_is_utf8_compat_string(v, encindex)) {
385
+ /* in compatibility mode, packer packs String values as is */
386
+ if(!pk->compatibility_mode && !msgpack_packer_is_utf8_compat_string(v, encindex)) {
378
387
  /* transcode other strings to UTF-8 and write using String type */
379
388
  VALUE enc = rb_enc_from_encoding(rb_utf8_encoding()); /* rb_enc_from_encoding_index is not extern */
380
389
  v = rb_str_encode(v, enc, 0, Qnil);
@@ -395,15 +404,11 @@ static inline void msgpack_packer_write_symbol_value(msgpack_packer_t* pk, VALUE
395
404
  /* rb_sym2str is added since MRI 2.2.0 */
396
405
  msgpack_packer_write_string_value(pk, rb_sym2str(v));
397
406
  #else
398
- const char* name = rb_id2name(SYM2ID(v));
399
- unsigned long len = strlen(name);
400
- /* actual return type of strlen is size_t */
401
- if(len > 0xffffffffUL) {
402
- // TODO rb_eArgError?
403
- rb_raise(rb_eArgError, "size of symbol is too long to pack: %lu bytes should be <= %lu", len, 0xffffffffUL);
407
+ VALUE str = rb_id2str(SYM2ID(v));
408
+ if (!str) {
409
+ rb_raise(rb_eRuntimeError, "could not convert a symbol to string");
404
410
  }
405
- msgpack_packer_write_raw_header(pk, (unsigned int)len);
406
- msgpack_buffer_append(PACKER_BUFFER_(pk), name, len);
411
+ msgpack_packer_write_string_value(pk, str);
407
412
  #endif
408
413
  }
409
414
 
@@ -87,13 +87,24 @@ static VALUE Packer_initialize(int argc, VALUE* argv, VALUE self)
87
87
  }
88
88
 
89
89
  PACKER(self, pk);
90
- MessagePack_Buffer_initialize(PACKER_BUFFER_(pk), io, options);
91
90
 
92
- // TODO MessagePack_Unpacker_initialize and options
91
+ MessagePack_Packer_initialize(pk, io, options);
93
92
 
94
93
  return self;
95
94
  }
96
95
 
96
+ void MessagePack_Packer_initialize(msgpack_packer_t* pk, VALUE io, VALUE options)
97
+ {
98
+ MessagePack_Buffer_initialize(PACKER_BUFFER_(pk), io, options);
99
+
100
+ if(options != Qnil) {
101
+ VALUE v;
102
+
103
+ v = rb_hash_aref(options, ID2SYM(rb_intern("compatibility_mode")));
104
+ msgpack_packer_set_compat(pk, RTEST(v));
105
+ }
106
+ }
107
+
97
108
  static VALUE Packer_buffer(VALUE self)
98
109
  {
99
110
  PACKER(self, pk);
@@ -221,11 +232,15 @@ VALUE MessagePack_pack(int argc, VALUE* argv)
221
232
 
222
233
  VALUE self = Packer_alloc(cMessagePack_Packer);
223
234
  PACKER(self, pk);
235
+
236
+ if (options != Qnil) {
237
+ pk->compatibility_mode = RTEST(rb_hash_aref(options, ID2SYM(rb_intern("compatibility_mode"))));
238
+ }
239
+
224
240
  //msgpack_packer_reset(s_packer);
225
241
  //msgpack_buffer_reset_io(PACKER_BUFFER_(s_packer));
226
242
 
227
- MessagePack_Buffer_initialize(PACKER_BUFFER_(pk), io, options);
228
- // TODO MessagePack_Unpacker_initialize and options
243
+ MessagePack_Packer_initialize(pk, io, options);
229
244
 
230
245
  msgpack_packer_write_value(pk, v);
231
246
 
@@ -26,5 +26,7 @@ void MessagePack_Packer_module_init(VALUE mMessagePack);
26
26
 
27
27
  VALUE MessagePack_pack(int argc, VALUE* argv);
28
28
 
29
+ void MessagePack_Packer_initialize(msgpack_packer_t* pk, VALUE io, VALUE options);
30
+
29
31
  #endif
30
32
 
@@ -1,3 +1,3 @@
1
1
  module MessagePack
2
- VERSION = "0.6.0pre1"
2
+ VERSION = "0.6.2"
3
3
  end
@@ -116,5 +116,23 @@ describe Packer do
116
116
  CustomPack02.new.to_msgpack(s04)
117
117
  s04.string.should == [1,2].to_msgpack
118
118
  end
119
+
120
+ context 'in compatibility mode' do
121
+ it 'does not use the bin types' do
122
+ packed = MessagePack.pack('hello'.force_encoding(Encoding::BINARY), compatibility_mode: true)
123
+ packed.should eq("\xA5hello")
124
+ packed = MessagePack.pack(('hello' * 100).force_encoding(Encoding::BINARY), compatibility_mode: true)
125
+ packed.should start_with("\xDA\x01\xF4")
126
+
127
+ packer = MessagePack::Packer.new(compatibility_mode: 1)
128
+ packed = packer.pack(('hello' * 100).force_encoding(Encoding::BINARY))
129
+ packed.to_str.should start_with("\xDA\x01\xF4")
130
+ end
131
+
132
+ it 'does not use the str8 type' do
133
+ packed = MessagePack.pack('x' * 32, compatibility_mode: true)
134
+ packed.should start_with("\xDA\x00\x20")
135
+ end
136
+ end
119
137
  end
120
138
 
@@ -126,6 +126,25 @@ describe MessagePack do
126
126
  v.should == "\xE3\x81\x82".force_encoding('UTF-8')
127
127
  end
128
128
 
129
+ it "symbol to str" do
130
+ v = pack_unpack(:a)
131
+ v.should == "a".force_encoding('UTF-8')
132
+ end
133
+
134
+ it "symbol to str with encoding" do
135
+ a = "\xE3\x81\x82".force_encoding('UTF-8')
136
+ v = pack_unpack(a.encode('Shift_JIS').to_sym)
137
+ v.encoding.should == Encoding::UTF_8
138
+ v.should == a
139
+ end
140
+
141
+ it "symbol to bin" do
142
+ a = "\xE3\x81\x82".force_encoding('ASCII-8BIT')
143
+ v = pack_unpack(a.to_sym)
144
+ v.encoding.should == Encoding::ASCII_8BIT
145
+ v.should == a
146
+ end
147
+
129
148
  it "bin 8" do
130
149
  check_bin 2, (1<<8)-1
131
150
  end
@@ -36,9 +36,15 @@ describe MessagePack do
36
36
  ['negative floats', -2.1, "\xCB\xC0\x00\xCC\xCC\xCC\xCC\xCC\xCD"]
37
37
  ],
38
38
  'strings' => [
39
- ['strings', utf8enc('hello world'), "\xABhello world"],
39
+ ['tiny strings', utf8enc('hello world'), "\xABhello world"],
40
+ ['short strings', utf8enc('hello' * 5), "\xB9hellohellohellohellohello"],
40
41
  ['empty strings', utf8enc(''), "\xA0"]
41
42
  ],
43
+ 'binary strings' => [
44
+ ['tiny strings', asciienc('hello world'), "\xC4\vhello world"],
45
+ ['short strings', asciienc('hello' * 5), "\xC4\x19hellohellohellohellohello"],
46
+ ['empty strings', asciienc(''), "\xC4\x00"]
47
+ ],
42
48
  'arrays' => [
43
49
  ['empty arrays', [], "\x90"],
44
50
  ['arrays with strings', [utf8enc("hello"), utf8enc("world")], "\x92\xA5hello\xA5world"],
@@ -139,4 +145,18 @@ describe MessagePack do
139
145
  packed.index("w\xC3\xA5rld").should_not be_nil
140
146
  end
141
147
  end
148
+
149
+ context 'in compatibility mode' do
150
+ it 'does not use the bin types' do
151
+ packed = MessagePack.pack('hello'.force_encoding(Encoding::BINARY), compatibility_mode: true)
152
+ packed.should eq("\xA5hello")
153
+ packed = MessagePack.pack(('hello' * 100).force_encoding(Encoding::BINARY), compatibility_mode: true)
154
+ packed.should start_with("\xDA\x01\xF4")
155
+ end
156
+
157
+ it 'does not use the str8 type' do
158
+ packed = MessagePack.pack('x' * 32, compatibility_mode: true)
159
+ packed.should start_with("\xDA\x00\x20")
160
+ end
161
+ end
142
162
  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.6.0pre1
4
+ version: 0.6.2
5
5
  platform: x86-mingw32
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-05-20 00:00:00.000000000 Z
12
+ date: 2015-07-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -121,7 +121,6 @@ files:
121
121
  - bench/unpack.rb
122
122
  - bench/unpack_log.rb
123
123
  - bench/unpack_log_long.rb
124
- - cross-build.sh
125
124
  - doclib/msgpack.rb
126
125
  - doclib/msgpack/buffer.rb
127
126
  - doclib/msgpack/core_ext.rb
@@ -159,7 +158,8 @@ files:
159
158
  - ext/msgpack/unpacker_class.c
160
159
  - ext/msgpack/unpacker_class.h
161
160
  - lib/msgpack.rb
162
- - lib/msgpack/msgpack.so
161
+ - lib/msgpack/2.1/msgpack.so
162
+ - lib/msgpack/2.2/msgpack.so
163
163
  - lib/msgpack/version.rb
164
164
  - msgpack.gemspec
165
165
  - msgpack.org.md
@@ -197,9 +197,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
197
197
  version: '0'
198
198
  required_rubygems_version: !ruby/object:Gem::Requirement
199
199
  requirements:
200
- - - ">"
200
+ - - ">="
201
201
  - !ruby/object:Gem::Version
202
- version: 1.3.1
202
+ version: '0'
203
203
  requirements: []
204
204
  rubyforge_project: msgpack
205
205
  rubygems_version: 2.4.5
@@ -1,9 +0,0 @@
1
- #!/bin/bash
2
-
3
- cd /home/ubuntu/msgpack-ruby
4
- git remote add onetime $MSGPACK_REPO
5
- git checkout master
6
- git pull onetime $BUILD_BRANCH
7
- git reset --hard $BUILD_POSITION
8
- bundle install
9
- bundle rake cross native gem