class Avro::Schema::RecordSchema

Attributes

doc[R]
fields[R]

Public Class Methods

make_field_objects(field_data, names, namespace=nil) click to toggle source
    # File lib/avro/schema.rb
300 def self.make_field_objects(field_data, names, namespace=nil)
301   field_objects, field_names, alias_names = [], Set.new, Set.new
302   field_data.each do |field|
303     if field.respond_to?(:[]) # TODO(jmhodges) wtffffff
304       type = field['type']
305       name = field['name']
306       default = field.key?('default') ? field['default'] : :no_default
307       order = field['order']
308       doc = field['doc']
309       aliases = field['aliases']
310       new_field = Field.new(type, name, default, order, names, namespace, doc, aliases)
311       # make sure field name has not been used yet
312       if field_names.include?(new_field.name)
313         raise SchemaParseError, "Field name #{new_field.name.inspect} is already in use"
314       end
315       field_names << new_field.name
316       # make sure alias has not be been used yet
317       if new_field.aliases && alias_names.intersect?(new_field.aliases.to_set)
318         raise SchemaParseError, "Alias #{(alias_names & new_field.aliases).to_a} already in use"
319       end
320       alias_names.merge(new_field.aliases) if new_field.aliases
321     else
322       raise SchemaParseError, "Not a valid field: #{field}"
323     end
324     field_objects << new_field
325   end
326   field_objects
327 end
new(name, namespace, fields, names=nil, schema_type=:record, doc=nil, aliases=nil) click to toggle source
Calls superclass method Avro::Schema::NamedSchema::new
    # File lib/avro/schema.rb
329 def initialize(name, namespace, fields, names=nil, schema_type=:record, doc=nil, aliases=nil)
330   if schema_type == :request || schema_type == 'request'
331     @type_sym = schema_type.to_sym
332     @namespace = namespace
333     @name = nil
334     @doc = nil
335   else
336     super(schema_type, name, namespace, names, doc, nil, aliases)
337   end
338   @fields = if fields
339               RecordSchema.make_field_objects(fields, names, self.namespace)
340             else
341               {}
342             end
343 end

Public Instance Methods

fields_by_alias() click to toggle source
    # File lib/avro/schema.rb
349 def fields_by_alias
350   @fields_by_alias ||= fields.each_with_object({}) do |field, hash|
351     if field.aliases
352       field.aliases.each do |a|
353         hash[a] = field
354       end
355     end
356   end
357 end
fields_hash() click to toggle source
    # File lib/avro/schema.rb
345 def fields_hash
346   @fields_hash ||= fields.inject({}){|hsh, field| hsh[field.name] = field; hsh }
347 end
to_avro(names=Set.new) click to toggle source
Calls superclass method Avro::Schema::NamedSchema#to_avro
    # File lib/avro/schema.rb
359 def to_avro(names=Set.new)
360   hsh = super
361   return hsh unless hsh.is_a?(Hash)
362   hsh['fields'] = @fields.map {|f| f.to_avro(names) }
363   if type_sym == :request
364     hsh['fields']
365   else
366     hsh
367   end
368 end