diff --git a/lib/searchkick.rb b/lib/searchkick.rb index 719d729..c9df9a6 100644 --- a/lib/searchkick.rb +++ b/lib/searchkick.rb @@ -103,8 +103,12 @@ module Searchkick if items.any? response = client.bulk(body: items) if response["errors"] - first_item = response["items"].first - raise Searchkick::ImportError, (first_item["index"] || first_item["delete"])["error"] + messages = 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 end end diff --git a/test/errors_test.rb b/test/errors_test.rb new file mode 100644 index 0000000..00511d8 --- /dev/null +++ b/test/errors_test.rb @@ -0,0 +1,17 @@ +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 + end + assert_match /MapperParsingException.*Bucket.*Ol' One-Leg/m, message + end +end -- libgit2 0.21.0