class Rethinker::QueryRunner::WriteError

Public Instance Methods

call(env) click to toggle source
# File lib/rethinker/query_runner/write_error.rb, line 2
def call(env)
  @runner.call(env).tap do |result|
    # TODO Fix rethinkdb driver: Their classes Term, Query, Response are
    # not scoped to the RethinkDB module! (that would prevent a user from
    # creating a Response model for example).

    if is_write_query?(env) && (result['errors'].to_i != 0 || result['skipped'].to_i != 0)
      raise_write_error(env, result['first_error'])
    end
  end
rescue RethinkDB::RqlRuntimeError => e
  raise unless is_write_query?(env)

  error_msg = e.message.split("\nBacktrace").first
  error_msg = "Non existent document" if e.message =~ /Expected type OBJECT but found NULL/
  raise_write_error(env, error_msg)
end

Private Instance Methods

is_write_query?(env) click to toggle source
# File lib/rethinker/query_runner/write_error.rb, line 22
def is_write_query?(env)
  env[:query].body.type.in?([Term::TermType::UPDATE,
                             Term::TermType::DELETE,
                             Term::TermType::REPLACE,
                             Term::TermType::INSERT])
end
raise_write_error(env, error_msg) click to toggle source
# File lib/rethinker/query_runner/write_error.rb, line 29
def raise_write_error(env, error_msg)
  error_msg ||= "Unknown error"
  error_msg += "\nQuery was: #{env[:query].inspect[0..1000]}"
  raise Rethinker::Error::DocumentNotSaved, error_msg
end