module Eventbrite

Constants

DEFAULTS
VERSION

Public Class Methods

api_url(url='') click to toggle source
# File lib/eventbrite.rb, line 55
def self.api_url(url='')
  "#{api_base}/#{api_version}#{url}"
end
request(method, url, token, params={}) click to toggle source
# File lib/eventbrite.rb, line 59
def self.request(method, url, token, params={})
  unless token ||= self.token
    raise AuthenticationError.new('No access token provided. Set your token using "Eventbrite.token = <access-token>"."')
  end

  url = api_url(url)

  case method.to_s.downcase.to_sym
  when :get
    # Make params into GET parameters
    url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode(params)}" if params && params.any?
    payload = nil
  else
    payload = uri_encode(params)
  end

  request_opts = {
    headers: request_headers(token),
    method: method,
    open_timeout: 30,
    payload: payload,
    url: url,
    timeout: 120
  }

  begin
    response = execute_request(request_opts)
  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), token]
end

Private Class Methods

execute_request(opts) click to toggle source
# File lib/eventbrite.rb, line 112
def self.execute_request(opts)
  RestClient::Request.execute(opts){ |response, request, result, &block|
    if [301, 302, 307].include? response.code
      response.follow_redirection(&block)
    else
      response.return!(&block)
    end
  }
end
general_api_error(rcode, rbody) click to toggle source
# File lib/eventbrite.rb, line 134
def self.general_api_error(rcode, rbody)
  APIError.new("Invalid response object from API: #{rbody.inspect} (HTTP response code was #{rcode})", rcode, rbody)
end
handle_api_error(rcode, rbody) click to toggle source
# File lib/eventbrite.rb, line 138
def self.handle_api_error(rcode, rbody)
  begin
    error = JSON.parse(rbody)
    error = Util.symbolize_names(error)
  rescue JSON::ParserError
    raise general_api_error(rcode, rbody)
  end

  case rcode
  when 400, 404
    # TODO: fix this
    raise InvalidRequestError.new(error[:error_description], rcode, rbody, error)
  when 401
    raise AuthenticationError.new(error[:error_description], rcode, rbody, error)
  else
    raise APIError.new(error[:error_description], rcode, rbody, error)
  end
end
parse(response) click to toggle source
# File lib/eventbrite.rb, line 122
def self.parse(response)
  begin
    # Would use :symbolize_names => true, but apparently there is
    # some library out there that makes symbolize_names not work.
    response = JSON.parse(response.body)
  rescue JSON::ParserError
    raise general_api_error(response.code, response.body)
  end

  Util.symbolize_names(response)
end
request_headers(token) click to toggle source
# File lib/eventbrite.rb, line 103
def self.request_headers(token)
  headers = {
    user_agent: "Eventbrite RubyBindings/#{Eventbrite::VERSION}",
    authorization: "Bearer #{token}"
  }

  headers
end
uri_encode(params) click to toggle source
# File lib/eventbrite.rb, line 99
def self.uri_encode(params)
  Util.flatten_params(params).map { |k,v| "#{k}=#{Util.url_encode(v)}" }.join('&')
end