class Lutaml::Model::Schema::Generator::DefinitionsCollection

def add_definition(definition)

def add_definition(definition)
  @definitions ||= []
  @definitions << definition
end

def from_class(klass)

def from_class(klass)
  new.tap do |collection|
    collection << Definition.new(klass)
    process_attributes(collection, klass)
  end
end

def initialize(definitions = [])

def initialize(definitions = [])
  @definitions = definitions.map do |definition|
    next definition if definition.is_a?(Definition)
    Definition.new(definition)
  end
end

def merge(collection)

def merge(collection)
  @definitions ||= []
  if collection.is_a?(Array)
    @definitions.concat(collection)
  else
    @definitions.concat(collection.definitions)
  end
end

def process_attribute(collection, attribute, register)

def process_attribute(collection, attribute, register)
  attr_type = Lutaml::Model::GlobalRegister.lookup(register).get_class(attribute.type)
  collection.merge(DefinitionsCollection.from_class(attr_type))
  process_polymorphic_types(collection, attribute)
end

def process_attributes(collection, klass)

def process_attributes(collection, klass)
  register = extract_register_from(klass)
  klass.attributes.each_value do |attribute|
    next unless attribute.serializable?(register)
    process_attribute(collection, attribute, register)
  end
end

def process_polymorphic_types(collection, attribute)

def process_polymorphic_types(collection, attribute)
  return unless attribute.options&.[](:polymorphic)
  attribute.options[:polymorphic].each do |child|
    collection.merge(DefinitionsCollection.from_class(child))
  end
end

def to_schema

def to_schema
  definitions.each_with_object({}) do |definition, schema|
    schema.merge!(definition.to_schema)
  end
end