Class: DataModel::Error

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

Overview

Error is a class that holds errors.

Constant Summary collapse

TErrorList =
T.type_alias { T::Array[TError] }
TErrorMap =
T.type_alias { T::Hash[Symbol, TErrorList] }

Constants included from Errors

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

Instance Method Summary collapse

Methods included from Errors

#blank_error, #blank_error_message, #coerce_error, #coerce_error_message, #earliest_error, #early_error_message, 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, #type_error, #type_error_message

Constructor Details

#initializeError

Returns a new instance of Error.



13
14
15
16
# File 'lib/data_model/error.rb', line 13

def initialize
	@base = T.let([], TErrorList)
	@children = T.let({}, TErrorMap)
end

Instance Method Details

#add(err, child: nil) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/data_model/error.rb', line 64

def add(err, child: nil)
	if child.is_a?(Array)
		child = child.join(".").to_sym
	end

	if child == :base
		raise "child errors may not be named :base"
	end

	errs = child ? @children[child] ||= [] : @base
	errs.push(err)
end

#allObject Also known as: to_h



32
33
34
# File 'lib/data_model/error.rb', line 32

def all
	return children.merge(base:)
end

#any?(&blk) ⇒ Boolean

Returns:



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/data_model/error.rb', line 40

def any?(&blk)
	if !blk
		return !@base.empty? || !@children.empty?
	end

	any = T.let(false, T::Boolean)

	for error_list in all.values
		any = error_list.any?(&blk)
		if any
			break
		end
	end

	return any
end

#baseObject



20
21
22
# File 'lib/data_model/error.rb', line 20

def base
	return @base
end

#childrenObject



26
27
28
# File 'lib/data_model/error.rb', line 26

def children
	return @children
end

#empty?Boolean

Returns:



58
59
60
# File 'lib/data_model/error.rb', line 58

def empty?
	!any?
end

#merge_child(name, child) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
# File 'lib/data_model/error.rb', line 78

def merge_child(name, child)
	if !child.any?
		return
	end

	for (key, error_list) in child.all
		for error in error_list
			add(error, child: [name, key])
		end
	end
end

#to_messages(registry: Registry.instance) ⇒ Object



91
92
93
# File 'lib/data_model/error.rb', line 91

def to_messages(registry: Registry.instance)
	return registry.error_messages(self)
end