diff options
author | Josh Haberman <jhaberman@gmail.com> | 2016-08-01 14:31:31 -0700 |
---|---|---|
committer | Josh Haberman <jhaberman@gmail.com> | 2016-08-01 14:34:54 -0700 |
commit | 3cec2ea8d61f5ebebb64af967db782e867da849f (patch) | |
tree | 5a3530bc9d584463560e50c7efba4e24440a4211 /ruby/lib | |
parent | a207a2bd004f7b89699d3e52064dbed34603ae2d (diff) | |
download | protobuf-3cec2ea8d61f5ebebb64af967db782e867da849f.tar.gz protobuf-3cec2ea8d61f5ebebb64af967db782e867da849f.tar.bz2 protobuf-3cec2ea8d61f5ebebb64af967db782e867da849f.zip |
Ruby: added custom Struct exception type and fixed Makefile.am.
Diffstat (limited to 'ruby/lib')
-rw-r--r-- | ruby/lib/google/protobuf/well_known_types.rb | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/ruby/lib/google/protobuf/well_known_types.rb b/ruby/lib/google/protobuf/well_known_types.rb index d0d15045..547de874 100644 --- a/ruby/lib/google/protobuf/well_known_types.rb +++ b/ruby/lib/google/protobuf/well_known_types.rb @@ -90,6 +90,8 @@ module Google end end + class UnexpectedStructType < Google::Protobuf::Error; end + Value.class_eval do def to_ruby(recursive = false) case self.kind @@ -114,31 +116,32 @@ module Google when :bool_value self.bool_value else - raise "Value not set" + raise UnexpectedStructType end end def from_ruby(value) - if value.nil? + case value + when NilClass self.null_value = 0 - elsif value.is_a?(Numeric) + when Numeric self.number_value = value - elsif value.is_a?(String) + when String self.string_value = value - elsif value.is_a?(TrueClass) + when TrueClass self.bool_value = true - elsif value.is_a?(FalseClass) + when FalseClass self.bool_value = false - elsif value.is_a?(Struct) + when Struct self.struct_value = value - elsif value.is_a?(Hash) + when Hash self.struct_value = Struct.from_hash(value) - elsif value.is_a?(ListValue) + when ListValue self.list_value = value - elsif value.is_a?(Array) + when Array self.list_value = ListValue.from_a(value) else - raise "Unexpected type" + raise UnexpectedStructType end end end @@ -149,6 +152,9 @@ module Google end def []=(key, value) + unless key.is_a?(String) + raise UnexpectedStructType, "Struct keys must be strings." + end self.fields[key] ||= Google::Protobuf::Value.new self.fields[key].from_ruby(value) end |