split-analytics 0.2.2
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 +17 -0
- data/Gemfile +3 -0
- data/Rakefile +7 -0
- data/Readme.mdown +56 -0
- data/lib/split/analytics/version.rb +5 -0
- data/lib/split/analytics.rb +38 -0
- data/spec/analytics_spec.rb +19 -0
- data/spec/spec_helper.rb +21 -0
- data/split-analytics.gemspec +22 -0
- metadata +107 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
data/Readme.mdown
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# Split::Analytics
|
2
|
+
|
3
|
+
An extension to [Split](http://github.com/andrew/split) to push test data to google analytics.
|
4
|
+
|
5
|
+
## Requirements
|
6
|
+
|
7
|
+
The split gem and its dependencies.
|
8
|
+
|
9
|
+
## Setup
|
10
|
+
|
11
|
+
If you are using bundler add split to your Gemfile:
|
12
|
+
|
13
|
+
gem 'split-analytics', :require => 'split/analytics'
|
14
|
+
|
15
|
+
Then run:
|
16
|
+
|
17
|
+
bundle install
|
18
|
+
|
19
|
+
Otherwise install the gem:
|
20
|
+
|
21
|
+
gem install split-analytics
|
22
|
+
|
23
|
+
and require it in your project:
|
24
|
+
|
25
|
+
require 'split/analytics'
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
Use in your application layout template
|
30
|
+
|
31
|
+
# erb
|
32
|
+
<%= tracking_code(:account => 'UA-12345-6') %>
|
33
|
+
|
34
|
+
# haml
|
35
|
+
= tracking_code(:account => 'UA-12345-6')
|
36
|
+
|
37
|
+
## Development
|
38
|
+
|
39
|
+
Source hosted at [GitHub](http://github.com/andrew/split-analytics).
|
40
|
+
Report Issues/Feature requests on [GitHub Issues](http://github.com/andrew/split-analytics/issues).
|
41
|
+
|
42
|
+
Tests can be ran with `rake spec`
|
43
|
+
|
44
|
+
### Note on Patches/Pull Requests
|
45
|
+
|
46
|
+
* Fork the project.
|
47
|
+
* Make your feature addition or bug fix.
|
48
|
+
* Add tests for it. This is important so I don't break it in a
|
49
|
+
future version unintentionally.
|
50
|
+
* Commit, do not mess with rakefile, version, or history.
|
51
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
52
|
+
* Send me a pull request. Bonus points for topic branches.
|
53
|
+
|
54
|
+
## Copyright
|
55
|
+
|
56
|
+
Copyright (c) 2011 Andrew Nesbitt. See LICENSE for details.
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "split/helper"
|
2
|
+
|
3
|
+
module Split
|
4
|
+
module Analytics
|
5
|
+
def tracking_code(options={})
|
6
|
+
# needs more options: http://code.google.com/apis/analytics/docs/gaJS/gaJSApi.html
|
7
|
+
account = options.delete(:account)
|
8
|
+
|
9
|
+
<<-EOF
|
10
|
+
<script type="text/javascript">
|
11
|
+
var _gaq = _gaq || [];
|
12
|
+
_gaq.push(['_setAccount', '#{account}']);
|
13
|
+
#{custom_variables}
|
14
|
+
_gaq.push(['_trackPageview']);
|
15
|
+
|
16
|
+
(function() {
|
17
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
18
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
19
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
20
|
+
})();
|
21
|
+
</script>
|
22
|
+
EOF
|
23
|
+
end
|
24
|
+
|
25
|
+
def custom_variables
|
26
|
+
return nil if session[:split].nil?
|
27
|
+
session[:split].map do |k,v|
|
28
|
+
"_gaq.push(['_setCustomVar', 1, '#{k}', '#{v}', 1]);"
|
29
|
+
end.join("\n")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module Split::Helper
|
35
|
+
include Split::Analytics
|
36
|
+
end
|
37
|
+
|
38
|
+
# mix Spilt::Analytics into Split::Helpers
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Split::Analytics do
|
4
|
+
include Split::Helper
|
5
|
+
it "should generate valid analytics javascript" do
|
6
|
+
tracking_code = tracking_code(:account => 'UA-12345-6')
|
7
|
+
tracking_code.should eql(" <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12345-6']);\n \n _gaq.push(['_trackPageview']);\n\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n </script>\n")
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should add custom variables for every test the user is involved in" do
|
11
|
+
first_alt = ab_test('link_colour', 'red', 'blue')
|
12
|
+
second_alt = ab_test('link_text', 'Join', 'Signup')
|
13
|
+
|
14
|
+
session[:split].should eql({'link_colour' => first_alt,'link_text' => second_alt})
|
15
|
+
|
16
|
+
tracking_code = tracking_code(:account => 'UA-12345-6')
|
17
|
+
tracking_code.should eql(" <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12345-6']);\n _gaq.push(['_setCustomVar', 1, 'link_colour', '#{first_alt}', 1]);\n_gaq.push(['_setCustomVar', 1, 'link_text', '#{second_alt}', 1]);\n _gaq.push(['_trackPageview']);\n\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n </script>\n")
|
18
|
+
end
|
19
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'split'
|
4
|
+
require 'split/helper'
|
5
|
+
require 'split/analytics'
|
6
|
+
require 'ostruct'
|
7
|
+
|
8
|
+
def session
|
9
|
+
@session ||= {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def params
|
13
|
+
@params ||= {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def request(ua = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27')
|
17
|
+
r = OpenStruct.new
|
18
|
+
r.user_agent = ua
|
19
|
+
r.ip = '192.168.1.1'
|
20
|
+
@request ||= r
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "split/analytics/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gem.authors = ["Andrew Nesbitt"]
|
7
|
+
gem.email = ["andrewnez@gmail.com"]
|
8
|
+
gem.summary = %q{Split extension to push test data to google analytics}
|
9
|
+
gem.homepage = "https://github.com/andrew/split-analytics"
|
10
|
+
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.name = "split-analytics"
|
15
|
+
gem.require_paths = ['lib']
|
16
|
+
gem.version = Split::Analytics::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency(%q<split>, ["~> 0.2.2"])
|
19
|
+
|
20
|
+
# Development Dependencies
|
21
|
+
gem.add_development_dependency(%q<rspec>, ["~> 2.6"])
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: split-analytics
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Andrew Nesbitt
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-06-21 00:00:00 +01:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: split
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 19
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 2
|
33
|
+
- 2
|
34
|
+
version: 0.2.2
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rspec
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 15
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 6
|
49
|
+
version: "2.6"
|
50
|
+
type: :development
|
51
|
+
version_requirements: *id002
|
52
|
+
description:
|
53
|
+
email:
|
54
|
+
- andrewnez@gmail.com
|
55
|
+
executables: []
|
56
|
+
|
57
|
+
extensions: []
|
58
|
+
|
59
|
+
extra_rdoc_files: []
|
60
|
+
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- Gemfile
|
64
|
+
- Rakefile
|
65
|
+
- Readme.mdown
|
66
|
+
- lib/split/analytics.rb
|
67
|
+
- lib/split/analytics/version.rb
|
68
|
+
- spec/analytics_spec.rb
|
69
|
+
- spec/spec_helper.rb
|
70
|
+
- split-analytics.gemspec
|
71
|
+
has_rdoc: true
|
72
|
+
homepage: https://github.com/andrew/split-analytics
|
73
|
+
licenses: []
|
74
|
+
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
hash: 3
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
hash: 3
|
95
|
+
segments:
|
96
|
+
- 0
|
97
|
+
version: "0"
|
98
|
+
requirements: []
|
99
|
+
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 1.3.7
|
102
|
+
signing_key:
|
103
|
+
specification_version: 3
|
104
|
+
summary: Split extension to push test data to google analytics
|
105
|
+
test_files:
|
106
|
+
- spec/analytics_spec.rb
|
107
|
+
- spec/spec_helper.rb
|