class Neo4Apis::QueryBuffer

Public Class Methods

new(neo4j_session, flush_size) click to toggle source
Calls superclass method
# File lib/neo4apis/query_buffer.rb, line 4
def initialize(neo4j_session, flush_size)
  @neo4j_session = neo4j_session
  @flush_size = flush_size

  @faraday_connection = @neo4j_session.connection

  super()
end

Public Instance Methods

<<(query) click to toggle source
Calls superclass method
# File lib/neo4apis/query_buffer.rb, line 13
def <<(query)
  flush if size >= @flush_size

  super
end
close() click to toggle source
# File lib/neo4apis/query_buffer.rb, line 25
def close
  flush
end
flush() click to toggle source
# File lib/neo4apis/query_buffer.rb, line 19
def flush
  execute

  clear
end

Private Instance Methods

execute() click to toggle source
# File lib/neo4apis/query_buffer.rb, line 31
def execute
  return if empty?

  @faraday_connection.post do |req|
    req.url '/db/data/transaction/commit'
    req.headers['Accept'] = 'application/json; charset=UTF-8'
    req.headers['Content-Type'] = 'application/json'
    req.headers['X-Stream'] = 'true'
    req.body = request_body_data.to_json
  end.tap do |response|
    if response.status != 200
      fail "ERROR: response status #{response.status}:\n#{response.body}"
    else
      response_data = response.body.is_a?(String) ? JSON.parse(response.body) : response.body
      response_errors = response_data[:errors] || response_data['errors']

      if response_errors.size > 0
        error_string = response_errors.map do |error|
          [error[:code] || error['code'], error[:message] || error['message']].join("\n")
        end.join("\n\n")

        fail "ERROR: Cypher response error:\n" + error_string
      end
    end
  end
end
request_body_data() click to toggle source
# File lib/neo4apis/query_buffer.rb, line 58
def request_body_data
  {
    statements: self.map do |query|
      {
        statement: query.to_cypher,
        parameters: query.send(:merge_params)
      }
    end
  }
end