Class: DataModel::TypeRegistry

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Includes:
Errors
Defined in:
lib/data_model/type_registry.rb

Overview

TypeRegistry allows for different type implementations to be used by the scanner. It also acts as an error message registry, mostly for pragmatic reasons.

Constant Summary

Constants included from Errors

Errors::TClassCtx, Errors::TClassValueCtx, Errors::TErrorMessageBuilder, Errors::TErrorMessages, Errors::TFormatCtx, Errors::TSetCtx, Errors::TTemporal, Errors::TWithinCtx, Errors::TWithinTemporalCtx

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Errors

#blank_error, #blank_error_message, #coerce_error, #coerce_error_message, #earliest_error, #early_error_message, #error_message, #error_message_builders, #error_messages, #exclusion_error, #exclusion_error_message, #extra_keys_error, #extra_keys_error_message, #format_error, #format_error_message, #inclusion_error, #inclusion_error_message, #late_error_message, #latest_error, #max_error, #max_error_message, #min_error, #min_error_message, #missing_error, #missing_error_message, #register_error_message, #set_error_class, #type_error, #type_error_message

Constructor Details

#initialize(types: self.class.default_types, errors: nil) ⇒ TypeRegistry

Returns a new instance of TypeRegistry.



31
32
33
34
35
36
37
38
# File 'lib/data_model/type_registry.rb', line 31

def initialize(types: self.class.default_types, errors: nil)
	if errors
		errors.each { |type, builder| register_error_message(type, &builder) }
	end

	@types = T.let({}, TTypeMap)
	types.each { |(name, type)| register(name, type) }
end

Class Method Details

.default_typesObject



12
13
14
# File 'lib/data_model/type_registry.rb', line 12

def self.default_types
	Builtin.types
end

.instance(types: default_types, errors: nil) ⇒ Object



18
19
20
# File 'lib/data_model/type_registry.rb', line 18

def self.instance(types: default_types, errors: nil)
	@instance ||= T.let(new(types:, errors:), T.nilable(TypeRegistry))
end

.register(name, type) ⇒ Object



24
25
26
# File 'lib/data_model/type_registry.rb', line 24

def self.register(name, type)
	instance.register(name, type)
end

Instance Method Details

#register(name, type) ⇒ Object



42
43
44
# File 'lib/data_model/type_registry.rb', line 42

def register(name, type)
	@types[name] = type
end

#type(name, args: {}, params: nil) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/data_model/type_registry.rb', line 54

def type(name, args: {}, params: nil)
	if !type?(name)
		raise "#{name} is not registered as a type"
	end

	t = @types.fetch(name).new(args, registry: self)

	if params
		t.configure(params)
	end

	return t
end

#type?(name) ⇒ Boolean

Returns:



48
49
50
# File 'lib/data_model/type_registry.rb', line 48

def type?(name)
	@types.key?(name)
end