Sha256: e415f7ded07be16758deccd253fbf3fe0e041ea804f6bb58027ac678a53d2d65
Contents?: true
Size: 1.51 KB
Versions: 2
Compression:
Stored size: 1.51 KB
Contents
require "json" module Lutaml module Model module Schema class JsonSchema def self.generate(klass, options = {}) schema = { "$schema" => "https://json-schema.org/draft/2020-12/schema", "$id" => options[:id], "description" => options[:description], "$ref" => "#/$defs/#{klass.name}", "$defs" => generate_definitions(klass), }.compact options[:pretty] ? JSON.pretty_generate(schema) : schema.to_json end def self.generate_definitions(klass) { klass.name => { "type" => "object", "properties" => generate_properties(klass), "required" => klass.attributes.keys, }, } end def self.generate_properties(klass) klass.attributes.transform_values do |attr| generate_property_schema(attr) end end def self.generate_property_schema(attr) { "type" => get_json_type(attr.type) } end def self.get_json_type(type) { Lutaml::Model::Type::String => "string", Lutaml::Model::Type::Integer => "integer", Lutaml::Model::Type::Boolean => "boolean", Lutaml::Model::Type::Float => "number", Lutaml::Model::Type::Array => "array", Lutaml::Model::Type::Hash => "object", }[type] || "string" # Default to string for unknown types end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
lutaml-model-0.3.3 | lib/lutaml/model/schema/json_schema.rb |
lutaml-model-0.3.2 | lib/lutaml/model/schema/json_schema.rb |