google-protobuf 3.2.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of google-protobuf might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 64664331db5349c6aa3d561c48a14a2bde6ca8c6
4
- data.tar.gz: 0b2236d07009e3132e1d12712cf4ecf8bea00cd2
3
+ metadata.gz: ab3368a432715f4e921518757a25d977584aeff5
4
+ data.tar.gz: 45949b282302bc58f9fcd05bc88a385580d5d352
5
5
  SHA512:
6
- metadata.gz: 602616782077dbf5555478236ac4208e072fb26f1b29a162157155efd20143b5e24f8c3c98d3ab33d5115416c2b80ea9de623bd1e92903dc7f41fa090be5faa7
7
- data.tar.gz: c258e775288b7ea8b528e445cfc627bc5dfc12618436960b20499ab1cea2a984ff706100aae59af6db4c387023fe16b2dea4d61415aa50745e6ff6f8ab3e0d73
6
+ metadata.gz: e55b826b563d58eefcec951ac912b2fb4b988aae3e655f7759163c0b8ee1db6f8932ec0485c7cf6f8a4188bfa2584ce33dd5670dab43fb21eaf8fc7f86a5e819
7
+ data.tar.gz: bccb6b6299c91554bf0f69123af98fdd3926f073d591e6c62c219b01430078c5ae0bd1139d6dec239ab0ee5254ac2d04c1cf23647aabaedd4e9956937e6d18c4
@@ -4,7 +4,14 @@ require 'mkmf'
4
4
 
5
5
  $CFLAGS += " -std=c99 -O3 -DNDEBUG"
6
6
 
7
+
8
+ if RUBY_PLATFORM =~ /linux/
9
+ # Instruct the linker to point memcpy calls at our __wrap_memcpy wrapper.
10
+ $LDFLAGS += " -Wl,-wrap,memcpy"
11
+ end
12
+
7
13
  $objs = ["protobuf.o", "defs.o", "storage.o", "message.o",
8
- "repeated_field.o", "map.o", "encode_decode.o", "upb.o"]
14
+ "repeated_field.o", "map.o", "encode_decode.o", "upb.o",
15
+ "wrap_memcpy.o"]
9
16
 
10
17
  create_makefile("google/protobuf_c")
@@ -652,6 +652,35 @@ VALUE Map_hash(VALUE _self) {
652
652
  return INT2FIX(h);
653
653
  }
654
654
 
655
+ /*
656
+ * call-seq:
657
+ * Map.to_h => {}
658
+ *
659
+ * Returns a Ruby Hash object containing all the values within the map
660
+ */
661
+ VALUE Map_to_h(VALUE _self) {
662
+ Map* self = ruby_to_Map(_self);
663
+ VALUE hash = rb_hash_new();
664
+ upb_strtable_iter it;
665
+ for (upb_strtable_begin(&it, &self->table);
666
+ !upb_strtable_done(&it);
667
+ upb_strtable_next(&it)) {
668
+ VALUE key = table_key_to_ruby(
669
+ self, upb_strtable_iter_key(&it), upb_strtable_iter_keylength(&it));
670
+ upb_value v = upb_strtable_iter_value(&it);
671
+ void* mem = value_memory(&v);
672
+ VALUE value = native_slot_get(self->value_type,
673
+ self->value_type_class,
674
+ mem);
675
+
676
+ if (self->value_type == UPB_TYPE_MESSAGE) {
677
+ value = Message_to_h(value);
678
+ }
679
+ rb_hash_aset(hash, key, value);
680
+ }
681
+ return hash;
682
+ }
683
+
655
684
  /*
656
685
  * call-seq:
657
686
  * Map.inspect => string
@@ -804,6 +833,8 @@ void Map_register(VALUE module) {
804
833
  rb_define_method(klass, "dup", Map_dup, 0);
805
834
  rb_define_method(klass, "==", Map_eq, 1);
806
835
  rb_define_method(klass, "hash", Map_hash, 0);
836
+ rb_define_method(klass, "to_hash", Map_to_h, 0);
837
+ rb_define_method(klass, "to_h", Map_to_h, 0);
807
838
  rb_define_method(klass, "inspect", Map_inspect, 0);
808
839
  rb_define_method(klass, "merge", Map_merge, 1);
809
840
  rb_include_module(klass, rb_mEnumerable);
@@ -394,7 +394,12 @@ VALUE Message_inspect(VALUE _self) {
394
394
  return str;
395
395
  }
396
396
 
397
-
397
+ /*
398
+ * call-seq:
399
+ * Message.to_h => {}
400
+ *
401
+ * Returns the message as a Ruby Hash object, with keys as symbols.
402
+ */
398
403
  VALUE Message_to_h(VALUE _self) {
399
404
  MessageHeader* self;
400
405
  VALUE hash;
@@ -410,8 +415,13 @@ VALUE Message_to_h(VALUE _self) {
410
415
  VALUE msg_value = layout_get(self->descriptor->layout, Message_data(self),
411
416
  field);
412
417
  VALUE msg_key = ID2SYM(rb_intern(upb_fielddef_name(field)));
413
- if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) {
418
+ if (upb_fielddef_ismap(field)) {
419
+ msg_value = Map_to_h(msg_value);
420
+ } else if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) {
414
421
  msg_value = RepeatedField_to_ary(msg_value);
422
+ } else if (msg_value != Qnil &&
423
+ upb_fielddef_type(field) == UPB_TYPE_MESSAGE) {
424
+ msg_value = Message_to_h(msg_value);
415
425
  }
416
426
  rb_hash_aset(hash, msg_key, msg_value);
417
427
  }
