Sha256: e7cefeb4e28eebbee0ef677c65933c56d61b7b4521b82fd14359581a27a80cf3

Contents?: true

Size: 1.42 KB

Versions: 6

Compression:

Stored size: 1.42 KB

Contents

module Neo4j
  module ActiveNode
    module Query
      module QueryProxyEagerLoading
        def each(node = true, rel = nil, &block)
          return super if with_associations_spec.size.zero?

          query_from_association_spec.pluck(identity, with_associations_return_clause).map do |record, eager_data|
            eager_data.each_with_index do |eager_records, index|
              record.association_proxy(with_associations_spec[index]).cache_result(eager_records)
            end

            block.call(record)
          end
        end

        def with_associations_spec
          @with_associations_spec ||= []
        end

        def with_associations_return_clause
          '[' + with_associations_spec.map { |n| "collect(#{n})" }.join(',') + ']'
        end

        def with_associations(*spec)
          new_link.tap do |new_query_proxy|
            new_spec = new_query_proxy.with_associations_spec + spec
            new_query_proxy.with_associations_spec.replace(new_spec)
          end
        end

        private

        def query_from_association_spec
          with_associations_spec.inject(query_as(identity).return(identity)) do |query, association_name|
            association = model.associations[association_name]

            query.optional_match("#{identity}#{association.arrow_cypher}#{association_name}")
              .where(association.target_where_clause)
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
neo4j-5.0.15 lib/neo4j/active_node/query/query_proxy_eager_loading.rb
neo4j-5.0.14 lib/neo4j/active_node/query/query_proxy_eager_loading.rb
neo4j-5.0.13 lib/neo4j/active_node/query/query_proxy_eager_loading.rb
neo4j-5.0.12 lib/neo4j/active_node/query/query_proxy_eager_loading.rb
neo4j-5.0.11 lib/neo4j/active_node/query/query_proxy_eager_loading.rb
neo4j-5.0.10 lib/neo4j/active_node/query/query_proxy_eager_loading.rb