mixpanel-ruby 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/lib/mixpanel-ruby/consumer.rb +18 -0
- data/lib/mixpanel-ruby/people.rb +11 -10
- data/lib/mixpanel-ruby/tracker.rb +27 -0
- data/lib/mixpanel-ruby/version.rb +1 -1
- data/spec/mixpanel-ruby/events_spec.rb +3 -0
- data/spec/mixpanel-ruby/tracker_spec.rb +4 -0
- metadata +1 -1
data/.gitignore
CHANGED
@@ -51,6 +51,11 @@ module Mixpanel
|
|
51
51
|
# Mixpanel::Consumer is the default consumer. It sends each message,
|
52
52
|
# as the message is recieved, directly to Mixpanel.
|
53
53
|
class Consumer
|
54
|
+
|
55
|
+
# Create a Mixpanel::Consumer. If you provide endpoint arguments,
|
56
|
+
# they will be used instead of the default Mixpanel endpoints.
|
57
|
+
# This can be useful for proxying, debugging, or if you prefer
|
58
|
+
# not to use SSL for your events.
|
54
59
|
def initialize(events_endpoint=nil, update_endpoint=nil)
|
55
60
|
@events_endpoint = events_endpoint || 'https://api.mixpanel.com/track'
|
56
61
|
@update_endpoint = update_endpoint || 'https://api.mixpanel.com/engage'
|
@@ -58,6 +63,10 @@ module Mixpanel
|
|
58
63
|
|
59
64
|
# Send the given string message to Mixpanel. Type should be
|
60
65
|
# one of :event or :profile_update, which will determine the endpoint.
|
66
|
+
#
|
67
|
+
# Mixpanel::Consumer#send sends messages to Mixpanel immediately on
|
68
|
+
# each call. To reduce the overall bandwidth you use when communicating
|
69
|
+
# with Mixpanel, you can also use Mixpanel::BufferedConsumer
|
61
70
|
def send(type, message)
|
62
71
|
type = type.to_sym
|
63
72
|
endpoint = {
|
@@ -106,6 +115,15 @@ module Mixpanel
|
|
106
115
|
class BufferedConsumer
|
107
116
|
MAX_LENGTH = 50
|
108
117
|
|
118
|
+
# Create a Mixpanel::BufferedConsumer. If you provide endpoint arguments,
|
119
|
+
# they will be used instead of the default Mixpanel endpoints.
|
120
|
+
# This can be useful for proxying, debugging, or if you prefer
|
121
|
+
# not to use SSL for your events.
|
122
|
+
#
|
123
|
+
# You can also change the preferred buffer size before the
|
124
|
+
# consumer automatically sends its buffered events. The Mixpanel
|
125
|
+
# endpoints have a limit of 50 events per HTTP request, but
|
126
|
+
# you can lower the limit if your individual events are very large.
|
109
127
|
def initialize(events_endpoint=nil, update_endpoint=nil, max_buffer_length=MAX_LENGTH)
|
110
128
|
@max_length = [ max_buffer_length, MAX_LENGTH ].min
|
111
129
|
@consumer = Consumer.new(events_endpoint, update_endpoint)
|
data/lib/mixpanel-ruby/people.rb
CHANGED
@@ -10,7 +10,7 @@ module Mixpanel
|
|
10
10
|
# to instantiate this class directly- to send
|
11
11
|
# profile updates, use Mixpanel::Tracker#people
|
12
12
|
#
|
13
|
-
# tracker = Mixpanel::Tracker.new
|
13
|
+
# tracker = Mixpanel::Tracker.new(YOUR_MIXPANEL_TOKEN)
|
14
14
|
# tracker.people.set(...) # Or .append(..), or track_charge(...) etc.
|
15
15
|
class People
|
16
16
|
|
@@ -42,7 +42,7 @@ module Mixpanel
|
|
42
42
|
# 'Sign-Up Date' => DateTime.now
|
43
43
|
# });
|
44
44
|
#
|
45
|
-
# If you provide an ip argument, Mixpanel will use that
|
45
|
+
# If you provide an ip argument, \Mixpanel will use that
|
46
46
|
# ip address for geolocation (rather than the ip of your server)
|
47
47
|
def set(distinct_id, properties, ip=nil)
|
48
48
|
properties = fix_property_dates(properties)
|
@@ -83,7 +83,7 @@ module Mixpanel
|
|
83
83
|
end
|
84
84
|
|
85
85
|
# Changes the value of properties by a numeric amount. Takes a
|
86
|
-
# hash with string keys and numeric properties.
|
86
|
+
# hash with string keys and numeric properties. \Mixpanel will add
|
87
87
|
# the given amount to whatever value is currently assigned to the
|
88
88
|
# property. If no property exists with a given name, the value
|
89
89
|
# will be added to zero.
|
@@ -167,7 +167,7 @@ module Mixpanel
|
|
167
167
|
end
|
168
168
|
|
169
169
|
# Records a payment to you to a profile. Charges recorded with
|
170
|
-
# #track_charge will appear in the Mixpanel revenue report.
|
170
|
+
# #track_charge will appear in the \Mixpanel revenue report.
|
171
171
|
#
|
172
172
|
# tracker = Mixpanel::Tracker.new
|
173
173
|
#
|
@@ -185,12 +185,12 @@ module Mixpanel
|
|
185
185
|
append(distinct_id, { '$transactions' => charge_properties }, ip)
|
186
186
|
end
|
187
187
|
|
188
|
-
# Clear all charges from a Mixpanel people profile
|
188
|
+
# Clear all charges from a \Mixpanel people profile
|
189
189
|
def clear_charges(distinct_id)
|
190
190
|
unset(distinct_id, '$transactions')
|
191
191
|
end
|
192
192
|
|
193
|
-
# Permanently delete a profile from Mixpanel people analytics
|
193
|
+
# Permanently delete a profile from \Mixpanel people analytics
|
194
194
|
def delete_user(distinct_id)
|
195
195
|
update({
|
196
196
|
'$distinct_id' => distinct_id,
|
@@ -198,12 +198,13 @@ module Mixpanel
|
|
198
198
|
})
|
199
199
|
end
|
200
200
|
|
201
|
-
# Send a generic update to Mixpanel people analytics.
|
202
|
-
# Caller is responsible for formatting the update, as
|
203
|
-
# documented in the Mixpanel HTTP specification
|
201
|
+
# Send a generic update to \Mixpanel people analytics.
|
202
|
+
# Caller is responsible for formatting the update message, as
|
203
|
+
# documented in the \Mixpanel HTTP specification, and passing
|
204
|
+
# the message as a dict to #update. This
|
204
205
|
# method might be useful if you want to use very new
|
205
206
|
# or experimental features of people analytics from Ruby
|
206
|
-
# The Mixpanel HTTP tracking API is documented at
|
207
|
+
# The \Mixpanel HTTP tracking API is documented at
|
207
208
|
# http://joe.dev.mixpanel.org/help/reference/http
|
208
209
|
def update(message)
|
209
210
|
message = {
|
@@ -13,6 +13,9 @@ module Mixpanel
|
|
13
13
|
# tracker = Mixpanel::Tracker.new(YOUR_MIXPANEL_TOKEN)
|
14
14
|
# tracker.people.set(a_distinct_id, { properties })
|
15
15
|
#
|
16
|
+
# You can find your project token in the settings dialog for your
|
17
|
+
# project, inside of the Mixpanel web application.
|
18
|
+
#
|
16
19
|
# Mixpanel::Tracker is a subclass of Mixpanel::Events, and exposes
|
17
20
|
# an instance of Mixpanel::People as Tracker#people
|
18
21
|
class Tracker < Events
|
@@ -45,6 +48,30 @@ module Mixpanel
|
|
45
48
|
@people = People.new(token, &block)
|
46
49
|
end
|
47
50
|
|
51
|
+
# A call to #track is a report that an event has occurred. #track
|
52
|
+
# takes a distinct_id representing the source of that event (for
|
53
|
+
# example, a user id), an event name describing the event, and a
|
54
|
+
# set of properties describing that event. Properties are provided
|
55
|
+
# as a Hash with string keys and strings, numbers or booleans as
|
56
|
+
# values.
|
57
|
+
#
|
58
|
+
# tracker = Mixpanel::Tracker.new
|
59
|
+
#
|
60
|
+
# # Track that user "12345"'s credit card was declined
|
61
|
+
# tracker.track("12345", "Credit Card Declined")
|
62
|
+
#
|
63
|
+
# # Properties describe the circumstances of the event,
|
64
|
+
# # or aspects of the source or user associated with the event
|
65
|
+
# tracker.track("12345", "Welcome Email Sent", {
|
66
|
+
# 'Email Template' => 'Pretty Pink Welcome',
|
67
|
+
# 'User Sign-up Cohort' => 'July 2013'
|
68
|
+
# })
|
69
|
+
def track(distinct_id, event, properties={}, ip=nil)
|
70
|
+
# This is here strictly to allow rdoc to include the relevant
|
71
|
+
# documentation
|
72
|
+
super
|
73
|
+
end
|
74
|
+
|
48
75
|
# Creates a distinct_id alias. \Events and updates with an alias
|
49
76
|
# will be considered by mixpanel to have the same source, and
|
50
77
|
# refer to the same profile.
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'mixpanel-ruby/events.rb'
|
3
|
+
require 'mixpanel-ruby/version.rb'
|
3
4
|
require 'time'
|
4
5
|
|
5
6
|
describe Mixpanel::Events do
|
@@ -22,6 +23,8 @@ describe Mixpanel::Events do
|
|
22
23
|
'properties' => {
|
23
24
|
'Circumstances' => 'During a test',
|
24
25
|
'distinct_id' => 'TEST ID',
|
26
|
+
'mp_lib' => 'ruby',
|
27
|
+
'$lib_version' => Mixpanel::VERSION,
|
25
28
|
'token' => 'TEST TOKEN',
|
26
29
|
'time' => 76695784
|
27
30
|
}
|
@@ -39,6 +39,8 @@ describe Mixpanel::Tracker do
|
|
39
39
|
'properties' => {
|
40
40
|
'Circumstances' => 'During test',
|
41
41
|
'distinct_id' => 'TEST ID',
|
42
|
+
'mp_lib' => 'ruby',
|
43
|
+
'$lib_version' => Mixpanel::VERSION,
|
42
44
|
'token' => 'TEST TOKEN',
|
43
45
|
'time' => 76695784
|
44
46
|
}
|
@@ -59,6 +61,8 @@ describe Mixpanel::Tracker do
|
|
59
61
|
{ 'event' => 'Event',
|
60
62
|
'properties' => {
|
61
63
|
'distinct_id' => 'ID',
|
64
|
+
'mp_lib' => 'ruby',
|
65
|
+
'$lib_version' => Mixpanel::VERSION,
|
62
66
|
'token' => 'TEST TOKEN',
|
63
67
|
'time' => 76695784
|
64
68
|
}
|