class Avro::ResolutionCanonicalForm

Constants

DECIMAL_LOGICAL_TYPE

Public Class Methods

to_resolution_form(schema) click to toggle source
# File lib/avro/resolution_canonical_form.rb, line 7
def self.to_resolution_form(schema)
  new.to_resolution_form(schema)
end

Public Instance Methods

to_resolution_form(schema) click to toggle source
# File lib/avro/resolution_canonical_form.rb, line 11
def to_resolution_form(schema)
  MultiJson.dump(normalize_schema(schema))
end

Private Instance Methods

add_logical_type(schema, serialized) click to toggle source
# File lib/avro/resolution_canonical_form.rb, line 33
def add_logical_type(schema, serialized)
  if schema.logical_type == DECIMAL_LOGICAL_TYPE
    extensions = { logicalType: DECIMAL_LOGICAL_TYPE }
    extensions[:precision] = schema.precision if schema.respond_to?(:precision) && schema.precision
    extensions[:scale] = schema.scale if schema.respond_to?(:scale) && schema.scale
    serialized.merge(extensions)
  else
    serialized
  end
end
normalize_field(field) click to toggle source
Calls superclass method
# File lib/avro/resolution_canonical_form.rb, line 25
def normalize_field(field)
  extensions = {}
  extensions[:default] = field.default if field.default?
  extensions[:aliases] = field.aliases.sort if field.aliases && !field.aliases.empty?

  super.merge(extensions)
end
normalize_named_type(schema, attributes = {}) click to toggle source
Calls superclass method
# File lib/avro/resolution_canonical_form.rb, line 44
def normalize_named_type(schema, attributes = {})
  extensions = {}
  if schema.respond_to?(:default) && !schema.default.nil?
    # For enum defaults
    extensions[:default] = schema.default
  end

  aliases = schema.fullname_aliases
  extensions[:aliases] = aliases.sort unless aliases.empty?
  extensions = add_logical_type(schema, extensions)
  super.merge(extensions)
end
normalize_schema(schema) click to toggle source
Calls superclass method
# File lib/avro/resolution_canonical_form.rb, line 17
def normalize_schema(schema)
  if schema.type_sym == :bytes && schema.logical_type == DECIMAL_LOGICAL_TYPE
    add_logical_type(schema, type: schema.type)
  else
    super
  end
end