diff --git a/CHANGES.txt b/CHANGES.txt index fbcc88c070c..f3e8bf54b3f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -87,6 +87,9 @@ Trunk (not yet released) AVRO-1681. Improve generated JavaDocs. (Charles GariƩpy-Ikeson via tomwhite) + AVRO-1645. Ruby: Improved handling of missing named types. + (Daniel Schierbeck via tomwhite) + BUG FIXES AVRO-1553. Java: MapReduce never uses MapOutputValueSchema (tomwhite) diff --git a/lang/ruby/lib/avro/schema.rb b/lang/ruby/lib/avro/schema.rb index 1fb05e69ada..142157775ee 100644 --- a/lang/ruby/lib/avro/schema.rb +++ b/lang/ruby/lib/avro/schema.rb @@ -86,8 +86,7 @@ def self.real_parse(json_obj, names=nil, default_namespace=nil) elsif PRIMITIVE_TYPES.include? json_obj return PrimitiveSchema.new(json_obj) else - msg = "#{json_obj.inspect} is not a schema we know about." - raise SchemaParseError.new(msg) + raise UnknownSchemaError.new(json_obj) end end @@ -370,6 +369,15 @@ def to_avro(names=Set.new) class SchemaParseError < AvroError; end + class UnknownSchemaError < SchemaParseError + attr_reader :type_name + + def initialize(type) + @type_name = type + super("#{type.inspect} is not a schema we know about.") + end + end + module Name def self.extract_namespace(name, namespace) parts = name.split('.') diff --git a/lang/ruby/test/test_schema.rb b/lang/ruby/test/test_schema.rb index 165f04e3057..0668cf2f367 100644 --- a/lang/ruby/test/test_schema.rb +++ b/lang/ruby/test/test_schema.rb @@ -131,4 +131,16 @@ def test_to_avro_includes_namespaces ] } end + + def test_unknown_named_type + error = assert_raise Avro::UnknownSchemaError do + Avro::Schema.parse <<-SCHEMA + {"type": "record", "name": "my.name.space.Record", "fields": [ + {"name": "reference", "type": "MissingType"} + ]} + SCHEMA + end + + assert_equal '"MissingType" is not a schema we know about.', error.message + end end