Sha256: 3820d1a84568e6470c10e737746eab1d995ecf485e1b3d613ae5392bcf6adf91

Contents?: true

Size: 1.75 KB

Versions: 2

Compression:

Stored size: 1.75 KB

Contents

require 'active_graph/core/instrumentable'
require 'active_graph/transaction'
require 'active_graph/core/query_builder'
require 'active_graph/core/responses'

module ActiveGraph
  module Core
    module Querable
      extend ActiveSupport::Concern
      include Instrumentable
      include Responses

      class_methods do
        def query(*args)
          options = case args.size
                    when 3
                      args.pop
                    when 2
                      args.pop if args[0].is_a?(::ActiveGraph::Core::Query)
                    end || {}

          queries(options) { append(*args) }[0]
        end

        def queries(options = {}, &block)
          query_builder = QueryBuilder.new

          query_builder.instance_eval(&block)

          transaction do
            query_set(query_builder.queries, options)
          end
        end

        def setup_queries!(queries, options = {})
          return if options[:skip_instrumentation]
          queries.each do |query|
            ActiveSupport::Notifications.instrument('neo4j.core.cypher_query', query: query)
          end
        end

        def query_set(queries, options = {})
          setup_queries!(queries, skip_instrumentation: options[:skip_instrumentation])

          ActiveSupport::Notifications.instrument('neo4j.core.bolt.request') do
            self.wrap_level = options[:wrap_level]
            transaction do |tx|
              queries.map do |query|
                result_from_data(tx.run(query.cypher, query.parameters))
              end
            end
          rescue Neo4j::Driver::Exceptions::Neo4jException => e
            raise ActiveGraph::Core::CypherError.new_from(e.code, e.message) # , e.stack_track.to_a
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
activegraph-10.0.0.pre.beta.5 lib/active_graph/core/querable.rb
activegraph-10.0.0.pre.beta.4 lib/active_graph/core/querable.rb