Module: Rager::Chat::Schema

Extended by:
T::Sig
Defined in:
lib/rager/chat/schema.rb

Class Method Summary collapse

Class Method Details

.dry_schema_to_json_schema(schema) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/rager/chat/schema.rb', line 17

def self.dry_schema_to_json_schema(schema)
  json_schema_original = schema.json_schema
  json_schema = JSON.parse(JSON.generate(json_schema_original))

  make_strict_recursive!(json_schema)

  json_schema
end

.make_strict_recursive!(node) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/rager/chat/schema.rb', line 27

def self.make_strict_recursive!(node)
  case node
  when Hash
    %w[minLength maxLength not].each { |key| node.delete(key) }

    case node["type"]
    when "object"
      node["additionalProperties"] = false
      make_strict_recursive!(node["properties"]) if node.key?("properties")
    when "array"
      make_strict_recursive!(node["items"]) if node.key?("items")
    end

    node.each_value { |v| make_strict_recursive!(v) }
  when Array
    node.each { |item| make_strict_recursive!(item) }
  end
end