Sha256: e8a3d339566518dbbdbae17242bf5b2a7ea7b3c806c6da8688a416b1208a4982

Contents?: true

Size: 1.25 KB

Versions: 22

Compression:

Stored size: 1.25 KB

Contents

require 'uri'
module Endeca
  class RequestError < ::StandardError; end

  class Request

    def self.perform(path, query=nil)
      new(path, query).perform
    end

    def initialize(path, query=nil)
      @path  = path.strip
      @query = query
    end

    def perform
      handle_response(get_response)
    end

    def uri
      return @uri if @uri

      @uri = URI.parse(@path)
      @uri.query = query_string
      @uri
    end

    private

    def get_response #:nodoc:
      http = Net::HTTP.new(uri.host, uri.port)
      request = Net::HTTP::Get.new(uri.request_uri)

      Endeca.logger.debug "ENDECA REQUEST: uri=#{uri}" if Endeca.debug
      http.request(request)
    end

    # Raises exception Net::XXX (http error code) if an http error occured
    def handle_response(response) #:nodoc:
      case response
      when Net::HTTPSuccess
        JSON.parse(response.body)
      else
        response.error! # raises exception corresponding to http error Net::XXX
      end

    rescue => e
      raise RequestError, e.message
    end

    def query_string
      query_string_parts = [@uri.query, @query.to_params]
      query_string_parts.reject!{ |s| s.nil? || s.empty? }

      query_string_parts.empty? ? nil : query_string_parts.join('&')
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
primedia-endeca-0.9.0 lib/endeca/request.rb
primedia-endeca-0.9.1 lib/endeca/request.rb
primedia-endeca-0.9.10 lib/endeca/request.rb
primedia-endeca-0.9.11 lib/endeca/request.rb
primedia-endeca-0.9.12 lib/endeca/request.rb
primedia-endeca-0.9.13 lib/endeca/request.rb
primedia-endeca-0.9.14 lib/endeca/request.rb
primedia-endeca-0.9.15 lib/endeca/request.rb
primedia-endeca-0.9.16 lib/endeca/request.rb
primedia-endeca-0.9.17 lib/endeca/request.rb
primedia-endeca-0.9.18 lib/endeca/request.rb
primedia-endeca-0.9.19 lib/endeca/request.rb
primedia-endeca-0.9.2 lib/endeca/request.rb
primedia-endeca-0.9.20 lib/endeca/request.rb
primedia-endeca-0.9.21 lib/endeca/request.rb
primedia-endeca-0.9.3 lib/endeca/request.rb
primedia-endeca-0.9.4 lib/endeca/request.rb
primedia-endeca-0.9.5 lib/endeca/request.rb
primedia-endeca-0.9.6 lib/endeca/request.rb
primedia-endeca-0.9.7 lib/endeca/request.rb