event_tracker 0.1.2 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bbe9651d8d89867c04be0b4e6cb09a3b6552c4d3
4
- data.tar.gz: bba13d5573422cf0f803e1c31e298f25cd342737
3
+ metadata.gz: a1ebbed11b5b9e591c51936b8ea6525e568c81fb
4
+ data.tar.gz: 14529c86a7e8e55d6f8b9ae7497b0f704403bf67
5
5
  SHA512:
6
- metadata.gz: 2928f0427a2f56ace0260815640adecd9f3f3a25c3d05642b6a22d7adcbd0c874615d9b5ee9d8aec50c9ec724c12be71ef8aaf6e542be2583cd37cca06231f9c
7
- data.tar.gz: 0fe6291eae976a742585cab38f885a6b4ead2ed080329c88898042aeffd4c3e336a0c566896d13fb74a7ddf87fa8104911e97dbe241ecb7cd6518e10a738ba74
6
+ metadata.gz: 631a3f261b419775696bf840e77b2e1d11a6169e8f0695b6dd94fe247f43be90e67bd400d5d1dcf84f87fec0bb3f74f7a6973b6a9d6d0689e57c2fa79ed7d56d
7
+ data.tar.gz: 23d8b6b4be2043c4518142b60bc478b63cc663cee31dcd7c01fd021e70f9a27ec23b435d050c5d8c62a07556629377cfd2d126818b43655269dfbf216651cd19
data/.gitignore CHANGED
@@ -3,6 +3,8 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
+ .rvmrc
7
+ *.un~
6
8
  Gemfile.lock
7
9
  InstalledFiles
8
10
  _yardoc
data/README.md CHANGED
@@ -26,7 +26,7 @@ config.event_tracker.mixpanel_key = "YOUR_KEY"
26
26
  config.event_tracker.kissmetrics_key = "YOUR_KEY"
27
27
 
28
28
  class ApplicationController < ActionController::Base
29
- after_filter :append_event_tracking_tags
29
+ around_filter :append_event_tracking_tags
30
30
 
31
31
  # optionally identify users
32
32
  def mixpanel_distinct_id
@@ -11,6 +11,14 @@ module EventTracker
11
11
  def register_properties(args)
12
12
  (session[:registered_properties] ||= {}).merge!(args)
13
13
  end
14
+
15
+ def mixpanel_people_set(args)
16
+ (session[:mixpanel_people_set] ||= {}).merge!(args)
17
+ end
18
+
19
+ def mixpanel_alias(identity)
20
+ session[:mixpanel_alias] = identity
21
+ end
14
22
  end
15
23
 
16
24
  module ActionControllerExtension
@@ -38,6 +46,7 @@ module EventTracker
38
46
  end
39
47
 
40
48
  def append_event_tracking_tags
49
+ yield
41
50
  return if event_trackers.empty?
42
51
 
43
52
  body = response.body
@@ -47,12 +56,17 @@ module EventTracker
47
56
  body_insert_at = body.index('</body')
48
57
  return unless body_insert_at
49
58
  a = []
50
- if distinct_id = respond_to?(:mixpanel_distinct_id, true) && mixpanel_distinct_id
59
+ if mixpanel_alias = session.delete(:mixpanel_alias)
60
+ a << mixpanel_tracker.alias(mixpanel_alias)
61
+ elsif distinct_id = respond_to?(:mixpanel_distinct_id, true) && mixpanel_distinct_id
51
62
  a << mixpanel_tracker.identify(distinct_id)
52
63
  end
53
64
  if name_tag = respond_to?(:mixpanel_name_tag, true) && mixpanel_name_tag
54
65
  a << mixpanel_tracker.name_tag(name_tag)
55
66
  end
67
+ if (people = session.delete(:mixpanel_people_set)).present?
68
+ a << mixpanel_tracker.people_set(people)
69
+ end
56
70
  if identity = respond_to?(:kissmetrics_identity, true) && kissmetrics_identity
57
71
  a << kissmetrics_tracker.identify(identity)
58
72
  end
@@ -5,16 +5,16 @@ class EventTracker::Mixpanel
5
5
 
6
6
  def init
7
7
  s = <<-EOD
8
- (function(c,a){window.mixpanel=a;var b,d,h,e;b=c.createElement("script");
9
- b.type="text/javascript";b.async=!0;b.src=("https:"===c.location.protocol?"https:":"http:")+
10
- '//cdn.mxpnl.com/libs/mixpanel-2.1.min.js';d=c.getElementsByTagName("script")[0];
11
- d.parentNode.insertBefore(b,d);a._i=[];a.init=function(b,c,f){function d(a,b){
12
- var c=b.split(".");2==c.length&&(a=a[c[0]],b=c[1]);a[b]=function(){a.push([b].concat(
13
- Array.prototype.slice.call(arguments,0)))}}var g=a;"undefined"!==typeof f?g=a[f]=[]:
14
- f="mixpanel";g.people=g.people||[];h=['disable','track','track_pageview','track_links',
15
- 'track_forms','register','register_once','unregister','identify','name_tag',
16
- 'set_config','people.identify','people.set','people.increment'];for(e=0;e<h.length;e++)d(g,h[e]);
17
- a._i.push([b,c,f])};a.__SV=1.1;})(document,window.mixpanel||[]);
8
+ (function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;a=e.createElement("script");
9
+ a.type="text/javascript";a.async=!0;a.src=("https:"===e.location.protocol?"https:":"http:")+
10
+ '//cdn.mxpnl.com/libs/mixpanel-2.2.min.js';f=e.getElementsByTagName("script")[0];
11
+ f.parentNode.insertBefore(a,f);b._i=[];b.init=function(a,e,d){function f(b,h){
12
+ var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(
13
+ Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==typeof d?c=b[d]=[]:
14
+ d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);
15
+ b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};
16
+ i="disable track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.increment".split(" ");
17
+ for(g=0;g<i.length;g++)f(c,i[g]);b._i.push([a,e,d])};b.__SV=1.2}})(document,window.mixpanel||[]);
18
18
  mixpanel.init("#{@key}");
