in lang/ruby/lib/avro/schema_validator.rb [117:146]
def validate_simple(expected_schema, logical_datum, path, result, options)
datum = resolve_datum(expected_schema, logical_datum, options[:encoded])
validate_type(expected_schema)
case expected_schema.type_sym
when :null
return type_mismatch_error(expected_schema, datum, path, result) unless datum.nil?
when :boolean
return type_mismatch_error(expected_schema, datum, path, result) unless BOOLEAN_VALUES.include?(datum)
when :string, :bytes
return type_mismatch_error(expected_schema, datum, path, result) unless datum.is_a?(String)
when :int
return type_mismatch_error(expected_schema, datum, path, result) unless datum.is_a?(Integer)
result.add_error(path, "out of bound value #{datum}") unless INT_RANGE.cover?(datum)
when :long
return type_mismatch_error(expected_schema, datum, path, result) unless datum.is_a?(Integer)
result.add_error(path, "out of bound value #{datum}") unless LONG_RANGE.cover?(datum)
when :float, :double
return type_mismatch_error(expected_schema, datum, path, result) unless datum.is_a?(Float) || datum.is_a?(Integer) || datum.is_a?(BigDecimal)
when :fixed
if datum.is_a? String
result.add_error(path, fixed_string_message(expected_schema.size, datum)) unless datum.bytesize == expected_schema.size
else
result.add_error(path, "expected fixed with size #{expected_schema.size}, got #{actual_value_message(datum)}")
end
when :enum
result.add_error(path, enum_message(expected_schema.symbols, datum)) unless expected_schema.symbols.include?(datum)
end
end