Sha256: def82430d1109d27c1062d08d96f3b84b854bee5cc0dcc360d68faf986426fc2

Contents?: true

Size: 1.36 KB

Versions: 17

Compression:

Stored size: 1.36 KB

Contents

module Neo4j::Embedded

  # Wraps the Cypher query result.
  # Loads the node and relationships wrapper if possible and use symbol as column keys.
  # This is typically used in the native neo4j bindings since result does is not a Ruby enumerable with symbols as keys.
  # @note The result is a once forward read only Enumerable, work if you need to read the result twice - use #to_a
  #
  class ResultWrapper
    class ResultsAlreadyConsumedException < Exception;
    end

    include Enumerable

    # @return the original result from the Neo4j Cypher Engine, once forward read only !
    attr_reader :source

    def initialize(source, query)
      @source = source
      @struct = Struct.new(*source.columns.to_a.map(&:to_sym))
      @unread = true
      @query = query
    end

    def to_s
      @query
    end

    def inspect
      "Enumerable query: '#{@query}'"
    end

    # @return [Array<Symbol>] the columns in the query result
    def columns
      @source.columns.map(&:to_sym)
    end

    def each
      raise ResultsAlreadyConsumedException unless @unread

      if block_given?
        @source.each do |row|
          yield(row.each_with_object(@struct.new) do |(column, value), result|
            result[column.to_sym] = (value.respond_to?(:wrapper) ? value.wrapper : value)
          end)
        end
      else
        Enumerator.new(self)
      end
    end

  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
neo4j-core-3.1.1 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.1.0 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.8 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.7 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.6 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.5 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.4 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.3 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.2 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.1 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.0 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.0.rc.5 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.0.rc.4 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.0.rc.1 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.0.alpha.19 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.0.alpha.18 lib/neo4j-embedded/cypher_response.rb
neo4j-core-3.0.0.alpha.17 lib/neo4j-embedded/cypher_response.rb