diff --git a/lib/searchkick.rb b/lib/searchkick.rb index c9df9a6..313b099 100644 --- a/lib/searchkick.rb +++ b/lib/searchkick.rb @@ -103,12 +103,10 @@ module Searchkick if items.any? response = client.bulk(body: items) if response["errors"] - messages = response["items"].map do |item| + first_with_error = response["items"].map do |item| (item["index"] || item["delete"]) - end.select { |item| item["error"] }.map do |item| - "#{item["error"]} on item with id '#{item["_id"]}'" - end.join "\n" - raise Searchkick::ImportError, messages + end.find { |item| item["error"] } + raise Searchkick::ImportError, "#{first_with_error["error"]} on item with id '#{first_with_error["_id"]}'" end end end diff --git a/test/errors_test.rb b/test/errors_test.rb index 00511d8..7d26b74 100644 --- a/test/errors_test.rb +++ b/test/errors_test.rb @@ -2,16 +2,18 @@ require_relative "test_helper" class ErrorsTest < Minitest::Test def test_bulk_import_raises_with_full_message - valid_dog = Dog.new(name: "2016-01-01") - invalid_dog_1 = Dog.new(name: "Bucket") - invalid_dog_2 = Dog.new(name: "Ol' One-Leg") - index = Searchkick::Index.new "dogs" - message = nil - begin - index.bulk_index [valid_dog, invalid_dog_1, invalid_dog_2] - rescue Searchkick::ImportError => e - message = e.message + valid_dog = Dog.new(name: "2016-01-02") + invalid_dog = Dog.new(name: "Ol' One-Leg") + index = Searchkick::Index.new "dogs", mappings: { + dog: { + properties: { + name: { type: "date" } + } + } + } + error = assert_raises(Searchkick::ImportError) do + index.bulk_index [valid_dog, invalid_dog] end - assert_match /MapperParsingException.*Bucket.*Ol' One-Leg/m, message + assert_match /MapperParsingException.*Ol' One-Leg/, error.message end end -- libgit2 0.21.0