Skip to content

Commit

Permalink
Adding methods to node traverser
Browse files Browse the repository at this point in the history
  • Loading branch information
maxdemarzi committed Dec 9, 2010
1 parent 07b30d1 commit 8b20bea
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 9 deletions.
1 change: 0 additions & 1 deletion lib/neography.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ def find_and_require_user_defined_code

DIRECTIONS = ["incoming", "in", "outgoing", "out", "all", "both"]


require 'httparty'
require 'json'
require 'logger'
Expand Down
105 changes: 97 additions & 8 deletions lib/neography/node_traverser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,111 @@ module Neography
class NodeTraverser
include Enumerable

attr_accessor :order, :uniqueness, :depth, :prune, :filter
attr_accessor :order, :uniqueness, :depth, :prune, :filter, :relationships

def initialize(from, types = nil, dir=nil)
def initialize(from, types = nil, dir = "all" )
@from = from
@depth = 1
@order = "depth first"
@uniqueness = "none"
if types.nil? || dir.nil?
# @td = org.neo4j.kernel.impl.traversal.TraversalDescriptionImpl.new.breadth_first()
@relationships = Array.new
types.each do |type|
@relationships << {"type" => type.to_s, "direction" => dir.to_s }
end unless types.nil?
end

def <<(other_node)
create(other_node)
self
end

def create(other_node)
case @relationships.first["direction"]
when "outgoing", "out"
rel = Neography::Relationship.new(@from.neo_server.create_relationship(@relationships.first["type"], @from, other_node))
when "incoming", "in"
rel = Neography::Relationship.new(@from.neo_server.create_relationship(@relationships.first["type"], other_node, @from))
else
rel << @from.neo_server.create_relationship(@relationships.first["type"], @from, other_node)
rel << @from.neo_server.create_relationship(@relationships.first["type"], other_node, @from)
end
rel
end

def both(type)
@relationships << {"type" => type.to_s, "direction" => "all"}
self
end

def outgoing(type)
@relationships << {"type" => type.to_s, "direction" => "out"}
self
end

def incoming(type)
@relationships << {"type" => type.to_s, "direction" => "in"}
self
end

def filter(language, name)
@filter["language"] = language
if language == "builtin"
@filter["name"] = name
else
# @types = type_to_java(type)
# @dir = dir_to_java(dir)
# @td = org.neo4j.kernel.impl.traversal.TraversalDescriptionImpl.new.breadth_first().relationships(@type, @dir)
@filter["body"] = name
end
self
end

def prune(language, body)
@prune["language"] = language
@prune["body"] = body
self
end

def depth(d)
@depth = d
self
end

def include_start_node
@filter["language"] = "builtin"
@filter["name"] = "all"
self
end

def size
[*self].size
end

alias_method :length, :size

def [](index)
each_with_index {|node,i| break node if index == i}
end

def empty?
first == nil
end

def each
iterator.each do |i|
node = Neography::Node.new(i)
node.neo_server = @from.neo_server
yield node
end
end

def iterator
options = Hash.new
options["order"] = @order
options["uniqueness"] = @uniqueness
options["relationships"] = @relationships
options["prune evaluator"] = @prune unless @prune.nil?
options["return filter"] = @filter unless @filter.nil?
options["depth"] = @depth unless @depth.nil?
@from.neo_server.traverse(@from, "nodes", options)
end

end

end

0 comments on commit 8b20bea

Please sign in to comment.