class RoadForest::PathMatcher::Node

Attributes

statement[RW]

Public Class Methods

find_child_nodes(edge) click to toggle source
# File lib/roadforest/path-matcher.rb, line 264
def self.find_child_nodes(edge)
  edge.graph.query(edge.pattern_hash).map do |statement|
    next if edge.stem.has_key?(statement)

    Node.new do |node|
      node.from(edge, statement)
    end
  end
end

Public Instance Methods

accepting?() click to toggle source
# File lib/roadforest/path-matcher.rb, line 336
def accepting?
  @accepting ||=
    if excluded?
      false
    elsif children.nil?
      false
    elsif reject_value?
      false
    else
      child_edges.all? do |edge|
        edge.accepting?
      end
    end
end
build_children() click to toggle source
# File lib/roadforest/path-matcher.rb, line 368
def build_children
  ForwardEdge.find_child_edges(self) + ReverseEdge.find_child_edges(self)
end
excluded?() click to toggle source
# File lib/roadforest/path-matcher.rb, line 311
def excluded?
  stem.has_key?(statement)
end
from(edge, statement) click to toggle source
# File lib/roadforest/path-matcher.rb, line 274
def from(edge, statement)
  self.parent = edge

  self.pattern = edge.pattern
  self.graph = edge.graph

  self.stem = edge.stem
  self.repeats = edge.repeats.merge({edge.pattern_step => edge.step_count + 1})
  self.graph_term = edge.graph_node(statement)

  self.statement = statement

  self.pattern_step = edge.pattern_step
  self.after = edge.after
  self.before = edge.before
  self.order = edge.order
  self.type = edge.type
end
immediate_match() click to toggle source
# File lib/roadforest/path-matcher.rb, line 307
def immediate_match
  statement.nil? ? {} : { statement => true }
end
notify_resolved(child) click to toggle source
# File lib/roadforest/path-matcher.rb, line 315
def notify_resolved(child)

end
reject_value?() click to toggle source
# File lib/roadforest/path-matcher.rb, line 319
def reject_value?
  unless before.nil? and after.nil?
    return true if not (before.nil? or before > graph_term)
    return true if not (after.nil? and after < graph_term)
  end

  unless type.nil?
    return true if graph_term.datatype != type
  end

  return false
end
rejecting?() click to toggle source
# File lib/roadforest/path-matcher.rb, line 351
def rejecting?
  @rejecting ||=
    begin
      if excluded?
        true
      elsif children.nil?
        false
      elsif reject_value?
        true
      else
        child_edges.any? do |edge|
          edge.rejecting?
        end
      end
    end
end
resolved?() click to toggle source
# File lib/roadforest/path-matcher.rb, line 332
def resolved?
  @resolved ||= accepting? or rejecting?
end
to_s() click to toggle source
# File lib/roadforest/path-matcher.rb, line 295
def to_s
  state = case
          when !resolved?
            "?"
          when accepting?
            "Acpt"
          when rejecting?
            "Rjct"
          end
  "[#{self.class.name.sub(/.*::/,'')} #{statement} #{graph_term}/#{pattern_step} #{state} ]"
end