Module: GenerativeUI::Attributes::LocalSchemaBuilders

Included in:
Schema
Defined in:
lib/generative_ui/attributes.rb

Instance Method Summary collapse

Instance Method Details

#object_schema(description: nil, of: nil, &block) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/generative_ui/attributes.rb', line 43

def object_schema(description: nil, of: nil, &block)
  return determine_object_reference(of, description) if of

  sub_schema = Class.new(self)
  result = sub_schema.class_eval(&block)

  if result.is_a?(Hash) && result['$ref'] && sub_schema.properties.empty?
    result.merge(description ? { description: description } : {})
  elsif schema_class?(result) && sub_schema.properties.empty?
    schema_class_to_inline_schema(result).merge(description ? { description: description } : {})
  else
    {
      type: 'object',
      properties: sub_schema.properties,
      required: sub_schema.required_properties,
      additionalProperties: sub_schema.additional_properties,
      description: description
    }.compact
  end
end