msgpack 0.7.1-x86-mingw32 → 0.7.3-x86-mingw32
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/.travis.yml +1 -1
- data/ChangeLog +9 -0
- data/Rakefile +12 -15
- data/doclib/msgpack/packer.rb +12 -0
- data/ext/java/org/msgpack/jruby/Encoder.java +14 -1
- data/ext/java/org/msgpack/jruby/Packer.java +11 -0
- data/ext/java/org/msgpack/jruby/Unpacker.java +2 -0
- data/ext/msgpack/packer.h +12 -0
- data/ext/msgpack/packer_class.c +12 -0
- data/lib/msgpack/version.rb +1 -1
- data/msgpack.gemspec +1 -1
- data/spec/packer_spec.rb +101 -0
- data/spec/unpacker_spec.rb +68 -0
- metadata +4 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0fa00e550e98cfdd269a0705815dde4289acae52
         | 
| 4 | 
            +
              data.tar.gz: 6168ebd1a29a858dd828640eefb2b0a9b496b6de
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9fa8400032d353219c36495d8cacf69c4038c182621146e416baf5687ff9b351aa66018014ec06d69720231fe65c3ad6efab0c89cc9578f5fe8c6560a3c6466c
         | 
| 7 | 
            +
              data.tar.gz: 5a121d12376bd987d1a777be149d75240e74d698cbeac6e0f189535a7b182abedefaaeff194bb6cf36231baea224f6398b2860de704e9863bafd470c50c65f99
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/ChangeLog
    CHANGED
    
    | @@ -1,3 +1,12 @@ | |
| 1 | 
            +
            2016-01-07 version 0.7.3:
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * Add Packer#write_float32 method to pack floating point numbers into FLOAT of messagepack.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            2016-01-06 version 0.7.2:
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Improved compatibility of Unpacker between CRuby and JRuby to accept stream-like object
         | 
| 8 | 
            +
              by checking respond_to(:read) in addition to class check
         | 
| 9 | 
            +
             | 
| 1 10 | 
             
            2015-11-20 version 0.7.1:
         | 
| 2 11 |  | 
| 3 12 | 
             
            * Fixed bug to pack/unpack ext type objects larger than 256bytes incorrectly.
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -37,14 +37,6 @@ if RUBY_PLATFORM =~ /java/ | |
| 37 37 | 
             
                ext.source_version = '1.6'
         | 
| 38 38 | 
             
                ext.target_version = '1.6'
         | 
| 39 39 | 
             
              end
         | 
| 40 | 
            -
             | 
| 41 | 
            -
              RSpec::Core::RakeTask.new(:spec) do |t|
         | 
| 42 | 
            -
                t.rspec_opts = ["-c", "-f progress"]
         | 
| 43 | 
            -
                t.rspec_opts << "-Ilib"
         | 
| 44 | 
            -
                t.pattern = 'spec/{,jruby/}*_spec.rb'
         | 
| 45 | 
            -
                t.verbose = true
         | 
| 46 | 
            -
              end
         | 
| 47 | 
            -
             | 
| 48 40 | 
             
            else
         | 
| 49 41 | 
             
              require 'rake/extensiontask'
         | 
| 50 42 |  | 
| @@ -55,20 +47,25 @@ else | |
| 55 47 | 
             
                # cross_platform names are of MRI's platform name
         | 
| 56 48 | 
             
                ext.cross_platform = ['x86-mingw32', 'x64-mingw32']
         | 
| 57 49 | 
             
              end
         | 
| 50 | 
            +
            end
         | 
| 58 51 |  | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 52 | 
            +
            test_pattern = case
         | 
| 53 | 
            +
                           when RUBY_PLATFORM =~ /java/ then 'spec/{,jruby/}*_spec.rb'
         | 
| 54 | 
            +
                           when RUBY_ENGINE =~ /rbx/ then 'spec/*_spec.rb'
         | 
| 55 | 
            +
                           else 'spec/{,cruby/}*_spec.rb' # MRI
         | 
| 56 | 
            +
                           end
         | 
| 57 | 
            +
            RSpec::Core::RakeTask.new(:spec) do |t|
         | 