@@ -424,6 +424,7 @@ VALUE Map_dup(VALUE _self);
424
424
  VALUE Map_deep_copy(VALUE _self);
425
425
  VALUE Map_eq(VALUE _self, VALUE _other);
426
426
  VALUE Map_hash(VALUE _self);
427
+ VALUE Map_to_h(VALUE _self);
427
428
  VALUE Map_inspect(VALUE _self);
428
429
  VALUE Map_merge(VALUE _self, VALUE hashmap);
429
430
  VALUE Map_merge_into_self(VALUE _self, VALUE hashmap);
@@ -496,6 +497,7 @@ VALUE Message_deep_copy(VALUE _self);
496
497
  VALUE Message_eq(VALUE _self, VALUE _other);
497
498
  VALUE Message_hash(VALUE _self);
498
499
  VALUE Message_inspect(VALUE _self);
500
+ VALUE Message_to_h(VALUE _self);
499
501
  VALUE Message_index(VALUE _self, VALUE field_name);
500
502
  VALUE Message_index_set(VALUE _self, VALUE field_name, VALUE value);
501
503
  VALUE Message_descriptor(VALUE klass);
@@ -0,0 +1,51 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2017 Google Inc. All rights reserved.
3
+ // https://developers.google.com/protocol-buffers/
4
+ //
5
+ // Redistribution and use in source and binary forms, with or without
6
+ // modification, are permitted provided that the following conditions are
7
+ // met:
8
+ //
9
+ // * Redistributions of source code must retain the above copyright
10
+ // notice, this list of conditions and the following disclaimer.
11
+ // * Redistributions in binary form must reproduce the above
12
+ // copyright notice, this list of conditions and the following disclaimer
13
+ // in the documentation and/or other materials provided with the
14
+ // distribution.
15
+ // * Neither the name of Google Inc. nor the names of its
16
+ // contributors may be used to endorse or promote products derived from
17
+ // this software without specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ #include <string.h>
32
+
33
+ // On x86-64 Linux with glibc, we link against the 2.2.5 version of memcpy so
34
+ // that we avoid depending on the 2.14 version of the symbol. This way,
35
+ // distributions that are using pre-2.14 versions of glibc can successfully use
36
+ // the gem we distribute (https://github.com/google/protobuf/issues/2783).
37
+ //
38
+ // This wrapper is enabled by passing the linker flags -Wl,-wrap,memcpy in
39
+ // extconf.rb.
40
+ #ifdef __linux__
41
+ #if defined(__x86_64__) && defined(__GNU_LIBRARY__)
42
+ __asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
43
+ void *__wrap_memcpy(void *dest, const void *src, size_t n) {
44
+ return memcpy(dest, src, n);
45
+ }
46
+ #else
47
+ void *__wrap_memcpy(void *dest, const void *src, size_t n) {
48
+ return memmove(dest, src, n);
49
+ }
50
+ #endif
51
+ #endif
@@ -927,6 +927,16 @@ module BasicTest
927
927
  :repeated_uint64=>[]
928
928
  }
929
929
  assert_equal expected_result, m.to_h
930
+
931
+ m = MapMessage.new(
932
+ :map_string_int32 => {"a" => 1, "b" => 2},
933
+ :map_string_msg => {"a" => TestMessage2.new(:foo => 1),
934
+ "b" => TestMessage2.new(:foo => 2)})
935
+ expected_result = {
936
+ :map_string_int32 => {"a" => 1, "b" => 2},
937
+ :map_string_msg => {"a" => {:foo => 1}, "b" => {:foo => 2}}
938
+ }
939
+ assert_equal expected_result, m.to_h
930
940
  end
931
941
 
932
942
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Protobuf Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-13 00:00:00.000000000 Z
11
+ date: 2017-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler-dock
@@ -90,6 +90,7 @@ files:
90
90
  - ext/google/protobuf_c/storage.c
91
91
  - ext/google/protobuf_c/upb.c
92
92
  - ext/google/protobuf_c/upb.h
93
+ - ext/google/protobuf_c/wrap_memcpy.c
93
94
  - lib/google/protobuf.rb
94
95
  - lib/google/protobuf/any_pb.rb
95
96
  - lib/google/protobuf/api_pb.rb