class Hocon::Impl::Path
Constants
- ConfigBugOrBrokenError
- ConfigImplUtil
Attributes
Private Class Methods
Source
# File lib/hocon/impl/path.rb, line 59 def self.from_path_iterator(path_iterator) # This method was translated from the Path constructors in the # Java hocon library that takes in an iterator of Paths # # It figures out what @first and @remainder should be, then # pass those to the ruby constructor # Try to get first path from iterator # Ruby iterators have no .hasNext() method like java # So we try to catch the StopIteration exception begin first_path = path_iterator.next rescue StopIteration raise Hocon::ConfigError::ConfigBugOrBrokenError("empty path") end new_first = first_path.first pb = Hocon::Impl::PathBuilder.new unless first_path.remainder.nil? pb.append_path(first_path.remainder) end # Skip first path path_iterator.drop(1).each do |path| pb.append_path(path) end new_remainder = pb.result self.new(new_first, new_remainder) end
Source
# File lib/hocon/impl/path.rb, line 50 def self.from_path_list(path_list) # This method was translated from the Path constructors in the # Java hocon library that take in a list of Paths # # It just passes an iterator to self.from_path_iterator, which # will return a new Path object from_path_iterator(path_list.each) end
Source
# File lib/hocon/impl/path.rb, line 21 def self.from_string_list(elements) # This method was translated from the Path constructor in the # Java hocon library that has this signature: # Path(String... elements) # # It figures out what @first and @remainder should be, then # pass those to the ruby constructor if elements.length == 0 raise Hocon::ConfigError::ConfigBugOrBrokenError.new("empty path") end new_first = elements.first if elements.length > 1 pb = Hocon::Impl::PathBuilder.new # Skip first element elements.drop(1).each do |element| pb.append_key(element) end new_remainder = pb.result else new_remainder = nil end self.new(new_first, new_remainder) end
Source
# File lib/hocon/impl/path.rb, line 204 def self.has_funky_chars?(s) length = s.length if length == 0 return false end s.chars.each do |c| unless (c =~ /[[:alnum:]]/) || (c == '-') || (c == '_') return true end end false end
this doesn’t have a very precise meaning, just to reduce noise from quotes in the rendered path for average cases
Source
# File lib/hocon/impl/path.rb, line 13 def initialize(first, remainder) # first: String, remainder: Path @first = first @remainder = remainder end
Source
# File lib/hocon/impl/path.rb, line 255 def self.new_key(key) return self.new(key, nil) end
Source
# File lib/hocon/impl/path.rb, line 259 def self.new_path(path) Hocon::Impl::PathParser.parse_path(path) end
Private Instance Methods
Source
# File lib/hocon/impl/path.rb, line 187 def ==(other) if other.is_a? Hocon::Impl::Path that = other first == that.first && ConfigImplUtil.equals_handling_nil?(remainder, that.remainder) else false end end
Source
# File lib/hocon/impl/path.rb, line 219 def append_to_string_builder(sb) if self.class.has_funky_chars?(@first) || @first.empty? sb << ConfigImplUtil.render_json_string(@first) else sb << @first end unless @remainder.nil? sb << "." @remainder.append_to_string_builder(sb) end end
Source
# File lib/hocon/impl/path.rb, line 196 def hash remainder_hash = remainder.nil? ? 0 : remainder.hash 41 * (41 + first.hash) + remainder_hash end
Source
# File lib/hocon/impl/path.rb, line 115 def last p = self while p.remainder != nil p = p.remainder end p.first end
Source
# File lib/hocon/impl/path.rb, line 132 def length count = 1 p = remainder while p != nil do count += 1 p = p.remainder end count end
Source
# File lib/hocon/impl/path.rb, line 101 def parent if remainder.nil? return nil end pb = Hocon::Impl::PathBuilder.new p = self while not p.remainder.nil? pb.append_key(p.first) p = p.remainder end pb.result end
Source
# File lib/hocon/impl/path.rb, line 123 def prepend(to_prepend) pb = Hocon::Impl::PathBuilder.new pb.append_path(to_prepend) pb.append_path(self) pb.result end
Source
# File lib/hocon/impl/path.rb, line 249 def render sb = StringIO.new append_to_string_builder(sb) sb.string end
toString() is a debugging-oriented version while this is an error-message-oriented human-readable one.
Source
# File lib/hocon/impl/path.rb, line 171 def starts_with(other) my_remainder = self other_remainder = other if other_remainder.length <= my_remainder.length while ! other_remainder.nil? if ! (other_remainder.first == my_remainder.first) return false end my_remainder = my_remainder.remainder other_remainder = other_remainder.remainder end return true end false end
Source
# File lib/hocon/impl/path.rb, line 142 def sub_path(first_index, last_index) if last_index < first_index raise ConfigBugOrBrokenError.new("bad call to sub_path") end from = sub_path_to_end(first_index) pb = Hocon::Impl::PathBuilder.new count = last_index - first_index while count > 0 do count -= 1 pb.append_key(from.first) from = from.remainder if from.nil? raise ConfigBugOrBrokenError.new("sub_path last_index out of range #{last_index}") end end pb.result end
Source
# File lib/hocon/impl/path.rb, line 161 def sub_path_to_end(remove_from_front) count = remove_from_front p = self while (not p.nil?) && count > 0 do count -= 1 p = p.remainder end p end
translated from ‘subPath(int removeFromFront)` upstream
Source
# File lib/hocon/impl/path.rb, line 232 def to_s sb = StringIO.new sb << "Path(" append_to_string_builder(sb) sb << ")" sb.string end