Sha256: c5b7481c55bfc7b7a98327200b1bf2214b3a6942a7d777be4233157d1aad4d7e

Contents?: true

Size: 1.49 KB

Versions: 1

Compression:

Stored size: 1.49 KB

Contents

require "addressable/uri"
require "httparty"

module LinkshareAPI
  # For implementation details please visit
  # http://helpcenter.linkshare.com/publisher/questions.php?questionid=865
  class CouponWebService
    include HTTParty

    attr_reader :api_base_url, :api_timeout, :token

    def initialize
      @token        = LinkshareAPI.token
      @api_base_url = LinkshareAPI::WEB_SERVICE_URIS[:coupon_web_service]
      @api_timeout  = LinkshareAPI.api_timeout

      if @token.nil?
        raise AuthenticationError.new(
          "No token. Set your token by using 'LinkshareAPI.token = <TOKEN>'. " +
          "You can retrieve your token from LinkhShare's Web Services page under the Links tab. " +
          "See http://helpcenter.linkshare.com/publisher/questions.php?questionid=648 for details."
        )
      end
    end

    def query(params)
      raise ArgumentError, "Hash expected, got #{params.class} instead" unless params.is_a?(Hash)

      params.merge!(token: token)
      begin
        response = self.class.get(
          api_base_url,
          query: params,
          timeout: api_timeout
        )
      rescue Timeout::Error
        raise ConnectionError.new("Timeout error (#{timeout}s)")
      end

      if response.code != 200
        raise Error.new(response.message, response.code)
      end
      error = response["fault"]
      raise InvalidRequestError.new(error["errorstring"], error["errorcode"].to_i) if error

      Response.new(response, :coupon_web_service)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
linkshare_api-0.2.0 lib/linkshare_api/coupon_web_service.rb