class Avromatic::Model::Builder

This class implements generating models from Avro schemas.

Attributes

config[R]
mod[R]

Public Class Methods

model(**options, &block) click to toggle source

For options see Avromatic::Model.build

# File lib/avromatic/model/builder.rb, line 25
def self.model(**options, &block)
  Class.new do
    include Avromatic::Model::Builder.new(**options).mod

    # Name is required for attribute validations on an anonymous class.
    def self.name
      super || (@name ||= config.avro_schema.name.classify)
    end

    class_eval(&block) if block
  end
end
name() click to toggle source

Name is required for attribute validations on an anonymous class.

Calls superclass method
# File lib/avromatic/model/builder.rb, line 30
def self.name
  super || (@name ||= config.avro_schema.name.classify)
end
new(**options) click to toggle source

For options see Avromatic::Model.build

# File lib/avromatic/model/builder.rb, line 39
def initialize(**options)
  @mod = Module.new
  @config = Avromatic::Model::Configuration.new(**options)
  define_included_method
end

Public Instance Methods

inclusions() click to toggle source
# File lib/avromatic/model/builder.rb, line 45
def inclusions
  [
    Avromatic::Model::Configurable,
    Avromatic::Model::NestedModels,
    Avromatic::Model::Validation,
    Avromatic::Model::Attributes,
    Avromatic::Model::ValueObject,
    Avromatic::Model::RawSerialization,
    Avromatic::Model::MessagingSerialization
  ]
end

Private Instance Methods

define_included_method() click to toggle source
# File lib/avromatic/model/builder.rb, line 59
def define_included_method
  local_mod = mod
  local_builder = self
  mod.define_singleton_method(:included) do |model_class|
    model_class.include(*local_builder.inclusions)
    model_class.config = local_builder.config
    model_class.add_avro_fields(local_mod)
  end
end