Sha256: f1ac0b512639439e7729c14e8749898c931c39d314f286a1995bf2d2bee2dcf4

Contents?: true

Size: 1.95 KB

Versions: 8

Compression:

Stored size: 1.95 KB

Contents

module Neo4j

  class RelationshipTraverser
    include Enumerable
    include ToJava

    def initialize(node, types, direction)
      @node      = node
      if types.size > 1
        @types = types.inject([]) { |result, type| result << type_to_java(type) }.to_java(:'org.neo4j.graphdb.RelationshipType')
      elsif types.size == 1
        @type = type_to_java(types[0])
      end
      @direction = direction
    end

    def to_s
      if @type
        "#{self.class} [type: #{@type} dir:#{@direction}]"
      elsif @types
        "#{self.class} [types: #{@types.join(',')} dir:#{@direction}]"
      else
        "#{self.class} [types: ANY dir:#{@direction}]"
      end
    end

    def each
      iter = iterator
      while (iter.hasNext())
        rel = iter.next
        yield rel.wrapper if match_to_other?(rel)
      end
    end

    def empty?
      first == nil
    end
    
    def iterator
      if @types
        @node.get_relationships(@types).iterator
      elsif @type
        @node.get_relationships(@type, dir_to_java(@direction))
      else
        @node.get_relationships(dir_to_java(@direction))
      end
    end

    def match_to_other?(rel)
      if @to_other.nil?
        true
      elsif @direction == :outgoing
        rel._end_node == @to_other
      elsif @direction == :incoming
        rel._start_node == @to_other
      else
        rel._start_node == @to_other || rel._end_node == @to_other
      end
    end

    def to_other(to_other)
      @to_other = to_other
      self
    end

    def del
      each { |rel| rel.del }
    end

    def size
      [*self].size
    end

    def both
      @direction = :both
      self
    end

    def incoming
      raise "Not allowed calling incoming when finding several relationships types" if @types
      @direction = :incoming
      self
    end

    def outgoing
      raise "Not allowed calling outgoing when finding several relationships types" if @types
      @direction = :outgoing
      self
    end

  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
neo4j-1.0.0.beta.27-java lib/neo4j/relationship_traverser.rb
neo4j-1.0.0.beta.26-java lib/neo4j/relationship_traverser.rb
neo4j-1.0.0.beta.25-java lib/neo4j/relationship_traverser.rb
neo4j-1.0.0.beta.24-java lib/neo4j/relationship_traverser.rb
neo4j-1.0.0.beta.23-java lib/neo4j/relationship_traverser.rb
neo4j-1.0.0.beta.22-java lib/neo4j/relationship_traverser.rb
neo4j-1.0.0.beta.21-java lib/neo4j/relationship_traverser.rb
neo4j-1.0.0.beta.20 lib/neo4j/relationship_traverser.rb