Sha256: c32b6284f9a8ba31455a4e7df2e70f7c6b9e634faeee3dd07c181c070ae2fad6

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

module Neo4j
  module Rails
    module Relationships
      class RelsDSL
        include Enumerable

        def initialize(storage, dir=:both)
          @storage = storage
          @dir = dir
        end


        def build(attrs)
          node = @storage.build(attrs)
          @storage.create_relationship_to(node, @dir)
        end

        def create(attrs)
          node = @storage.create(attrs)
          @storage.create_relationship_to(node, @dir)
        end

        def outgoing
          @dir = :outgoing
          self
        end

        def incoming
          @dir = :incoming
          self
        end

        def each(&block)
          @storage.each_rel(@dir, &block)
        end

        def size
          @storage.size(@dir)
        end

        def empty?
          size == 0
        end

        def destroy_all
          each {|n| n.destroy}
        end

        def delete_all
          each {|n| n.delete}
        end

        def find(*args, &block)
          return super(*args, &block) if block
          node = args.first
          if @dir == :incoming
            find{|r| r.start_node == node}
          else
            find{|r| r.end_node == node}
          end
        end

        def [](index)
          i = 0
          each{|x| return x if i == index; i += 1}
          nil # out of index
        end

        def is_a?(type)
          # ActionView requires this for nested attributes to work
          return true if Array == type
          super
        end

        def to_s
          "Rels dir: #{@dir}, #{@storage}"
        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
neo4j-1.1.0.beta.1-java lib/neo4j/rails/relationships/rels_dsl.rb