| 58 | 
            +
              t.rspec_opts = ["-c", "-f progress"]
         | 
| 59 | 
            +
              t.rspec_opts << "-Ilib"
         | 
| 60 | 
            +
              t.pattern = test_pattern
         | 
| 61 | 
            +
              t.verbose = true
         | 
| 65 62 | 
             
            end
         | 
| 66 63 |  | 
| 67 64 | 
             
            namespace :build do
         | 
| 68 65 | 
             
              desc 'Build gems for Windows per rake-compiler-dock'
         | 
| 69 66 | 
             
              task :windows do
         | 
| 70 67 | 
             
                require 'rake_compiler_dock'
         | 
| 71 | 
            -
                RakeCompilerDock.sh 'bundle && rake cross native gem RUBY_CC_VERSION=1.9.3:2.0.0:2.1.6:2.2.2'
         | 
| 68 | 
            +
                RakeCompilerDock.sh 'bundle && rake cross native gem RUBY_CC_VERSION=1.9.3:2.0.0:2.1.6:2.2.2:2.3.0'
         | 
| 72 69 | 
             
              end
         | 
| 73 70 | 
             
            end
         | 
| 74 71 |  | 
    
        data/doclib/msgpack/packer.rb
    CHANGED
    
    | @@ -109,6 +109,18 @@ module MessagePack | |
| 109 109 | 
             
                def write_map_header(n)
         | 
| 110 110 | 
             
                end
         | 
| 111 111 |  | 
| 112 | 
            +
                #
         | 
| 113 | 
            +
                # Serializes _value_ as 32-bit single precision float into internal buffer.
         | 
| 114 | 
            +
                # _value_ will be approximated with the nearest possible single precision float, thus
         | 
| 115 | 
            +
                # being potentially lossy. However, the serialized string will only take up 5 bytes
         | 
| 116 | 
            +
                # instead of 9 bytes compared to directly serializing a 64-bit double precision Ruby Float.
         | 
| 117 | 
            +
                #
         | 
| 118 | 
            +
                # @param value [Numeric]
         | 
| 119 | 
            +
                # @return [Packer] self
         | 
| 120 | 
            +
                #
         | 
| 121 | 
            +
                def write_float32(value)
         | 
| 122 | 
            +
                end
         | 
| 123 | 
            +
             | 
| 112 124 | 
             
                #
         | 
| 113 125 | 
             
                # Flushes data in the internal buffer to the internal IO. Same as _buffer.flush.
         | 
| 114 126 | 
             
                # If internal IO is not set, it does nothing.
         | 
| @@ -8,6 +8,7 @@ import org.jruby.Ruby; | |
| 8 8 | 
             
            import org.jruby.RubyObject;
         | 
| 9 9 | 
             
            import org.jruby.RubyNil;
         | 
| 10 10 | 
             
            import org.jruby.RubyBoolean;
         | 
| 11 | 
            +
            import org.jruby.RubyNumeric;
         | 
| 11 12 | 
             
            import org.jruby.RubyBignum;
         | 
| 12 13 | 
             
            import org.jruby.RubyInteger;
         | 
| 13 14 | 
             
            import org.jruby.RubyFixnum;
         | 
| @@ -85,6 +86,11 @@ public class Encoder { | |
| 85 86 | 
             
                return readRubyString();
         | 
| 86 87 | 
             
              }
         | 
| 87 88 |  | 
| 89 | 
            +
              public IRubyObject encodeFloat32(RubyNumeric numeric) {
         | 
| 90 | 
            +
                appendFloat32(numeric);
         | 
| 91 | 
            +
                return readRubyString();
         | 
| 92 | 
            +
              }
         | 
| 93 | 
            +
             | 
| 88 94 | 
             
              private void appendObject(IRubyObject object) {
         | 
| 89 95 | 
             
                appendObject(object, null);
         | 
| 90 96 | 
             
              }
         | 
