Sha256: 37205b9633df8706f21397b98a2346cf90f775fe92bd8eb0331c46def86c12ab

Contents?: true

Size: 1.02 KB

Versions: 2

Compression:

Stored size: 1.02 KB

Contents

# typed: strict

require "logger"
require "bigdecimal"
require "date"
require "time"

require "bundler/setup"
require "zeitwerk"
require "sorbet-runtime"

loader = T.let(Zeitwerk::Loader.for_gem, Zeitwerk::Loader)
loader.setup

module DataModel
	extend T::Sig
	extend self

	TSchema = T.type_alias { T::Array[Object] }
	TData = T.type_alias { Object }

	# an error is a tuple of [error_type, error_context], where context
	# provides additional information about the error
	TError = T.type_alias { [Symbol, Object] }

	# a map of symbol => type, suitable for sending to a TypeRegistry
	TTypeMap = T.type_alias { T::Hash[Symbol, T.class_of(Type)] }

	# Scan a schema and create a data model, which is a configured type.
	sig { params(schema: TSchema, registry: TypeRegistry).returns(Model) }
	def define(schema, registry: TypeRegistry.instance)
		scanned = Scanner.scan(schema, registry)

		type = registry.type(
			scanned.type,
			args: scanned.args,
			params: scanned.params,
		)

		model = Model.new(schema, type)

		return model
	end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
data_model-0.2.0 lib/data_model.rb
data_model-0.1.0 lib/data_model.rb