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

Public Instance Methods

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