lib/searchkick.rb in searchkick-1.4.1 vs lib/searchkick.rb in searchkick-1.4.2

- old
+ new

@@ -29,10 +29,11 @@ class ImportError < Error; end class << self attr_accessor :search_method_name, :wordnet_path, :timeout, :models attr_writer :client, :env, :search_timeout + attr_reader :aws_credentials end self.search_method_name = :search self.wordnet_path = "/var/lib/wn_s.pl" self.timeout = 10 self.models = [] @@ -44,10 +45,15 @@ Elasticsearch::Client.new( url: ENV["ELASTICSEARCH_URL"], transport_options: {request: {timeout: timeout}, headers: {content_type: "application/json"}} ) do |f| f.use Searchkick::Middleware + f.request :aws_signers_v4, { + credentials: Aws::Credentials.new(aws_credentials[:access_key_id], aws_credentials[:secret_access_key]), + service_name: "es", + region: aws_credentials[:region] || "us-east-1" + } if aws_credentials end end end def self.env @@ -91,10 +97,16 @@ else self.callbacks_value = value end end + def self.aws_credentials=(creds) + require "faraday_middleware/aws_signers_v4" + @aws_credentials = creds + @client = nil # reset client + end + # private def self.queue_items(items) queued_items.concat(items) perform_bulk unless callbacks_value == :bulk end @@ -110,10 +122,10 @@ def self.perform_items(items) if items.any? response = client.bulk(body: items) if response["errors"] first_with_error = response["items"].map do |item| - (item["index"] || item["delete"]) + (item["index"] || item["delete"] || item["update"]) end.find { |item| item["error"] } raise Searchkick::ImportError, "#{first_with_error["error"]} on item with id '#{first_with_error["_id"]}'" end end end