19
19
  EOD
20
20
  end
@@ -35,4 +35,12 @@ class EventTracker::Mixpanel
35
35
  def identify(distinct_id)
36
36
  %Q{mixpanel.identify("#{distinct_id}");}
37
37
  end
38
+
39
+ def people_set(properties)
40
+ %Q{mixpanel.people.set(#{properties.to_json});}
41
+ end
42
+
43
+ def alias(identity)
44
+ %Q{mixpanel.alias(#{identity.to_json});}
45
+ end
38
46
  end
@@ -1,3 +1,3 @@
1
1
  module EventTracker
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -29,7 +29,7 @@ feature 'basic integration' do
29
29
  subject { page.find("body script").native.content }
30
30
 
31
31
  class BasicController < ApplicationController
32
- after_filter :append_event_tracking_tags
32
+ around_filter :append_event_tracking_tags
33
33
  def no_tracking
34
34
  render inline: "OK", layout: true
35
35
  end
@@ -68,7 +68,7 @@ feature 'basic integration' do
68
68
  end
69
69
 
70
70
  class RedirectsController < ApplicationController
71
- after_filter :append_event_tracking_tags
71
+ around_filter :append_event_tracking_tags
72
72
 
73
73
  def index
74
74
  track_event "Register for site"
@@ -86,7 +86,7 @@ feature 'basic integration' do
86
86
  end
87
87
 
88
88
  class WithPropertiesController < ApplicationController
89
- after_filter :append_event_tracking_tags
89
+ around_filter :append_event_tracking_tags
90
90
 
91
91
  def index
92
92
  register_properties age: 19
@@ -105,7 +105,7 @@ feature 'basic integration' do
105
105
  end
106
106
 
107
107
  class IdentityController < ApplicationController
108
- after_filter :append_event_tracking_tags
108
+ around_filter :append_event_tracking_tags
109
109
  def mixpanel_distinct_id
110
110
  "distinct_id"
111
111
  end
@@ -125,7 +125,7 @@ feature 'basic integration' do
125
125
  end
126
126
 
127
127
  class NameTagController < ApplicationController
128
- after_filter :append_event_tracking_tags
128
+ around_filter :append_event_tracking_tags
129
129
  def mixpanel_name_tag
130
130
  "foo@example.org"
131
131
  end
@@ -141,7 +141,7 @@ feature 'basic integration' do
141
141
  end
142
142
 
143
143
  class PrivateController < ApplicationController
144
- after_filter :append_event_tracking_tags
144
+ around_filter :append_event_tracking_tags
145
145
  def index; render inline: "OK", layout: true; end
146
146
  private
147
147
  def mixpanel_distinct_id; "distinct_id"; end
@@ -152,4 +152,52 @@ feature 'basic integration' do
152
152
  background { visit "/private" }
153
153
  it_should_behave_like "with distinct id"
154
154
  end
155
+
156
+ class PeopleSetController < ApplicationController
157
+ around_filter :append_event_tracking_tags
158
+
159
+ def index
160
+ mixpanel_people_set "$email" => "jsmith@example.com"
161
+ render inline: "OK", layout: true
162
+ end
163
+ end
164
+
165
+ context "track event with properties" do
166
+ background { visit "/people_set" }
167
+ it { should include %Q{mixpanel.people.set({"$email":"jsmith@example.com"})} }
168
+ end
169
+
170
+ class AliasController < ApplicationController
171
+ around_filter :append_event_tracking_tags
172
+
173
+ def index
174
+ mixpanel_alias "jsmith@example.com"
175
+ render inline: "OK", layout: true
176
+ end
177
+ end
178
+
179
+ context "track event with properties" do
180
+ background { visit "/alias" }
181
+ it { should include %Q{mixpanel.alias("jsmith@example.com")} }
182
+ end
183
+
184
+ context "halting filter chain in a before_filter" do
185
+ background { visit "/before_filter" }
186
+ it_should_behave_like "init"
187
+ end
188
+
189
+ class BeforeFilterController < ApplicationController
190
+ around_filter :append_event_tracking_tags
191
+ before_filter :halt_the_chain_and_render
192
+
193
+ def index
194
+ render inline: "OK", layout: true
195
+ end
196
+
197
+ def halt_the_chain_and_render
198
+ render inline: "OK", layout: true and return
199
+ end
200
+
201
+ end
202
+
155
203
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: event_tracker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul McMahon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-02 00:00:00.000000000 Z
11
+ date: 2013-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails