Sha256: bedc3f060fd80203832bda2e16587426e559bbe87c1b02b68501806de4e49bb3
Contents?: true
Size: 1.45 KB
Versions: 8
Compression:
Stored size: 1.45 KB
Contents
module Neo4j module 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 fail 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 end
Version data entries
8 entries across 8 versions & 1 rubygems