Module: Typelizer::OpenAPI

Defined in:
lib/typelizer/openapi.rb

Constant Summary collapse

SUPPORTED_VERSIONS =
["3.0", "3.1"].freeze
OPENAPI_TYPES =
%i[integer number string boolean object array null].freeze
TS_OBJECT_TYPES =
%w[any unknown never Record Partial Pick Omit].freeze
COLUMN_TYPE_MAP =
{
  integer: {type: :integer},
  bigint: {type: :integer, format: :int64},
  decimal: {type: :number, format: :double},
  float: {type: :number, format: :float},
  boolean: {type: :boolean},
  string: {type: :string},
  text: {type: :string},
  citext: {type: :string},
  uuid: {type: :string, format: :uuid},
  date: {type: :string, format: :date},
  datetime: {type: :string, format: :"date-time"},
  time: {type: :string, format: :time},
  json: {type: :object},
  jsonb: {type: :object},
  binary: {type: :string, format: :binary},
  inet: {type: :string},
  cidr: {type: :string}
}.freeze

Class Method Summary collapse

Class Method Details

.property_schema(property, openapi_version: "3.0", type_mapping: Typelizer.configuration.type_mapping) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/typelizer/openapi.rb', line 44

def property_schema(property, openapi_version: "3.0", type_mapping: Typelizer.configuration.type_mapping)
  if property.type.is_a?(Array)
    return union_schema(property, openapi_version: openapi_version)
  end

  definition = base_type(property, openapi_version: openapi_version, type_mapping: type_mapping)
  ref = definition.delete("$ref")

  definition = if ref
    ref_schema(ref, property, openapi_version: openapi_version)
  else
    inline_schema(definition, property, openapi_version: openapi_version)
  end

  definition = wrap_traits(definition, property, openapi_version: openapi_version)
  wrap_multi(definition, property, openapi_version: openapi_version)
end

.schema_for(interface, openapi_version: "3.0") ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/typelizer/openapi.rb', line 31

def schema_for(interface, openapi_version: "3.0")
  validate_version!(openapi_version)

  type_mapping = interface.respond_to?(:config) ? interface.config.type_mapping : Typelizer.configuration.type_mapping
  required_props = interface.properties.reject(&:optional).map(&:name)
  schema = {
    type: :object,
    properties: interface.properties.to_h { |prop| [prop.name, property_schema(prop, openapi_version: openapi_version, type_mapping: type_mapping)] }
  }
  schema[:required] = required_props if required_props.any?
  schema
end