class Anchor::JSONSchema::SchemaGenerator
def call
def call result = { "$schema" => "https://json-schema.org/draft-07/schema", title: "Schema", } result.merge!(type_property(root_object)) result["$defs"] = definitions result.to_json end
def definitions
-
(Hash{Symbol, String => Anchor::Types})
-
def definitions resources.map do |resource| { resource.anchor_schema_name => type_property(resource.express( context: @context, include_all_fields: @include_all_fields, exclude_fields: @exclude_fields.nil? ? [] : @exclude_fields[r.anchor_schema_name.to_sym], )), } end.reduce(&:merge) end
def initialize(register:, context: {}, include_all_fields: false, exclude_fields: nil) # rubocop:disable Lint/MissingSuper
def initialize(register:, context: {}, include_all_fields: false, exclude_fields: nil) # rubocop:disable Lint/MissingSuper @register = register @context = context @include_all_fields = include_all_fields @exclude_fields = exclude_fields end
def resources
def resources @resources ||= @register.resources.map { |r| Anchor::JSONSchema::Resource.new(r) } end
def root_object
-
(Anchor::Types::Object)
-
def root_object properties = resources.map do |resource| Types::Property.new(resource.anchor_schema_name.underscore, Types::Reference.new(resource.anchor_schema_name)) end Types::Object.new(properties) end