diff options
author | parker <parker@shundaojia.com> | 2017-11-06 12:18:12 +0800 |
---|---|---|
committer | parker <parker@shundaojia.com> | 2017-11-17 11:43:14 +0800 |
commit | 8695997eb5adb3c504c3615f0e6f3891a9b7ebde (patch) | |
tree | 21890635a98c360ce0465aeeb1e41a4f27a1277c /ruby | |
parent | bcda919ceeae8bd854c07a8300d8996ef52315db (diff) | |
download | protobuf-8695997eb5adb3c504c3615f0e6f3891a9b7ebde.tar.gz protobuf-8695997eb5adb3c504c3615f0e6f3891a9b7ebde.tar.bz2 protobuf-8695997eb5adb3c504c3615f0e6f3891a9b7ebde.zip |
Google::Protobuf::Struct can access a missing key (#3846)
Diffstat (limited to 'ruby')
-rw-r--r-- | ruby/lib/google/protobuf/well_known_types.rb | 6 | ||||
-rw-r--r-- | ruby/tests/well_known_types_test.rb | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/ruby/lib/google/protobuf/well_known_types.rb b/ruby/lib/google/protobuf/well_known_types.rb index 921ddbc0..e85fac56 100644 --- a/ruby/lib/google/protobuf/well_known_types.rb +++ b/ruby/lib/google/protobuf/well_known_types.rb @@ -149,6 +149,8 @@ module Google Struct.class_eval do def [](key) self.fields[key].to_ruby + rescue NoMethodError + nil end def []=(key, value) @@ -170,6 +172,10 @@ module Google hash.each { |key, val| ret[key] = val } ret end + + def has_key?(key) + self.fields.has_key?(key) + end end ListValue.class_eval do diff --git a/ruby/tests/well_known_types_test.rb b/ruby/tests/well_known_types_test.rb index bd24c328..3ce659a6 100644 --- a/ruby/tests/well_known_types_test.rb +++ b/ruby/tests/well_known_types_test.rb @@ -60,6 +60,9 @@ class TestWellKnownTypes < Test::Unit::TestCase assert_equal(Google::Protobuf::ListValue.from_a(sublist), struct["sublist"]) + assert_equal true, struct.has_key?("null") + assert_equal false, struct.has_key?("missing_key") + should_equal = { "number" => 12345, "boolean-true" => true, @@ -82,6 +85,9 @@ class TestWellKnownTypes < Test::Unit::TestCase # to_h returns a fully-flattened Ruby structure (Hash and Array). assert_equal(should_equal, struct.to_h) + # Test that we can safely access a missing key + assert_equal(nil, struct["missing_key"]) + # Test that we can assign Struct and ListValue directly. struct["substruct"] = Google::Protobuf::Struct.from_hash(substruct) struct["sublist"] = Google::Protobuf::ListValue.from_a(sublist) |