Module: Lite::Validation::Validator::Node::Implementation::Identity

Included in:
Abstract
Defined in:
lib/lite/validation/validator/node/implementation/identity.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.display_path(full_path) ⇒ Object



26
27
28
29
30
31
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 26

def self.display_path(full_path)
  case full_path
  when Array then "[#{full_path.map { |element| display_path_element(element) }.join(',')}]"
  else full_path
  end
end

.display_path_element(element) ⇒ Object



33
34
35
36
37
38
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 33

def self.display_path_element(element)
  case element
  when Array then "(#{element.map { |path| display_path(path) }.join(',')})"
  else element
  end
end

.ensure_identical!(origin, current) ⇒ Object



14
15
16
17
18
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 14

def self.ensure_identical!(origin, current)
  return if origin.identical?(current)

  raise_error!(origin, current, origin.send(:intent) == current.send(:intent) ? :origin : :intent)
end

.intent_idObject



9
10
11
12
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 9

def self.intent_id
  @count ||= 0
  @count += 1
end

.raise_error!(origin, current, key) ⇒ Object

Raises:



20
21
22
23
24
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 20

def self.raise_error!(origin, current, key)
  full = key == :intent
  message = "Not the #{key}: #{origin.send(:display_path, full)} <> #{current.send(:display_path, full)}"
  raise Error::Fatal, message
end

Instance Method Details

#display_path(full) ⇒ Object



61
62
63
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 61

def display_path(full)
  Identity.display_path(full_path(full))
end

#full_path(full) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 53

def full_path(full)
  if root?
    full ? path : []
  else
    parent.full_path(full) + path
  end
end

#identical?(other) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
43
44
45
46
47
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 40

def identical?(other)
  return true if other.equal?(self)
  return false unless other.path == path
  return true if other.parent.equal?(parent)
  return false if other.root? || root?

  other.parent.identical?(parent)
end

#intentObject



69
70
71
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 69

def intent
  root? ? path.first : parent.intent
end

#keyObject



49
50
51
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 49

def key
  path.last
end

#path_to(ancestor) ⇒ Object



65
66
67
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 65

def path_to(ancestor)
  trace(ancestor, trace: [])
end

#root?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 73

def root?
  parent.nil?
end