瀏覽代碼

Allows the json marshaller to be passed json marshal options (#4252)

Erik Benoist 7 年之前
父節點
當前提交
c19fcee48f
共有 3 個文件被更改,包括 28 次插入4 次删除
  1. 2 2
      ruby/lib/google/protobuf.rb
  2. 2 2
      ruby/lib/google/protobuf/message_exts.rb
  3. 24 0
      ruby/tests/encode_decode_test.rb

+ 2 - 2
ruby/lib/google/protobuf.rb

@@ -60,8 +60,8 @@ module Google
       msg.to_proto
     end
 
-    def self.encode_json(msg)
-      msg.to_json
+    def self.encode_json(msg, options = {})
+      msg.to_json(options)
     end
 
     def self.decode(klass, proto)

+ 2 - 2
ruby/lib/google/protobuf/message_exts.rb

@@ -40,8 +40,8 @@ module Google
       module ClassMethods
       end
 
-      def to_json
-        self.class.encode_json(self)
+      def to_json(options = {})
+        self.class.encode_json(self, options)
       end
 
       def to_proto

+ 24 - 0
ruby/tests/encode_decode_test.rb

@@ -60,4 +60,28 @@ class EncodeDecodeTest < Test::Unit::TestCase
     to = A::B::C::TestMessage.encode(m.oneof_msg)
     assert_equal '', to
   end
+
+  def test_encode_json
+    msg = A::B::C::TestMessage.new({ optional_int32: 22 })
+    json = msg.to_json
+
+    to = A::B::C::TestMessage.decode_json(json)
+    assert_equal to.optional_int32, 22
+
+    msg = A::B::C::TestMessage.new({ optional_int32: 22 })
+    json = msg.to_json({ preserve_proto_fieldnames: true })
+
+    assert_match 'optional_int32', json
+
+    to = A::B::C::TestMessage.decode_json(json)
+    assert_equal 22, to.optional_int32
+
+    msg = A::B::C::TestMessage.new({ optional_int32: 22 })
+    json = A::B::C::TestMessage.encode_json(
+      msg,
+      { preserve_proto_fieldnames: true, emit_defaults: true }
+    )
+
+    assert_match 'optional_int32', json
+  end
 end