Ruby: added custom Struct exception type and fixed Makefile.am.
This commit is contained in:
parent
a207a2bd00
commit
3cec2ea8d6
@ -681,6 +681,7 @@ ruby_EXTRA_DIST= \
|
||||
ruby/google-protobuf.gemspec \
|
||||
ruby/lib/google/protobuf/message_exts.rb \
|
||||
ruby/lib/google/protobuf/repeated_field.rb \
|
||||
ruby/lib/google/protobuf/well_known_types.rb \
|
||||
ruby/lib/google/protobuf.rb \
|
||||
ruby/pom.xml \
|
||||
ruby/src/main/java/com/google/protobuf/jruby/RubyBuilder.java \
|
||||
|
@ -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
|
||||
|
@ -85,6 +85,30 @@ class TestWellKnownTypes < Test::Unit::TestCase
|
||||
|
||||
assert_equal(should_equal, struct.to_h)
|
||||
assert_equal(should_equal["sublist"].length, struct["sublist"].length)
|
||||
|
||||
assert_raise Google::Protobuf::UnexpectedStructType do
|
||||
struct[123] = 5
|
||||
end
|
||||
|
||||
assert_raise Google::Protobuf::UnexpectedStructType do
|
||||
struct[5] = Time.new
|
||||
end
|
||||
|
||||
assert_raise Google::Protobuf::UnexpectedStructType do
|
||||
struct[5] = [Time.new]
|
||||
end
|
||||
|
||||
assert_raise Google::Protobuf::UnexpectedStructType do
|
||||
struct[5] = {123 => 456}
|
||||
end
|
||||
|
||||
assert_raise Google::Protobuf::UnexpectedStructType do
|
||||
struct = Google::Protobuf::Struct.new
|
||||
struct.fields["foo"] = Google::Protobuf::Value.new
|
||||
# Tries to return a Ruby value for a Value class whose type
|
||||
# hasn't been filled in.
|
||||
struct["foo"]
|
||||
end
|
||||
end
|
||||
|
||||
def test_any
|
||||
|
Loading…
Reference in New Issue
Block a user