Class: Rethinker::QueryRunner::WriteError

Inherits:
Middleware
  • Object
show all
Defined in:
lib/rethinker/query_runner/write_error.rb

Instance Method Summary collapse

Methods inherited from Middleware

#initialize

Constructor Details

This class inherits a constructor from Rethinker::QueryRunner::Middleware

Instance Method Details

#call(env) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 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