class MixpanelExport::Request

Attributes

api_key[R]
api_secret[R]

Public Class Methods

new(api_secret, api_key) click to toggle source
# File lib/mixpanel_export/request.rb, line 14
def initialize(api_secret, api_key)
  @api_secret = api_secret
  @api_key = api_key
end

Public Instance Methods

get(path, options={}) click to toggle source
# File lib/mixpanel_export/request.rb, line 19
def get(path, options={})
  response = self.class.get(path, query: build_query(Hash[normalize(options)]))

  if response.success?
    response.parsed_response || ""
  else
    raise RequestError, response.parsed_response["error"]
  end
end

Private Instance Methods

build_query(options) click to toggle source
# File lib/mixpanel_export/request.rb, line 40
def build_query(options)
  query = options.dup || {}

  query = ({
    format:  default_format,
    expire:  default_request_expiration,
    api_key: api_key
  }).merge(query)

  query.merge!(sig: calculate_signature(query))
  query
end
calculate_signature(args) click to toggle source
# File lib/mixpanel_export/request.rb, line 33
def calculate_signature(args)
  digest = Digest::MD5.new
  digest << args.map { |k,v| "#{k}=#{v}" }.sort.join
  digest << api_secret
  digest.hexdigest
end
default_format() click to toggle source
# File lib/mixpanel_export/request.rb, line 69
def default_format
  "json"
end
default_request_expiration() click to toggle source
# File lib/mixpanel_export/request.rb, line 73
def default_request_expiration
  Time.now.utc.to_i + 600
end
normalize(hash={}) click to toggle source
# File lib/mixpanel_export/request.rb, line 53
def normalize(hash={})
  hash.map do |k,v|
    k, v =
      k, case v
      when is_a?(String)
        v.encode("utf-8")
      when is_a?(Array)
        JSON.dump(v).encode("utf-8")
      when is_a?(Hash)
        normalize(v)
      else
        v.to_s
      end
  end
end