Skip to content

Commit f78252d

Browse files
committed
Merge pull request #6 from jpoday/add-tracker-object-methods
added tracker object methods
2 parents 682b822 + 38fa36d commit f78252d

File tree

3 files changed

+65
-5
lines changed

3 files changed

+65
-5
lines changed

Readme.mdown

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,30 @@ haml example:
4848
= tracking_code(:account => 'UA-12345-6')
4949
```
5050

51+
### With Tracking Methods
52+
53+
See [Google Analytics Tracking Methods](https://developers.google.com/analytics/devguides/collection/gajs/methods/) for available options.
54+
55+
```
56+
tracker_methods = {
57+
:setDomainName => "example.com", # String argument
58+
:setAllowLinker => true, # Boolean argument
59+
:clearOrganic => "" # No argument
60+
}
61+
```
62+
63+
erb example:
64+
65+
```erb
66+
<%= tracking_code(:account => 'UA-12345-6', :tracking_methods => tracking_methods) %>
67+
```
68+
69+
haml example:
70+
71+
```haml
72+
= tracking_code(:account => 'UA-12345-6', :tracking_methods => tracking_methods)
73+
```
74+
5175
## Development
5276

5377
Source hosted at [GitHub](http://github.com/andrew/split-analytics).

lib/split/analytics.rb

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ module Analytics
55
def tracking_code(options={})
66
# needs more options: http://code.google.com/apis/analytics/docs/gaJS/gaJSApi.html
77
account = options.delete(:account)
8-
8+
tracker_methods = options.delete(:tracker_methods)
9+
910
code = <<-EOF
1011
<script type="text/javascript">
1112
var _gaq = _gaq || [];
1213
_gaq.push(['_setAccount', '#{account}']);
14+
#{insert_tracker_methods(tracker_methods)}
1315
#{custom_variables}
1416
_gaq.push(['_trackPageview']);
15-
_gaq.push(['_trackPageLoadTime']);
16-
1717
(function() {
1818
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
1919
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
@@ -33,6 +33,32 @@ def custom_variables
3333
end
3434
arr.reverse[0..4].reverse.join("\n")
3535
end
36+
37+
private
38+
39+
def insert_tracker_methods(tracker_methods)
40+
return nil if tracker_methods.nil?
41+
arr = []
42+
tracker_methods.each do |k,v|
43+
if v.class == String && v.empty?
44+
# No argument tracker method
45+
arr << "_gaq.push(['" + "_" + "#{k}']);"
46+
else
47+
case v
48+
when String
49+
# String argument tracker method
50+
arr << "_gaq.push(['" + "_" + "#{k}', '#{v}']);"
51+
when TrueClass
52+
# Boolean argument tracker method
53+
arr << "_gaq.push(['" + "_" + "#{k}', #{v}]);"
54+
when FalseClass
55+
# Boolean argument tracker method
56+
arr << "_gaq.push(['" + "_" + "#{k}', #{v}]);"
57+
end
58+
end
59+
end
60+
arr.join("\n")
61+
end
3662
end
3763
end
3864

spec/analytics_spec.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,17 @@
44
include Split::Helper
55
it "should generate valid analytics javascript" do
66
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 _gaq.push(['_trackPageLoadTime']);\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")
7+
tracking_code.should eql(" <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12345-6']);\n \n \n _gaq.push(['_trackPageview']);\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 generate valid analytics javascript with arbitrary tracker object methods" do
11+
tracker_methods = {
12+
:setDomainName => "example.com", # String argument
13+
:setAllowLinker => true, # Boolean argument
14+
:clearOrganic => "" # No argument
15+
}
16+
tracking_code = tracking_code(:account => 'UA-12345-6', :tracker_methods => tracker_methods)
17+
tracking_code.should eql(" <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12345-6']);\n _gaq.push(['_setDomainName', 'example.com']);\n_gaq.push(['_setAllowLinker', true]);\n_gaq.push(['_clearOrganic']);\n \n _gaq.push(['_trackPageview']);\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")
818
end
919

1020
it "should add custom variables for every test the user is involved in" do
@@ -14,6 +24,6 @@
1424
session[:split].should eql({'link_colour' => first_alt,'link_text' => second_alt})
1525

1626
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', 2, 'link_text', '#{second_alt}', 1]);\n _gaq.push(['_trackPageview']);\n _gaq.push(['_trackPageLoadTime']);\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")
27+
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', 2, 'link_text', '#{second_alt}', 1]);\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")
1828
end
1929
end

0 commit comments

Comments
 (0)