Class: FuzzyVersionMatcher::Node

Inherits:
Object
  • Object
show all
Defined in:
lib/fuzzy_version_matcher.rb

Instance Method Summary collapse

Constructor Details

#initializeNode

Returns a new instance of Node.



5
6
7
8
9
# File 'lib/fuzzy_version_matcher.rb', line 5

def initialize
  @nodes = {}
  @version = nil
  @segment = nil
end

Instance Method Details

#add_node(version_string, version_segments = nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/fuzzy_version_matcher.rb', line 11

def add_node(version_string, version_segments = nil)
  # If version_segments is nil we are the top node, create a version_segments array
  version_segments ||= string_to_segments(version_string)

  next_segment = version_segments.shift
  if version_segments.size == 0
    # We got to the last remaining version segment, we need to store the whole version string in this node
    @version = version_string
  else
    @nodes[next_segment] = self.class.new unless @nodes.has_key? next_segment
    @nodes[next_segment].add_node(version_string, version_segments)
  end
  @segment = next_segment
end

#search(version_string, version_segments = nil) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/fuzzy_version_matcher.rb', line 26

def search(version_string, version_segments = nil)
  # If version_segments is nil we are the top node, create a version_segments array
  version_segments ||= string_to_segments(version_string)

  next_segment = version_segments.shift
  if @nodes.has_key? next_segment
    @nodes[next_segment].search(version_string, version_segments)
  else
    return (!@version.nil? && version_segments.size == 0) ? @version : traverse_high
  end
end