Sha256: 2662e4da297c0d6a98a366c8a8381c18ce376b5e6873bfa735ce0010ab3dd2de

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

require 'excon'

module Inquisitio
  class Indexer

    def self.index(documents)
      new(documents).index
    end

    def initialize(documents)
      raise InquisitioError.new("Document(s) is null") if documents.nil?
      raise InquisitioError.new("Document(s) is empty") unless documents.any?

      @documents = documents
    end

    def index
      Inquisitio.config.logger.info "Indexer posting to #{batch_index_url} body: #{body}"
      if Inquisitio.config.dry_run
        Inquisitio.config.logger.info "Skipping POST as running in dry-run mode"
      else
        post_to_endpoint
      end
    end

    private

    def body
      body = @documents.map(&:to_SDF).join(", ")
      "[#{body}]"
    end

    def batch_index_url
      "#{Inquisitio.config.document_endpoint}/#{Inquisitio.config.api_version}/documents/batch"
    end
      
    def post_to_endpoint
      response = Excon.post(batch_index_url,
                           :body => body,
                           :headers => {"Content-Type" =>"application/json"})
      Inquisitio.config.logger.info "Response - status: #{response.status} body: #{response.body}"
      raise InquisitioError.new("Index failed with status code: #{response.status} Message: #{response.body}") unless response.status == 200
      response.body
    end    
    
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
inquisitio-1.2.1 lib/inquisitio/indexer.rb
inquisitio-1.2.0 lib/inquisitio/indexer.rb