Sha256: afa98e3832acd2fec2611b8248436b7aaf68c162d3ecef45843928a77834f116

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

require "open-uri"
require 'base64'
require 'json'

class Mixpanel
  def initialize(token, env)
    @token = token
    @env = env
    clear_queue
  end

  def append_event(event, properties = {})
    append_api('track', event, properties)
  end
  
  def append_api(type, *args)
    queue << [type, args.map {|arg| arg.to_json}]
  end
  
  def track_event(event, properties = {})
    params = build_event(event, properties.merge(:token => @token, :time => Time.now.utc.to_i, :ip => ip))
    parse_response request(params)
  end

  def ip
    @env.has_key?("REMOTE_ADDR") ? @env["REMOTE_ADDR"] : ""
  end

  def queue
    @env["mixpanel_events"]
  end

  def clear_queue
    @env["mixpanel_events"] = []
  end

  private

  def parse_response(response)
    response == "1" ? true : false
  end

  def request(params)
    data = Base64.encode64(JSON.generate(params)).gsub(/\n/,'')
    url = "http://api.mixpanel.com/track/?data=#{data}"

    open(url).read
  end

  def build_event(event, properties)
    {:event => event, :properties => properties}
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mixpanel-0.7.0 lib/mixpanel/mixpanel.rb