Sha256: dd5cf5a5bd740080b46136ce9620a46bff320b884d985fc38ddb2a20bb660c76

Contents?: true

Size: 1.27 KB

Versions: 6

Compression:

Stored size: 1.27 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}/2011-02-01/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

6 entries across 6 versions & 1 rubygems

Version Path
inquisitio-1.1.2 lib/inquisitio/indexer.rb
inquisitio-1.1.1 lib/inquisitio/indexer.rb
inquisitio-1.1.0 lib/inquisitio/indexer.rb
inquisitio-1.0.0 lib/inquisitio/indexer.rb
inquisitio-0.2.0 lib/inquisitio/indexer.rb
inquisitio-0.1.7 lib/inquisitio/indexer.rb