mixpanel_rails 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in mixpanel_rails.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,3 @@
1
+ module MixpanelRails
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,56 @@
1
+ require "mixpanel_rails/version"
2
+ require 'mixpanel'
3
+
4
+ module MixpanelRails
5
+ class Railtie < Rails::Railtie
6
+ config.mixpanel_rails = ActiveSupport::OrderedOptions.new
7
+ config.mixpanel_rails.middleware = Mixpanel::Tracker::Middleware
8
+ initializer 'mixpanel_rails' do |app|
9
+ app.middleware.use app.config.mixpanel_rails.middleware, app.config.mixpanel_rails.token, :async => true
10
+ ActiveSupport.on_load :action_controller do
11
+ self.class.send :include, ClassMethods
12
+ end
13
+ end
14
+ end
15
+
16
+ module ClassMethods
17
+ def uses_mixpanel(args = {})
18
+ cattr_accessor :mixpanel_distinct_id, :mixpanel_name_tag
19
+ self.mixpanel_distinct_id = args[:distinct_id] || lambda {}
20
+ self.mixpanel_name_tag = args[:name_tag] || lambda {}
21
+ include MixpanelRails::InstanceMethods
22
+ after_filter :process_mixpanel_queue
23
+ end
24
+ end
25
+
26
+ module InstanceMethods
27
+ def track_with_mixpanel(s)
28
+ mixpanel_queue << s
29
+ end
30
+
31
+ def process_mixpanel_queue
32
+ unless response.redirect_url
33
+ mixpanel = Mixpanel::Tracker.new(MixpanelRails::Railtie.config.mixpanel_rails.token, request.env, true)
34
+ if env["Rack-Middleware-PDFKit"]
35
+ mixpanel_queue.each {|s| mixpanel.track_event(s, register_with_mixpanel) }
36
+ else
37
+ name_tag = mixpanel_name_tag.bind(self).call
38
+ mixpanel.append_api(:register, register_with_mixpanel)
39
+ mixpanel.append_api(:name_tag, name_tag) if name_tag
40
+ mixpanel_queue.each {|s| mixpanel.append_api :track, s }
41
+ end
42
+ session.delete :register_with_mixpanel
43
+ session.delete :mixpanel_queue
44
+ end
45
+ end
46
+
47
+ def register_with_mixpanel
48
+ distinct_id = mixpanel_distinct_id.bind(self).call
49
+ session[:register_with_mixpanel] ||= distinct_id ? { distinct_id: distinct_id } : {}
50
+ end
51
+
52
+ def mixpanel_queue
53
+ session[:mixpanel_queue] ||= []
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "mixpanel_rails/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "mixpanel_rails"
7
+ s.version = MixpanelRails::VERSION
8
+ s.authors = ["Paul McMahon"]
9
+ s.email = ["paul@mobalean.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Easy mixpanel integration for rails}
12
+ s.description = %q{Track stuff using javascript from your controllers, even after redirects}
13
+
14
+ s.rubyforge_project = "mixpanel_rails"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency 'mixpanel', '~> 1.0.0'
22
+ end
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mixpanel_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Paul McMahon
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-13 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mixpanel
16
+ requirement: &2156876620 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2156876620
25
+ description: Track stuff using javascript from your controllers, even after redirects
26
+ email:
27
+ - paul@mobalean.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - Rakefile
35
+ - lib/mixpanel_rails.rb
36
+ - lib/mixpanel_rails/version.rb
37
+ - mixpanel_rails.gemspec
38
+ homepage: ''
39
+ licenses: []
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubyforge_project: mixpanel_rails
58
+ rubygems_version: 1.8.6
59
+ signing_key:
60
+ specification_version: 3
61
+ summary: Easy mixpanel integration for rails
62
+ test_files: []