@@ -63,6 +63,7 @@ gem 'rails_12factor', group: :production |
||
63 | 63 |
gem 'gibbon' |
64 | 64 |
gem 'redis' |
65 | 65 |
gem 'resque', '~> 1.22.0', :require => "resque/server" |
66 |
+gem 'mixpanel-ruby' |
|
66 | 67 |
|
67 | 68 |
group :test do |
68 | 69 |
gem "rspec" |
@@ -158,6 +158,7 @@ GEM |
||
158 | 158 |
subexec (~> 0.2.1) |
159 | 159 |
mini_portile (0.6.0) |
160 | 160 |
minitest (4.7.5) |
161 |
+ mixpanel-ruby (1.6.0) |
|
161 | 162 |
multi_json (1.10.1) |
162 | 163 |
multi_test (0.1.1) |
163 | 164 |
multi_xml (0.5.5) |
@@ -316,6 +317,7 @@ DEPENDENCIES |
||
316 | 317 |
less-rails |
317 | 318 |
letter_opener |
318 | 319 |
mini_magick |
320 |
+ mixpanel-ruby |
|
319 | 321 |
pg |
320 | 322 |
rails (= 4.0.4) |
321 | 323 |
rails_12factor |
@@ -11,6 +11,8 @@ class ApplicationController < ActionController::Base |
||
11 | 11 |
|
12 | 12 |
before_filter :configure_permitted_parameters, if: :devise_controller? |
13 | 13 |
|
14 |
+ before_filter :analytics |
|
15 |
+ |
|
14 | 16 |
def configure_permitted_parameters |
15 | 17 |
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :email, :current_password, :avatar, :password, :password_confirmation, :avatar_tmp, :avatar_processing) } |
16 | 18 |
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password) } |
@@ -22,6 +24,20 @@ class ApplicationController < ActionController::Base |
||
22 | 24 |
I18n.default_locale = @config.default_language |
23 | 25 |
end |
24 | 26 |
|
27 |
+ def analytics |
|
28 |
+ if current_user != nil |
|
29 |
+ id = current_user.full_name |
|
30 |
+ else |
|
31 |
+ id = 'Guest_'+ Time.now.to_i.to_s |
|
32 |
+ end |
|
33 |
+ @analytics ||= Analytics.new(id) |
|
34 |
+ end |
|
35 |
+ |
|
36 |
+ def after_sign_in_path_for(resource_or_scope) |
|
37 |
+ @analytics.track_user_sign_in(current_user) |
|
38 |
+ stored_location_for(resource_or_scope) || signed_in_root_path(resource_or_scope) |
|
39 |
+ end |
|
40 |
+ |
|
25 | 41 |
protected |
26 | 42 |
|
27 | 43 |
def check_admin_mode |
@@ -3,6 +3,7 @@ class StartController < ApplicationController |
||
3 | 3 |
def index |
4 | 4 |
@blog_posts = BlogPost.order('created_at DESC').take(4) |
5 | 5 |
@subscription = Subscription.new |
6 |
+ @analytics.track('Home page view') |
|
6 | 7 |
end |
7 | 8 |
|
8 | 9 |
end |
@@ -9,4 +9,6 @@ class Users::SessionsController < Devise::SessionsController |
||
9 | 9 |
# def create |
10 | 10 |
# super |
11 | 11 |
# end |
12 |
+ |
|
13 |
+ |
|
12 | 14 |
end |
@@ -0,0 +1,38 @@ |
||
1 |
+class Analytics |
|
2 |
+ |
|
3 |
+ require 'mixpanel-ruby' |
|
4 |
+ |
|
5 |
+ |
|
6 |
+ def initialize(id) |
|
7 |
+ @tracker = Mixpanel::Tracker.new(ENV["MIXPANEL_PROJECT_TOKEN"]) |
|
8 |
+ @id = id |
|
9 |
+ end |
|
10 |
+ |
|
11 |
+ def track(page) |
|
12 |
+ @tracker.track(@id, page) |
|
13 |
+ end |
|
14 |
+ |
|
15 |
+ def track_user_registration(user) |
|
16 |
+ identify(user) |
|
17 |
+ @tracker.track(user.full_name, 'User registration') |
|
18 |
+ end |
|
19 |
+ |
|
20 |
+ def track_user_sign_in(user) |
|
21 |
+ identify(user) |
|
22 |
+ @tracker.track(user.full_name, 'User sign in') |
|
23 |
+ @tracker.people.plus_one(user.full_name, "logins") |
|
24 |
+ end |
|
25 |
+ |
|
26 |
+ private |
|
27 |
+ |
|
28 |
+ def identify(user) |
|
29 |
+ @tracker.people.set(user.full_name, { |
|
30 |
+ '$first_name' => user.first_name, |
|
31 |
+ '$last_name' => user.last_name, |
|
32 |
+ '$email' => user.email, |
|
33 |
+ 'admin' => user.admin.to_s |
|
34 |
+ }) |
|
35 |
+ |
|
36 |
+ end |
|
37 |
+ |
|
38 |
+end |
@@ -3,6 +3,7 @@ class ContactMessage < ActiveRecord::Base |
||
3 | 3 |
|
4 | 4 |
after_create do |
5 | 5 |
send_contact_message |
6 |
+ track_analytics |
|
6 | 7 |
end |
7 | 8 |
|
8 | 9 |
def name |
@@ -18,4 +19,10 @@ class ContactMessage < ActiveRecord::Base |
||
18 | 19 |
Resque.enqueue(SendContactMessage, self.id) |
19 | 20 |
end |
20 | 21 |
|
22 |
+ def track_analytics |
|
23 |
+ # Mixpanel Tracking Analytics |
|
24 |
+ @analytics = Analytics.new(self.user != nil ? self.user.full_name : ('Guest_'+ Time.now.to_i.to_s)) |
|
25 |
+ @analytics.track('Contact message sent') |
|
26 |
+ end |
|
27 |
+ |
|
21 | 28 |
end |
@@ -3,6 +3,7 @@ class Subscription < ActiveRecord::Base |
||
3 | 3 |
after_create do |
4 | 4 |
subscribe_to_mailchimp |
5 | 5 |
send_newsletter_subscription_email |
6 |
+ track_analytics |
|
6 | 7 |
end |
7 | 8 |
|
8 | 9 |
def full_name |
@@ -28,4 +29,10 @@ class Subscription < ActiveRecord::Base |
||
28 | 29 |
end |
29 | 30 |
end |
30 | 31 |
|
32 |
+ def track_analytics |
|
33 |
+ # Mixpanel Tracking Analytics |
|
34 |
+ @analytics = Analytics.new(self.full_name) |
|
35 |
+ @analytics.track('Newsletter subscription') |
|
36 |
+ end |
|
37 |
+ |
|
31 | 38 |
end |
@@ -29,6 +29,8 @@ class User < ActiveRecord::Base |
||
29 | 29 |
Subscription.create(first_name: self.first_name, last_name: self.last_name, email: self.email) |
30 | 30 |
end |
31 | 31 |
# Mixpanel Tracking Analytics |
32 |
+ @analytics = Analytics.new(self.full_name) |
|
33 |
+ @analytics.track_user_registration(self) |
|
32 | 34 |
end |
33 | 35 |
|
34 | 36 |
end |