Module: Lite::Validation::Validator::Node::Implementation::Identity
- Included in:
- Abstract
- Defined in:
- lib/lite/validation/validator/node/implementation/identity.rb
Class Method Summary collapse
- .display_path(full_path) ⇒ Object
- .display_path_element(element) ⇒ Object
- .ensure_identical!(origin, current) ⇒ Object
- .intent_id ⇒ Object
- .raise_error!(origin, current, key) ⇒ Object
Instance Method Summary collapse
- #display_path(full) ⇒ Object
- #full_path(full) ⇒ Object
- #identical?(other) ⇒ Boolean
- #intent ⇒ Object
- #key ⇒ Object
- #path_to(ancestor) ⇒ Object
- #root? ⇒ Boolean
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_id ⇒ Object
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
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 = "Not the #{key}: #{origin.send(:display_path, full)} <> #{current.send(:display_path, full)}" raise Error::Fatal, 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
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 |
#intent ⇒ Object
69 70 71 |
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 69 def intent root? ? path.first : parent.intent end |
#key ⇒ Object
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
73 74 75 |
# File 'lib/lite/validation/validator/node/implementation/identity.rb', line 73 def root? parent.nil? end |