Class: Dry::Schema::Message

Inherits:
Object
  • Object
show all
Extended by:
Initializer
Defined in:
lib/dry/schema/message.rb,
lib/dry/schema/message/or.rb,
lib/dry/schema/extensions/hints.rb,
lib/dry/schema/message/or/abstract.rb,
lib/dry/schema/message/or/multi_path.rb,
lib/dry/schema/message/or/single_path.rb

Overview

Hint-specific Message extensions

See Also:

Direct Known Subclasses

Hint

Defined Under Namespace

Modules: Or

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#argsArray (readonly)

Optional list of arguments used by the predicate

Returns:

  • (Array)


37
# File 'lib/dry/schema/message.rb', line 37

option :args, default: proc { EMPTY_ARRAY }

#inputObject (readonly)

The input value

Returns:

  • (Object)


42
# File 'lib/dry/schema/message.rb', line 42

option :input

#metaHash (readonly)

Arbitrary meta data

Returns:

  • (Hash)


47
# File 'lib/dry/schema/message.rb', line 47

option :meta, optional: true, default: proc { EMPTY_HASH }

#pathString (readonly)

Path to the value

Returns:

  • (String)


27
# File 'lib/dry/schema/message.rb', line 27

option :path

#predicateSymbol (readonly)

Predicate identifier that was used to produce a message

Returns:

  • (Symbol)


32
# File 'lib/dry/schema/message.rb', line 32

option :predicate

#textString (readonly)

Message text representation created from a localized template

Returns:

  • (String)


22
# File 'lib/dry/schema/message.rb', line 22

option :text

Instance Method Details

#<=>(other) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

See which message is higher in the hierarchy



96
97
98
99
100
101
102
103
104
105
# File 'lib/dry/schema/message.rb', line 96

def <=>(other)
  l_path = _path
  r_path = other._path

  unless l_path.same_root?(r_path)
    raise ArgumentError, "Cannot compare messages from different root paths"
  end

  l_path <=> r_path
end

#_pathObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



108
109
110
# File 'lib/dry/schema/message.rb', line 108

def _path
  @_path ||= Path[path]
end

#dumpString, Hash Also known as: to_s

Dump the message to a representation suitable for the message set hash

Returns:

  • (String, Hash)


54
55
56
# File 'lib/dry/schema/message.rb', line 54

def dump
  @dump ||= meta.empty? ? text : {text: text, **meta}
end

#eql?(other) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

See if another message is the same

If a string is passed, it will be compared with the text

Parameters:

Returns:

  • (Boolean)


81
82
83
# File 'lib/dry/schema/message.rb', line 81

def eql?(other)
  other.is_a?(String) ? text == other : super
end

#hint?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


42
43
44
# File 'lib/dry/schema/extensions/hints.rb', line 42

def hint?
  false
end

#to_hHash

Dump the message into a hash

The hash will be deeply nested if the path's size is greater than 1

Returns:

  • (Hash)

See Also:



68
69
70
# File 'lib/dry/schema/message.rb', line 68

def to_h
  @to_h ||= _path.to_h(dump)
end

#to_or(root) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



86
87
88
89
90
91
# File 'lib/dry/schema/message.rb', line 86

def to_or(root)
  clone = dup
  clone.instance_variable_set("@path", path - root.to_a)
  clone.instance_variable_set("@_path", nil)
  clone
end