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