Sha256: bfa452550b40dced3acfadfa9b9837b49abbb20dec0252b11dc1078dd7fc2daf

Contents?: true

Size: 1.41 KB

Versions: 2

Compression:

Stored size: 1.41 KB

Contents

require "typhoeus"
require "hash_deep_merge"

module Harpy
  class Client
    attr_accessor :options

    def initialize(opts=nil)
      self.options = (opts || {})
    end

    def get(url_or_urls, opts=nil)
      request :get, url_or_urls, opts
    end

    def head(url_or_urls, opts=nil)
      request :head, url_or_urls, opts
    end

    def post(url_or_urls, opts=nil)
      request :post, url_or_urls, opts
    end

    def put(url_or_urls, opts=nil)
      request :put, url_or_urls, opts
    end

    def patch(url_or_urls, opts=nil)
      request :patch, url_or_urls, opts
    end

    def delete(url_or_urls, opts=nil)
      request :delete, url_or_urls, opts
    end

    def run(requests)
      requests.each{|request| Typhoeus::Hydra.hydra.queue request}
      Typhoeus::Hydra.hydra.run
      requests.collect(&:response)
    end

    def invalid_code(response)
      if response.timed_out?
        raise ClientTimeout
      elsif response.code.zero?
        raise ClientError, response.curl_error_message
      else
        raise InvalidResponseCode, response.code.to_s
      end
    end

  private

    def request(method, urls, opts=nil)
      opts = options.deep_merge(opts || {})
      case urls
      when Array
        requests = urls.collect do |url|
          Typhoeus::Request.new url, opts.merge(:method => method)
        end
      else
        Typhoeus::Request.send method, urls, opts
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
harpy-0.5.1 lib/harpy/client.rb
harpy-0.5.0 lib/harpy/client.rb