class Mixpanel::Client

Attributes

api_key[R]
api_secret[R]
base_url[R]
data_url[R]
expire_at[R]

Public Class Methods

new(options) click to toggle source
# File lib/sourmix/mixpanel_client.rb, line 11
def initialize options
  @api_key    = options.fetch :api_key
  @api_secret = options.fetch :api_secret
  @base_url   = options.fetch :base_url, 'https://mixpanel.com/api/2.0'
  @data_url   = options.fetch :data_url, 'https://data.mixpanel.com/api/2.0'
  @expire_at  = options.fetch :expire_at, 90 # seconds
end

Public Instance Methods

request(endpoint, params) click to toggle source
# File lib/sourmix/mixpanel_client.rb, line 19
def request endpoint, params
  resp = Net::HTTP.get request_uri(endpoint, params)
  resp.lines.map { |l| JSON.parse l }
end
request_uri(endpoint, params) click to toggle source
# File lib/sourmix/mixpanel_client.rb, line 24
def request_uri endpoint, params
  URI request_url(endpoint, params)
end

Private Instance Methods

encode_params(params) click to toggle source
# File lib/sourmix/mixpanel_client.rb, line 49
def encode_params params
  params.map { |k,v| "#{k}=#{CGI.escape(v.to_s)}" }.sort.join('&')
end
normalize_params(endpoint, params) click to toggle source
# File lib/sourmix/mixpanel_client.rb, line 61
def normalize_params endpoint, params
  params.merge \
    api_key: api_key,
    expire: request_expire(params),
    format: request_format(endpoint)
end
request_api(endpoint) click to toggle source
# File lib/sourmix/mixpanel_client.rb, line 39
def request_api endpoint
  return data_url if endpoint == 'export'
  return base_url
end
request_expire(params) click to toggle source
# File lib/sourmix/mixpanel_client.rb, line 68
def request_expire params
  return params[:expire] if params[:expire]
  Time.now.to_i + expire_at
end
request_format(endpoint) click to toggle source
# File lib/sourmix/mixpanel_client.rb, line 44
def request_format endpoint
  return :raw if endpoint == 'export'
  return :json
end
request_url(endpoint, params) click to toggle source
# File lib/sourmix/mixpanel_client.rb, line 31
def request_url endpoint, params
  api = request_api endpoint
  url = File.join api, endpoint.to_s
  sps = sign_params endpoint, params
  qs  = encode_params sps
  "#{url}?#{qs}"
end
sign_params(endpoint, params) click to toggle source
# File lib/sourmix/mixpanel_client.rb, line 53
def sign_params endpoint, params
  nps = normalize_params endpoint, params
  jps = nps.map { |k,v| "#{k}=#{v}" }.sort.join('')
  req = jps + api_secret
  nps[:sig] = Digest::MD5.hexdigest req
  nps
end