class Lutaml::Model::Schema::BaseSchema

def generate(klass, options = {})

def generate(klass, options = {})
  schema = new(
    klass,
    schema: options[:schema],
    id: options[:id],
    title: options[:title],
    description: options[:description],
  ).generate_schema_hash
  format_schema(schema, options)
end

def generate_definitions(klass)

def generate_definitions(klass)
  Generator::DefinitionsCollection.from_class(klass).to_schema
end

def generate_polymorphic_definitions(attr)

def generate_polymorphic_definitions(attr)
  return {} unless polymorphic?(attr)
  attr.options[:polymorphic].each_with_object({}) do |child, result|
    result.merge!(generate_definitions(child))
  end
end

def generate_schema_hash

def generate_schema_hash
  {
    "$schema" => schema,
    "$id" => id,
    "description" => description,
    "$ref" => "#/$defs/#{klass.name.gsub('::', '_')}",
    "$defs" => generate_definitions(klass),
  }.compact
end

def initialize(klass, schema:, id: nil, title: nil, description: nil)

def initialize(klass, schema:, id: nil, title: nil, description: nil)
  @schema = schema
  @klass = klass
  @id = id
  @title = title
  @description = description
end

def polymorphic?(attr)

def polymorphic?(attr)
  Utils.present?(attr.options[:polymorphic])
end