Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions Readme.mdown
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,30 @@ haml example:
= tracking_code(:account => 'UA-12345-6')
```

### With Tracking Methods

See [Google Analytics Tracking Methods](https://developers.google.com/analytics/devguides/collection/gajs/methods/) for available options.

```
tracker_methods = {
:setDomainName => "example.com", # String argument
:setAllowLinker => true, # Boolean argument
:clearOrganic => "" # No argument
}
```

erb example:

```erb
<%= tracking_code(:account => 'UA-12345-6', :tracking_methods => tracking_methods) %>
```

haml example:

```haml
= tracking_code(:account => 'UA-12345-6', :tracking_methods => tracking_methods)
```

## Development

Source hosted at [GitHub](http://github.com/andrew/split-analytics).
Expand Down
32 changes: 29 additions & 3 deletions lib/split/analytics.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ module Analytics
def tracking_code(options={})
# needs more options: http://code.google.com/apis/analytics/docs/gaJS/gaJSApi.html
account = options.delete(:account)

tracker_methods = options.delete(:tracker_methods)

code = <<-EOF
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '#{account}']);
#{insert_tracker_methods(tracker_methods)}
#{custom_variables}
_gaq.push(['_trackPageview']);
_gaq.push(['_trackPageLoadTime']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Expand All @@ -33,6 +33,32 @@ def custom_variables
end
arr.reverse[0..4].reverse.join("\n")
end

private

def insert_tracker_methods(tracker_methods)
return nil if tracker_methods.nil?
arr = []
tracker_methods.each do |k,v|
if v.class == String && v.empty?
# No argument tracker method
arr << "_gaq.push(['" + "_" + "#{k}']);"
else
case v
when String
# String argument tracker method
arr << "_gaq.push(['" + "_" + "#{k}', '#{v}']);"
when TrueClass
# Boolean argument tracker method
arr << "_gaq.push(['" + "_" + "#{k}', #{v}]);"
when FalseClass
# Boolean argument tracker method
arr << "_gaq.push(['" + "_" + "#{k}', #{v}]);"
end
end
end
arr.join("\n")
end
end
end

Expand Down
14 changes: 12 additions & 2 deletions spec/analytics_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,17 @@
include Split::Helper
it "should generate valid analytics javascript" do
tracking_code = tracking_code(:account => 'UA-12345-6')
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")
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")
end

it "should generate valid analytics javascript with arbitrary tracker object methods" do
tracker_methods = {
:setDomainName => "example.com", # String argument
:setAllowLinker => true, # Boolean argument
:clearOrganic => "" # No argument
}
tracking_code = tracking_code(:account => 'UA-12345-6', :tracker_methods => tracker_methods)
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")
end

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

tracking_code = tracking_code(:account => 'UA-12345-6')
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")
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")
end
end