| @@ -182,8 +188,8 @@ public class Encoder { | |
| 182 188 |  | 
| 183 189 | 
             
              private void appendFloat(RubyFloat object) {
         | 
| 184 190 | 
             
                double value = object.getDoubleValue();
         | 
| 185 | 
            -
                float f = (float) value;
         | 
| 186 191 | 
             
                //TODO: msgpack-ruby original does encode this value as Double, not float
         | 
| 192 | 
            +
                // float f = (float) value;
         | 
| 187 193 | 
             
                // if (Double.compare(f, value) == 0) {
         | 
| 188 194 | 
             
                //   ensureRemainingCapacity(5);
         | 
| 189 195 | 
             
                //   buffer.put(FLOAT32);
         | 
| @@ -195,6 +201,13 @@ public class Encoder { | |
| 195 201 | 
             
                // }
         | 
| 196 202 | 
             
              }
         | 
| 197 203 |  | 
| 204 | 
            +
              private void appendFloat32(RubyNumeric object) {
         | 
| 205 | 
            +
                float value = (float) object.getDoubleValue();
         | 
| 206 | 
            +
                ensureRemainingCapacity(5);
         | 
| 207 | 
            +
                buffer.put(FLOAT32);
         | 
| 208 | 
            +
                buffer.putFloat(value);
         | 
| 209 | 
            +
              }
         | 
| 210 | 
            +
             | 
| 198 211 | 
             
              private void appendString(RubyString object) {
         | 
| 199 212 | 
             
                Encoding encoding = object.getEncoding();
         | 
| 200 213 | 
             
                boolean binary = !compatibilityMode && encoding == binaryEncoding;
         | 
| @@ -7,6 +7,7 @@ import org.jruby.RubyObject; | |
| 7 7 | 
             
            import org.jruby.RubyArray;
         | 
| 8 8 | 
             
            import org.jruby.RubyHash;
         | 
| 9 9 | 
             
            import org.jruby.RubyIO;
         | 
| 10 | 
            +
            import org.jruby.RubyNumeric;
         | 
| 10 11 | 
             
            import org.jruby.RubyInteger;
         | 
| 11 12 | 
             
            import org.jruby.RubyFixnum;
         | 
| 12 13 | 
             
            import org.jruby.runtime.Block;
         | 
| @@ -114,6 +115,16 @@ public class Packer extends RubyObject { | |
| 114 115 | 
             
                return this;
         | 
| 115 116 | 
             
              }
         | 
| 116 117 |  | 
| 118 | 
            +
              @JRubyMethod(name = "write_float32")
         | 
| 119 | 
            +
              public IRubyObject writeFloat32(ThreadContext ctx, IRubyObject numeric) {
         | 
| 120 | 
            +
                Ruby runtime = ctx.runtime;
         | 
| 121 | 
            +
                if (!(numeric instanceof RubyNumeric)) {
         | 
| 122 | 
            +
                  throw runtime.newArgumentError("Expected numeric");
         | 
| 123 | 
            +
                }
         | 
| 124 | 
            +
                buffer.write(ctx, encoder.encodeFloat32((RubyNumeric) numeric));
         | 
| 125 | 
            +
                return this;
         | 
| 126 | 
            +
              }
         | 
| 127 | 
            +
             | 
| 117 128 | 
             
              @JRubyMethod(name = "write_array_header")
         | 
| 118 129 | 
             
              public IRubyObject writeArrayHeader(ThreadContext ctx, IRubyObject size) {
         | 
| 119 130 | 
             
                int s = (int) size.convertToInteger().getLongValue();
         | 
| @@ -297,6 +297,8 @@ public class Unpacker extends RubyObject { | |
| 297 297 | 
             
                  str = stream.callMethod(ctx, "string").asString();
         | 
| 298 298 | 
             
                } else if (stream instanceof RubyIO) {
         | 
| 299 299 | 
             
                  str = stream.callMethod(ctx, "read").asString();
         | 
| 300 | 
            +
                } else if (stream.respondsTo("read")) {
         | 
| 301 | 
            +
                  str = stream.callMethod(ctx, "read").asString();
         | 
| 300 302 | 
             
                } else {
         | 
| 301 303 | 
             
                  throw ctx.getRuntime().newTypeError(stream, "IO");
         | 
| 302 304 | 
             
                }
         | 
    
        data/ext/msgpack/packer.h
    CHANGED
    
    | @@ -255,6 +255,18 @@ static inline void msgpack_packer_write_u64(msgpack_packer_t* pk, uint64_t v) | |
| 255 255 | 
             
                }
         | 
| 256 256 | 
             
            }
         | 
| 257 257 |  | 
| 258 | 
            +
            static inline void msgpack_packer_write_float(msgpack_packer_t* pk, float v)
         | 
| 259 | 
            +
            {
         | 
| 260 | 
            +
                msgpack_buffer_ensure_writable(PACKER_BUFFER_(pk), 5);
         | 
| 261 | 
            +
                union {
         | 
| 262 | 
            +
                    float f;
         | 
| 263 | 
            +
                    uint32_t u32;
         | 
| 264 | 
            +
                    char mem[4];
         | 
| 265 | 
            +
                } castbuf = { v };
         | 
| 266 | 
            +
                castbuf.u32 = _msgpack_be_float(castbuf.u32);
         | 
| 267 | 
            +
                msgpack_buffer_write_byte_and_data(PACKER_BUFFER_(pk), 0xca, castbuf.mem, 4);
         | 
| 268 | 
            +
            }
         | 
| 269 | 
            +
             | 
| 258 270 | 
             
            static inline void msgpack_packer_write_double(msgpack_packer_t* pk, double v)
         | 
| 259 271 | 
             
            {
         | 
| 260 272 | 
             
                msgpack_buffer_ensure_writable(PACKER_BUFFER_(pk), 9);
         | 
    
        data/ext/msgpack/packer_class.c
    CHANGED
    
    | @@ -149,6 +149,17 @@ static VALUE Packer_write_map_header(VALUE self, VALUE n) | |
| 149 149 | 
             
                return self;
         | 
| 150 150 | 
             
            }
         | 
| 151 151 |  | 
| 152 | 
            +
            static VALUE Packer_write_float32(VALUE self, VALUE numeric)
         | 
| 153 | 
            +
            {
         | 
| 154 | 
            +
                if(!rb_obj_is_kind_of(numeric, rb_cNumeric)) {
         | 
| 155 | 
            +
                  rb_raise(rb_eArgError, "Expected numeric");
         | 
| 156 | 
            +
                }
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                PACKER(self, pk);
         | 
| 159 | 
            +
                msgpack_packer_write_float(pk, (float)rb_num2dbl(numeric));
         | 
| 160 | 
            +
                return self;
         | 
| 161 | 
            +
            }
         | 
| 162 | 
            +
             | 
| 152 163 | 
             
            static VALUE Packer_write_ext(VALUE self, VALUE type, VALUE data)
         | 
| 153 164 | 
             
            {
         | 
| 154 165 | 
             
                PACKER(self, pk);
         | 
| @@ -344,6 +355,7 @@ void MessagePack_Packer_module_init(VALUE mMessagePack) | |
| 344 355 | 
             
                rb_define_method(cMessagePack_Packer, "write_array_header", Packer_write_array_header, 1);
         | 
| 345 356 | 
             
                rb_define_method(cMessagePack_Packer, "write_map_header", Packer_write_map_header, 1);
         | 
| 346 357 | 
             
                rb_define_method(cMessagePack_Packer, "write_ext", Packer_write_ext, 2);
         | 
| 358 | 
            +
                rb_define_method(cMessagePack_Packer, "write_float32", Packer_write_float32, 1);
         | 
| 347 359 | 
             
                rb_define_method(cMessagePack_Packer, "flush", Packer_flush, 0);
         | 
| 348 360 |  | 
| 349 361 | 
             
                /* delegation methods */
         | 
    
        data/lib/msgpack/version.rb
    CHANGED
    
    
    
        data/msgpack.gemspec
    CHANGED
    
    | @@ -26,7 +26,7 @@ Gem::Specification.new do |s| | |
| 26 26 | 
             
              s.add_development_dependency 'rake', ['~> 0.9.2']
         | 
| 27 27 | 
             
              s.add_development_dependency 'rake-compiler', ['~> 0.9.4']
         | 
| 28 28 | 
             
              if /java/ !~ RUBY_PLATFORM
         | 
| 29 | 
            -
                s.add_development_dependency 'rake-compiler-dock', ['~> 0. | 
| 29 | 
            +
                s.add_development_dependency 'rake-compiler-dock', ['~> 0.5.0']
         | 
| 30 30 | 
             
              end
         | 
| 31 31 | 
             
              s.add_development_dependency 'rspec', ['~> 3.3']
         | 
| 32 32 | 
             
              s.add_development_dependency 'yard', ['~> 0.8.2']
         | 
    
        data/spec/packer_spec.rb
    CHANGED
    
    | @@ -2,6 +2,9 @@ | |
| 2 2 | 
             
            require 'spec_helper'
         | 
| 3 3 |  | 
| 4 4 | 
             
            require 'stringio'
         | 
| 5 | 
            +
            require 'tempfile'
         | 
| 6 | 
            +
            require 'zlib'
         | 
| 7 | 
            +
             | 
| 5 8 | 
             
            if defined?(Encoding)
         | 
| 6 9 | 
             
              Encoding.default_external = 'ASCII-8BIT'
         | 
| 7 10 | 
             
            end
         | 
| @@ -19,6 +22,80 @@ describe MessagePack::Packer do | |
| 19 22 | 
             
                MessagePack::Packer.new(StringIO.new, {})
         | 
| 20 23 | 
             
              end
         | 
| 21 24 |  | 
| 25 | 
            +
              it 'gets IO or object which has #write to write/append data to it' do
         | 
| 26 | 
            +
                sample_data = {"message" => "morning!", "num" => 1}
         | 
| 27 | 
            +
                sample_packed = MessagePack.pack(sample_data)
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                Tempfile.open("for_io") do |file|
         | 
| 30 | 
            +
                  file.sync = true
         | 
| 31 | 
            +
                  p1 = MessagePack::Packer.new(file)
         | 
| 32 | 
            +
                  p1.write sample_data
         | 
| 33 | 
            +
                  p1.flush
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  file.rewind
         | 
| 36 | 
            +
                  expect(file.read).to eql(sample_packed)
         | 
| 37 | 
            +
                  file.unlink
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                dio = StringIO.new
         | 
| 41 | 
            +
                p2 = MessagePack::Packer.new(dio)
         | 
| 42 | 
            +
                p2.write sample_data
         | 
| 43 | 
            +
                p2.flush
         | 
| 44 | 
            +
                dio.rewind
         | 
| 45 | 
            +
                expect(dio.string).to eql(sample_packed)
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                unless defined? JRUBY_VERSION
         | 
| 48 | 
            +
                  # JRuby seems to have bug not to flush GzipWriter buffer correctly (both of 1.7 and 9.0)
         | 
| 49 | 
            +
                  dio = StringIO.new
         | 
| 50 | 
            +
                  writer = Zlib::GzipWriter.new(dio)
         | 
| 51 | 
            +
                  writer.sync = true
         | 
| 52 | 
            +
                  p3 = MessagePack::Packer.new(writer)
         | 
| 53 | 
            +
                  p3.write sample_data
         | 
| 54 | 
            +
                  p3.flush
         | 
| 55 | 
            +
                  writer.flush(Zlib::FINISH)
         | 
| 56 | 
            +
                  writer.close
         | 
| 57 | 
            +
                  dio.rewind
         | 
| 58 | 
            +
                  compressed = dio.string
         | 
| 59 | 
            +
                  str = Zlib::GzipReader.wrap(StringIO.new(compressed)){|gz| gz.read }
         | 
| 60 | 
            +
                  expect(str).to eql(sample_packed)
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                class DummyIO
         | 
| 64 | 
            +
                  def initialize
         | 
| 65 | 
            +
                    @buf = "".force_encoding('ASCII-8BIT')
         | 
| 66 | 
            +
                    @pos = 0
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
                  def write(val)
         | 
| 69 | 
            +
                    @buf << val.to_s
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                  def read(length=nil,outbuf="")
         | 
| 72 | 
            +
                    if @pos == @buf.size
         | 
| 73 | 
            +
                      nil
         | 
| 74 | 
            +
                    elsif length.nil?
         | 
| 75 | 
            +
                      val = @buf[@pos..(@buf.size)]
         | 
| 76 | 
            +
                      @pos = @buf.size
         | 
| 77 | 
            +
                      outbuf << val
         | 
| 78 | 
            +
                      outbuf
         | 
| 79 | 
            +
                    else
         | 
| 80 | 
            +
                      val = @buf[@pos..(@pos + length)]
         | 
| 81 | 
            +
                      @pos += val.size
         | 
| 82 | 
            +
                      @pos = @buf.size if @pos > @buf.size
         | 
| 83 | 
            +
                      outbuf << val
         | 
| 84 | 
            +
                      outbuf
         | 
| 85 | 
            +
                    end
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
                  def flush
         | 
| 88 | 
            +
                    # nop
         | 
| 89 | 
            +
                  end
         | 
| 90 | 
            +
                end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                dio = DummyIO.new
         | 
| 93 | 
            +
                p4 = MessagePack::Packer.new(dio)
         | 
| 94 | 
            +
                p4.write sample_data
         | 
| 95 | 
            +
                p4.flush
         | 
| 96 | 
            +
                expect(dio.read).to eql(sample_packed)
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
             | 
| 22 99 | 
             
              it 'gets options to specify how to pack values' do
         | 
| 23 100 | 
             
                u1 = MessagePack::Packer.new
         | 
| 24 101 | 
             
                u1.compatibility_mode?.should == false
         | 
| @@ -57,6 +134,30 @@ describe MessagePack::Packer do | |
| 57 134 | 
             
                packer.to_s.should == "\x81"
         | 
| 58 135 | 
             
              end
         | 
| 59 136 |  | 
| 137 | 
            +
              describe '#write_float32' do
         | 
| 138 | 
            +
                tests = [
         | 
| 139 | 
            +
                  ['small floats', 3.14, "\xCA\x40\x48\xF5\xC3"],
         | 
| 140 | 
            +
                  ['big floats', Math::PI * 1_000_000_000_000_000_000, "\xCA\x5E\x2E\x64\xB7"],
         | 
| 141 | 
            +
                  ['negative floats', -2.1, "\xCA\xC0\x06\x66\x66"],
         | 
| 142 | 
            +
                  ['integer', 123, "\xCA\x42\xF6\x00\x00"],
         | 
| 143 | 
            +
                ]
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                tests.each do |ctx, numeric, packed|
         | 
| 146 | 
            +
                  context("with #{ctx}") do
         | 
| 147 | 
            +
                    it("encodes #{numeric} as float32") do
         | 
| 148 | 
            +
                      packer.write_float32(numeric)
         | 
| 149 | 
            +
                      packer.to_s.should == packed
         | 
| 150 | 
            +
                    end
         | 
| 151 | 
            +
                  end
         | 
| 152 | 
            +
                end
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                context 'with non numeric' do
         | 
| 155 | 
            +
                  it 'raises argument error' do
         | 
| 156 | 
            +
                    expect { packer.write_float32('abc') }.to raise_error(ArgumentError)
         | 
| 157 | 
            +
                  end
         | 
| 158 | 
            +
                end
         | 
| 159 | 
            +
              end
         | 
| 160 | 
            +
             | 
| 60 161 | 
             
              it 'flush' do
         | 
| 61 162 | 
             
                io = StringIO.new
         | 
| 62 163 | 
             
                pk = MessagePack::Packer.new(io)
         | 
    
        data/spec/unpacker_spec.rb
    CHANGED
    
    | @@ -2,6 +2,7 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            require 'stringio'
         | 
| 4 4 | 
             
            require 'tempfile'
         | 
| 5 | 
            +
            require 'zlib'
         | 
| 5 6 |  | 
| 6 7 | 
             
            require 'spec_helper'
         | 
| 7 8 |  | 
| @@ -24,6 +25,73 @@ describe MessagePack::Unpacker do | |
| 24 25 | 
             
                u2.allow_unknown_ext?.should == true
         | 
| 25 26 | 
             
              end
         | 
| 26 27 |  | 
| 28 | 
            +
              it 'gets IO or object which has #read to read data from it' do
         | 
| 29 | 
            +
                sample_data = {"message" => "morning!", "num" => 1}
         | 
| 30 | 
            +
                sample_packed = MessagePack.pack(sample_data).force_encoding('ASCII-8BIT')
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                Tempfile.open("for_io") do |file|
         | 
| 33 | 
            +
                  file.sync = true
         | 
| 34 | 
            +
                  file.write sample_packed
         | 
| 35 | 
            +
                  file.rewind
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  u1 = MessagePack::Unpacker.new(file)
         | 
| 38 | 
            +
                  u1.each do |obj|
         | 
| 39 | 
            +
                    expect(obj).to eql(sample_data)
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
                  file.unlink
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                sio = StringIO.new(sample_packed)
         | 
| 45 | 
            +
                u2 = MessagePack::Unpacker.new(sio)
         | 
| 46 | 
            +
                u2.each do |obj|
         | 
| 47 | 
            +
                  expect(obj).to eql(sample_data)
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                dio = StringIO.new
         | 
| 51 | 
            +
                Zlib::GzipWriter.wrap(dio){|gz| gz.write sample_packed }
         | 
| 52 | 
            +
                reader = Zlib::GzipReader.new(StringIO.new(dio.string))
         | 
| 53 | 
            +
                u3 = MessagePack::Unpacker.new(reader)
         | 
| 54 | 
            +
                u3.each do |obj|
         | 
| 55 | 
            +
                  expect(obj).to eql(sample_data)
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                class DummyIO
         | 
| 59 | 
            +
                  def initialize
         | 
| 60 | 
            +
                    @buf = "".force_encoding('ASCII-8BIT')
         | 
| 61 | 
            +
                    @pos = 0
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
                  def write(val)
         | 
| 64 | 
            +
                    @buf << val.to_s
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
                  def read(length=nil,outbuf="")
         | 
| 67 | 
            +
                    if @pos == @buf.size
         | 
| 68 | 
            +
                      nil
         | 
| 69 | 
            +
                    elsif length.nil?
         | 
| 70 | 
            +
                      val = @buf[@pos..(@buf.size)]
         | 
| 71 | 
            +
                      @pos = @buf.size
         | 
| 72 | 
            +
                      outbuf << val
         | 
| 73 | 
            +
                      outbuf
         | 
| 74 | 
            +
                    else
         | 
| 75 | 
            +
                      val = @buf[@pos..(@pos + length)]
         | 
| 76 | 
            +
                      @pos += val.size
         | 
| 77 | 
            +
                      @pos = @buf.size if @pos > @buf.size
         | 
| 78 | 
            +
                      outbuf << val
         | 
| 79 | 
            +
                      outbuf
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
                  def flush
         | 
| 83 | 
            +
                    # nop
         | 
| 84 | 
            +
                  end
         | 
| 85 | 
            +
                end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                dio = DummyIO.new
         | 
| 88 | 
            +
                dio.write sample_packed
         | 
| 89 | 
            +
                u4 = MessagePack::Unpacker.new(dio)
         | 
| 90 | 
            +
                u4.each do |obj|
         | 
| 91 | 
            +
                  expect(obj).to eql(sample_data)
         | 
| 92 | 
            +
                end
         | 
| 93 | 
            +
              end
         | 
| 94 | 
            +
             | 
| 27 95 | 
             
              it 'read_array_header succeeds' do
         | 
| 28 96 | 
             
                unpacker.feed("\x91")
         | 
| 29 97 | 
             
                unpacker.read_array_header.should == 1
         | 
    
        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 | 
            +
              version: 0.7.3
         | 
| 5 5 | 
             
            platform: x86-mingw32
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Sadayuki Furuhashi
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date:  | 
| 13 | 
            +
            date: 2016-01-07 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: bundler
         | 
| @@ -60,14 +60,14 @@ dependencies: | |
| 60 60 | 
             
                requirements:
         | 
| 61 61 | 
             
                - - "~>"
         | 
| 62 62 | 
             
                  - !ruby/object:Gem::Version
         | 
| 63 | 
            -
                    version: 0. | 
| 63 | 
            +
                    version: 0.5.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. | 
| 70 | 
            +
                    version: 0.5.0
         | 
| 71 71 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 72 72 | 
             
              name: rspec
         | 
| 73 73 | 
             
              requirement: !ruby/object:Gem::Requirement
         |