require "logger" require "bigdecimal" require "date" require "time" require "bundler/setup" require "zeitwerk" loader = Zeitwerk::Loader.for_gem loader.setup module DataModel extend self # Scan a schema and create a data model, which is a configured type. # @param schema [Array] the schema to define # @param registry [Registry] the registry to use # @return [Model] the model built from the schema def define(schema, registry: Registry.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 # Register a global type, which is available to all models. # @param name [Symbol] the name of the Type # @param type [Type] the type to register # @return [void] def register_global_type(name, type) Registry.register(name, type) end end