Skip to content

Commit

Permalink
Add append
Browse files Browse the repository at this point in the history
  • Loading branch information
sturgill committed Oct 5, 2012
1 parent d732e97 commit 93c39f7
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 8 deletions.
20 changes: 20 additions & 0 deletions lib/mixpanel.rb
Expand Up @@ -12,6 +12,14 @@ class Mixpanel
def initialize token, options={}
@token = token
@async = options.fetch(:async, false)
@persist = options.fetch(:persist, false)
@env = options.fetch(:env, {})

if @persist
queue ||= []
else
clear_queue
end
end

protected
Expand Down Expand Up @@ -39,4 +47,16 @@ def request url, async
def parse_response response
response.to_i == 1
end

def queue
@persist ? @env["rack.session"]["mixpanel_events"] : @env["mixpanel_events"]
end

def clear_queue
queue = []
end

def append type, *args
queue << [type, args.collect {|arg| arg.to_json}]
end
end
27 changes: 19 additions & 8 deletions lib/mixpanel/event.rb
Expand Up @@ -3,28 +3,39 @@ module Event
TRACK_URL = 'http://api.mixpanel.com/track/'
IMPORT_URL = 'http://api.mixpanel.com/import/'

def track event, properties={}, env={}, options={}
def track event, properties={}, options={}
options.reverse_merge! :async => @async, :url => TRACK_URL
data = build_event event, properties, env
data = build_event event, track_properties(properties)
url = "#{options[:url]}?data=#{encoded_data(data)}"
parse_response request(url, options[:async])
end

def import api_key, event, properties={}, env={}, options={}
def append_track event, properties={}
properties = track_properties properties, false
append 'track', event, properties
end

def import api_key, event, properties={}, options={}
options.reverse_merge! :async => @async, :url => IMPORT_URL
data = build_event event, properties, env
data = build_event event, track_properties(properties)
url = "#{options[:url]}?data=#{encoded_data(data)}&api_key=#{api_key}"
parse_response request(url, options[:async])
end

protected

def ip env
(env['HTTP_X_FORWARDED_FOR'] || env['REMOTE_ADDR'] || '').split(',').last
def ip
(@env['HTTP_X_FORWARDED_FOR'] || @env['REMOTE_ADDR'] || '').split(',').last
end

def track_properties properties, include_token=true
properties.reverse_merge! :time => Time.now, :ip => ip
properties.reverse_merge! :token => @token if include_token
properties_hash properties, EVENT_PROPERTIES
end

def build_event event, properties, env
properties.reverse_merge! :time => Time.now, :ip => ip(env), :token => @token
def build_event event, properties
properties.reverse_merge! :time => Time.now, :ip => ip, :token => @token
{ :event => event, :properties => properties_hash(properties, EVENT_PROPERTIES) }
end
end
8 changes: 8 additions & 0 deletions lib/mixpanel/person.rb
Expand Up @@ -10,6 +10,14 @@ def increment distinct_id, properties={}, options={}
engage :add, distinct_id, properties, options
end

def append_set properties={}
append 'people.set', properties_hash(properties, PERSON_PROPERTIES)
end

def append_increment property, increment=1
append 'people.increment', property, increment
end

protected

def engage action, distinct_id, properties, options
Expand Down

0 comments on commit 93c39f7

Please sign in to comment.