Class: Decode::Language::Reference
- Inherits:
-
Object
- Object
- Decode::Language::Reference
- Defined in:
- lib/decode/language/reference.rb
Overview
An reference which can be resolved to zero or more definitions.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#identifier ⇒ Object
readonly
The identifier part of the reference.
-
#language ⇒ Object
readonly
The language associated with this reference.
Instance Method Summary collapse
-
#absolute? ⇒ Boolean
Whether the reference starts at the base of the lexical tree.
- #best(definitions) ⇒ Object
-
#initialize(identifier, language) ⇒ Reference
constructor
Initialize the reference.
- #inspect ⇒ Object
- #lexical_path ⇒ Object
-
#path ⇒ Object
The lexical path of the reference.
- #relative? ⇒ Boolean
- #split(identifier) ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(identifier, language) ⇒ Reference
Initialize the reference.
27 28 29 30 31 32 33 |
# File 'lib/decode/language/reference.rb', line 27 def initialize(identifier, language) @identifier = identifier @language = language @lexical_path = nil @path = nil end |
Instance Attribute Details
#identifier ⇒ Object (readonly)
The identifier part of the reference.
45 46 47 |
# File 'lib/decode/language/reference.rb', line 45 def identifier @identifier end |
#language ⇒ Object (readonly)
The language associated with this reference.
48 49 50 |
# File 'lib/decode/language/reference.rb', line 48 def language @language end |
Instance Method Details
#absolute? ⇒ Boolean
Whether the reference starts at the base of the lexical tree.
51 52 53 |
# File 'lib/decode/language/reference.rb', line 51 def absolute? !self.relative? end |
#best(definitions) ⇒ Object
69 70 71 72 73 74 75 76 77 |
# File 'lib/decode/language/reference.rb', line 69 def best(definitions) prefix, name = lexical_path.last definitions.select do |definition| definition.language == @language && ( prefix.nil? || definition.start_with?(prefix) ) end end |
#inspect ⇒ Object
39 40 41 |
# File 'lib/decode/language/reference.rb', line 39 def inspect "\#<#{self.class} {#{self.identifier}}>" end |
#lexical_path ⇒ Object
65 66 67 |
# File 'lib/decode/language/reference.rb', line 65 def lexical_path @lexical_path ||= self.split(@identifier) end |
#path ⇒ Object
The lexical path of the reference.
81 82 83 |
# File 'lib/decode/language/reference.rb', line 81 def path @path ||= self.lexical_path.map{|_, name| name.to_sym} end |
#relative? ⇒ Boolean
55 56 57 58 59 |
# File 'lib/decode/language/reference.rb', line 55 def relative? prefix, name = self.lexical_path.first return prefix.nil? end |
#split(identifier) ⇒ Object
61 62 63 |
# File 'lib/decode/language/reference.rb', line 61 def split(identifier) identifier.scan(/(\W+)?(\w+)/) end |
#to_s ⇒ Object
35 36 37 |
# File 'lib/decode/language/reference.rb', line 35 def to_s "{#{self.language} #{self.identifier}}" end |