module Streak

Constants

VERSION

Attributes

api_base[RW]
api_key[RW]
verify_ssl_certs[RW]

Public Class Methods

api_url(url='') click to toggle source
# File lib/streak.rb, line 30
def self.api_url(url='')
  @api_base + url
end
execute_request(opts) click to toggle source
# File lib/streak.rb, line 72
def self.execute_request(opts)
  RestClient::Request.execute(opts)
end
handle_api_error(rcode, rbody) click to toggle source
# File lib/streak.rb, line 76
def self.handle_api_error(rcode, rbody)
  case rcode
  when 400, 404
    raise InvalidRequestError.new("Your request is invalid: #{rbody.inspect}", rcode, rbody)
  when 401
    raise AuthenticationError.new("Your API key is invalid: #{rbody.inspect}", rcode, rbody)
  else
    raise APIError.new("API Error: #{rbody.inspect}", rcode, rbody)
  end
end
parse(response) click to toggle source
# File lib/streak.rb, line 87
def self.parse(response)
  begin
    response = MultiJson.load(response.body)
  rescue MultiJson::DecodeError
    raise APIError.new("Invalid response from the API: #{response.body.inspect}")
  end
end
request(method, url, params = {}, headers = {}) click to toggle source
# File lib/streak.rb, line 34
def self.request(method, url, params = {}, headers = {})
  http_method = method.to_s.downcase.to_sym
  case http_method
  when :get, :head, :delete
    # Make params into GET parameters
    url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode(params)}" if params && params.any?
    payload = nil
  else
    payload = params.is_a?(String) ? params : uri_encode(params)

    if http_method == :post
      headers[:content_type] ||= "application/json"
    end
  end

  request_opts = {
    :headers => headers,
    :method => method,
    :verify_ssl => false,
    :url  => api_url(url),
    :user => api_key,
    :payload => payload
  }

  begin
    response = execute_request(request_opts)
    handle_api_error(response.code, response.body) unless response.code == 200
  rescue RestClient::ExceptionWithResponse => e
    if rcode = e.http_code and rbody = e.http_body
      handle_api_error(rcode, rbody)
    else
      raise
    end
  end

  parse(response)
end

Private Class Methods

uri_encode(params) click to toggle source
# File lib/streak.rb, line 97
def self.uri_encode(params)
  params.map { |k,v| "#{k}=#{URI.escape(v)}" }.join("&")
end