kyusik-google_analytics 1.1.5
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/CREDITS +14 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +140 -0
- data/Rakefile +56 -0
- data/lib/rubaidh.rb +2 -0
- data/lib/rubaidh/google_analytics.rb +328 -0
- data/lib/rubaidh/view_helpers.rb +67 -0
- data/rails/init.rb +5 -0
- data/tasks/google_analytics.rake +62 -0
- data/test/google_analytics_test.rb +182 -0
- data/test/test_helper.rb +8 -0
- data/test/view_helpers_test.rb +56 -0
- metadata +88 -0
data/CREDITS
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
This plugin was initially release by Graeme Mathieson, of Rubaidh Ltd.
|
2
|
+
However, since it appeared on github, it has benefited from the contributions
|
3
|
+
of many, including:
|
4
|
+
|
5
|
+
* Mike Gunderloy (ffmike)
|
6
|
+
* Mark Catley (markcatley)
|
7
|
+
* Kenneth Kalmer (kennethkalmer)
|
8
|
+
* Daniel Morrison (danielmorrison)
|
9
|
+
|
10
|
+
Thank you to all these folks for their contributions, and thank you also to
|
11
|
+
Github for facilitating their contribution without having to wait for me to
|
12
|
+
accept patches!
|
13
|
+
|
14
|
+
If I've missed anybody out, please fork, patch and send me a pull request. :-)
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2006-2008 Rubaidh Ltd.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
= GoogleAnalytics
|
2
|
+
|
3
|
+
This plugin enables Google Analytics support in your application. By default
|
4
|
+
it will output the analytics code for every single page automatically, if it
|
5
|
+
is configured correctly. This is done by adding:
|
6
|
+
|
7
|
+
Rubaidh::GoogleAnalytics.tracker_id = 'UA-12345-67'
|
8
|
+
|
9
|
+
to your <tt>config/environment.rb</tt>, inserting your own tracker id. This
|
10
|
+
can be discovered by looking at the value assigned to +_uacct+ in the
|
11
|
+
Javascript code.
|
12
|
+
|
13
|
+
If you want to disable the code insertion for particular pages, add the
|
14
|
+
following to controllers that don't want it:
|
15
|
+
|
16
|
+
skip_after_filter :add_google_analytics_code
|
17
|
+
|
18
|
+
If you are running rails 2.1 or above add install this by adding:
|
19
|
+
|
20
|
+
config.gem 'rubaidh-google_analytics', :lib => 'rubaidh/google_analytics', :source => 'http://gems.github.com'
|
21
|
+
|
22
|
+
and run:
|
23
|
+
|
24
|
+
rake gems:install
|
25
|
+
|
26
|
+
Simple. :-)
|
27
|
+
|
28
|
+
|
29
|
+
== Google Analytics Tracking Code versions
|
30
|
+
|
31
|
+
This version of the plugin uses the new Google Analytics code (ga.js) by
|
32
|
+
default.
|
33
|
+
|
34
|
+
To use the legacy tracking code add the following line to your
|
35
|
+
<tt>config/environment.rb</tt>:
|
36
|
+
|
37
|
+
Rubaidh::GoogleAnalytics.legacy_mode = true
|
38
|
+
|
39
|
+
To use new asynchronous tracking code add the following line to your
|
40
|
+
<tt>config/environment.rb</tt>:
|
41
|
+
|
42
|
+
Rubaidh::GoogleAnalytics.asynchronous_mode = true
|
43
|
+
|
44
|
+
== Tracking custom variables
|
45
|
+
|
46
|
+
You can track custom variables by setting the variable using:
|
47
|
+
|
48
|
+
Rubaidh::GoogleAnalytics.set_custom_var(name, value, slot, scope)
|
49
|
+
|
50
|
+
You can set more than one custom variable at a time by making repeated calls to
|
51
|
+
+set_custom_var+ with different variable names.
|
52
|
+
|
53
|
+
== Tracking outbound Links
|
54
|
+
|
55
|
+
Google Analytics only tracks intra-site links by default. To create an
|
56
|
+
outbound link that is tracked use the link_to_tracked helper:
|
57
|
+
|
58
|
+
link_to_tracked(name, track_path = "/", options = {}, html_options = {})
|
59
|
+
|
60
|
+
You can use the track_path parameter to group your outbound links into logical
|
61
|
+
folders inside of Google Analytics.
|
62
|
+
|
63
|
+
The other forms of link_to are also supported:
|
64
|
+
|
65
|
+
link_to_tracked_if(condition, name, track_path = "/", options = {}, html_options = {}, &block)
|
66
|
+
link_to_tracked_unless(condition, name, track_path = "/", options = {}, html_options = {}, &block)
|
67
|
+
link_to_tracked_unless_current(name, track_path = "/", options = {}, html_options = {}, &block)
|
68
|
+
|
69
|
+
To track outbound links, you should set
|
70
|
+
|
71
|
+
Rubaidh::GoogleAnalytics.defer_load = false
|
72
|
+
|
73
|
+
This will move the tracking javascript to the top of your page.
|
74
|
+
(see http://www.google.com/support/googleanalytics/bin/answer.py?answer=55527&topic=11006)
|
75
|
+
|
76
|
+
Tracked links respect the legacy_mode flag.
|
77
|
+
|
78
|
+
Note: Link-tracking works by inserting onclick() code in the HTML. Because of
|
79
|
+
this, it will overwrite any onclick that you insert in the html_options hash.
|
80
|
+
|
81
|
+
== Using local copies of the Analytics Javascript files
|
82
|
+
|
83
|
+
Under certain circumstances you might find it valuable to serve a copy of the
|
84
|
+
Analytics JavaScript directly from your server to your visitors, and not
|
85
|
+
directly from Google. If your visitors are geograhically very far from Google,
|
86
|
+
or if they have low quality international bandwidth, the loading time for the
|
87
|
+
Analytics JS might kill the user experience and force you to remove the
|
88
|
+
valuable tracking code from your site.
|
89
|
+
|
90
|
+
This plugin now supports local copies of the legacy and new Analytics
|
91
|
+
JavaScript files, updated via a rake task and served courtesy of the Rails
|
92
|
+
AssetTagHelper methods. So even if you use asset hosts, the JS will be served
|
93
|
+
from the correct source and under the correct protocol (HTTP/HTTPS).
|
94
|
+
|
95
|
+
To enable cached copies and the following to your initialization code:
|
96
|
+
|
97
|
+
Rubaidh::GoogleAnalytics.local_javascript = true
|
98
|
+
|
99
|
+
Use the following rake task to update the local copy of the JavaScript file:
|
100
|
+
|
101
|
+
rake google_analytics:updates
|
102
|
+
|
103
|
+
To keep the file updated you can add the following to your Capistrano
|
104
|
+
configuration:
|
105
|
+
|
106
|
+
after "deploy:symlink", "deploy:google_analytics"
|
107
|
+
|
108
|
+
namespace :deploy do
|
109
|
+
desc "Update local Google Analytics files"
|
110
|
+
task :google_analytics, :role => :web do
|
111
|
+
run "cd #{current_path} && rake google_analytics:update RAILS_ENV=#{ENV['RAILS_ENV']}"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
The above Capistrano recipe will almost certainly need some adjustments based
|
116
|
+
on how you run your deployments, but you should get the idea.
|
117
|
+
|
118
|
+
== Overriding application-default values
|
119
|
+
|
120
|
+
If you're using one Rails application to serve pages across multiple domains,
|
121
|
+
you may wish to override the domain and tracker ID values on a
|
122
|
+
controller-by-controller or view-by-view basis. You can do this by setting the
|
123
|
+
override_domain_name and override_tracker_id properties. These properties are
|
124
|
+
automatically reset after each use, so the values you set for domain_name and
|
125
|
+
tracker_id (usually in an initializer) will apply to all other requests.
|
126
|
+
|
127
|
+
before_filter :local_analytics
|
128
|
+
|
129
|
+
def local_analytics
|
130
|
+
Rubaidh::GoogleAnalytics.override_domain_name = 'foo.com'
|
131
|
+
Rubaidh::GoogleAnalytics.override_tracker_id = 'UA-123456-7'
|
132
|
+
end
|
133
|
+
|
134
|
+
See the documentation for the GoogleAnalytics class for other configuration
|
135
|
+
options.
|
136
|
+
|
137
|
+
Note: You will need to have the mocha gem installed to run the tests for this
|
138
|
+
plugin.
|
139
|
+
|
140
|
+
Copyright (c) 2006-2008 Rubaidh Ltd, released under the MIT license.
|
data/Rakefile
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'rake/gempackagetask'
|
5
|
+
require 'rcov/rcovtask'
|
6
|
+
require 'rubyforge'
|
7
|
+
|
8
|
+
desc 'Default: run unit tests.'
|
9
|
+
task :default => :test
|
10
|
+
|
11
|
+
task :clean => [:clobber_rdoc, :clobber_package]
|
12
|
+
|
13
|
+
desc 'Test the google_analytics plugin.'
|
14
|
+
Rake::TestTask.new(:test) do |t|
|
15
|
+
t.libs << 'lib'
|
16
|
+
t.pattern = 'test/**/*_test.rb'
|
17
|
+
t.verbose = true
|
18
|
+
end
|
19
|
+
|
20
|
+
Rcov::RcovTask.new do |t|
|
21
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
22
|
+
t.verbose = true
|
23
|
+
t.rcov_opts = ["-x", "^/"]
|
24
|
+
end
|
25
|
+
|
26
|
+
desc 'Generate documentation for the google_analytics plugin.'
|
27
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
28
|
+
rdoc.rdoc_dir = 'rdoc'
|
29
|
+
rdoc.title = 'GoogleAnalytics'
|
30
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
31
|
+
rdoc.rdoc_files.include('README.rdoc')
|
32
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
33
|
+
end
|
34
|
+
|
35
|
+
gem_spec = eval(File.read('google_analytics.gemspec'))
|
36
|
+
|
37
|
+
Rake::GemPackageTask.new(gem_spec) do |p|
|
38
|
+
p.need_tar = false
|
39
|
+
p.need_zip = false
|
40
|
+
end
|
41
|
+
|
42
|
+
desc 'Package and upload the release to rubyforge.'
|
43
|
+
task :release => [:clean, :package] do |t|
|
44
|
+
rubyforge = RubyForge.new.configure
|
45
|
+
rubyforge.login
|
46
|
+
rubyforge.add_release gem_spec.rubyforge_project, gem_spec.name, gem_spec.version.to_s, "pkg/#{gem_spec.name}-#{gem_spec.version}.gem"
|
47
|
+
end
|
48
|
+
|
49
|
+
begin
|
50
|
+
gem 'ci_reporter'
|
51
|
+
require 'ci/reporter/rake/test_unit'
|
52
|
+
task :bamboo => "ci:setup:testunit"
|
53
|
+
rescue LoadError
|
54
|
+
end
|
55
|
+
|
56
|
+
task :bamboo => [ :package, :test ]
|
data/lib/rubaidh.rb
ADDED
@@ -0,0 +1,328 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'action_pack'
|
3
|
+
require 'action_view'
|
4
|
+
|
5
|
+
module Rubaidh # :nodoc:
|
6
|
+
# This module gets mixed in to ActionController::Base
|
7
|
+
module GoogleAnalyticsMixin
|
8
|
+
# The javascript code to enable Google Analytics on the current page.
|
9
|
+
# Normally you won't need to call this directly; the +add_google_analytics_code+
|
10
|
+
# after filter will insert it for you.
|
11
|
+
def google_analytics_code
|
12
|
+
GoogleAnalytics.google_analytics_code(request.ssl?) if GoogleAnalytics.enabled?(request.format)
|
13
|
+
end
|
14
|
+
|
15
|
+
# An after_filter to automatically add the analytics code.
|
16
|
+
# If you intend to use the link_to_tracked view helpers, you need to set Rubaidh::GoogleAnalytics.defer_load = false
|
17
|
+
# to load the code at the top of the page
|
18
|
+
# (see http://www.google.com/support/googleanalytics/bin/answer.py?answer=55527&topic=11006)
|
19
|
+
def add_google_analytics_code
|
20
|
+
if GoogleAnalytics.asynchronous_mode
|
21
|
+
response.body.sub! /<[bB][oO][dD][yY]>/, "<body>#{google_analytics_code}" if response.body.respond_to?(:sub!)
|
22
|
+
elsif GoogleAnalytics.defer_load
|
23
|
+
response.body.sub! /<\/[bB][oO][dD][yY]>/, "#{google_analytics_code}</body>" if response.body.respond_to?(:sub!)
|
24
|
+
else
|
25
|
+
response.body.sub! /(<[bB][oO][dD][yY][^>]*>)/, "\\1#{google_analytics_code}" if response.body.respond_to?(:sub!)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class GoogleAnalyticsConfigurationError < StandardError; end
|
31
|
+
|
32
|
+
# The core functionality to connect a Rails application
|
33
|
+
# to a Google Analytics installation.
|
34
|
+
class GoogleAnalytics
|
35
|
+
|
36
|
+
@@custom_vars = { }
|
37
|
+
##
|
38
|
+
# :singleton-method
|
39
|
+
# Specify a custom variable to include in the analytics javascript
|
40
|
+
# name: variable name
|
41
|
+
# value: variable value
|
42
|
+
# slot: variable slot (1,2,3,4, or 5)
|
43
|
+
# scope: variable scope (page => 3, sesion => 2, visitor => 1)
|
44
|
+
def self.set_custom_var(name, value, slot = 1, scope = 3)
|
45
|
+
@@custom_vars[name] = { :value => value, :slot => slot, :scope => scope }
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# :singleton-method
|
50
|
+
# Clear all custom variables currently set
|
51
|
+
def self.clear_all_custom_vars()
|
52
|
+
@@custom_vars = { }
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# :singleton-method
|
57
|
+
# Clear the custom variable specified
|
58
|
+
def self.clear_custom_var(name)
|
59
|
+
@@custom_vars[name].delete
|
60
|
+
end
|
61
|
+
|
62
|
+
@@tracker_id = nil
|
63
|
+
##
|
64
|
+
# :singleton-method:
|
65
|
+
# Specify the Google Analytics ID for this web site. This can be found
|
66
|
+
# as the value of +_getTracker+ if you are using the new (ga.js) tracking
|
67
|
+
# code, or the value of +_uacct+ if you are using the old (urchin.js)
|
68
|
+
# tracking code.
|
69
|
+
cattr_accessor :tracker_id
|
70
|
+
|
71
|
+
@@domain_name = nil
|
72
|
+
##
|
73
|
+
# :singleton-method:
|
74
|
+
# Specify a different domain name from the default. You'll want to use
|
75
|
+
# this if you have several subdomains that you want to combine into
|
76
|
+
# one report. See the Google Analytics documentation for more
|
77
|
+
# information.
|
78
|
+
cattr_accessor :domain_name
|
79
|
+
|
80
|
+
@@legacy_mode = false
|
81
|
+
##
|
82
|
+
# :singleton-method:
|
83
|
+
# Specify whether the legacy Google Analytics code should be used. By
|
84
|
+
# default, the new Google Analytics code is used.
|
85
|
+
cattr_accessor :legacy_mode
|
86
|
+
|
87
|
+
@@asynchronous_mode = false
|
88
|
+
##
|
89
|
+
# :singleton-method:
|
90
|
+
# Specify whether the new Asynchronous Google Analytics code should be used.
|
91
|
+
# By default, the synchronous Google Analytics code is used.
|
92
|
+
# For more information:
|
93
|
+
# http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html
|
94
|
+
cattr_accessor :asynchronous_mode
|
95
|
+
|
96
|
+
@@analytics_url = 'http://www.google-analytics.com/urchin.js'
|
97
|
+
##
|
98
|
+
# :singleton-method:
|
99
|
+
# The URL that analytics information is sent to. This defaults to the
|
100
|
+
# standard Google Analytics URL, and you're unlikely to need to change it.
|
101
|
+
# This has no effect unless you're in legacy mode.
|
102
|
+
cattr_accessor :analytics_url
|
103
|
+
|
104
|
+
@@analytics_ssl_url = 'https://ssl.google-analytics.com/urchin.js'
|
105
|
+
##
|
106
|
+
# :singleton-method:
|
107
|
+
# The URL that analytics information is sent to when using SSL. This defaults to the
|
108
|
+
# standard Google Analytics URL, and you're unlikely to need to change it.
|
109
|
+
# This has no effect unless you're in legacy mode.
|
110
|
+
cattr_accessor :analytics_ssl_url
|
111
|
+
|
112
|
+
@@environments = ['production']
|
113
|
+
##
|
114
|
+
# :singleton-method:
|
115
|
+
# The environments in which to enable the Google Analytics code. Defaults
|
116
|
+
# to 'production' only. Supply an array of environment names to change this.
|
117
|
+
cattr_accessor :environments
|
118
|
+
|
119
|
+
@@formats = [:html, :all]
|
120
|
+
##
|
121
|
+
# :singleton-method:
|
122
|
+
# The request formats where tracking code should be added. Defaults to +[:html, :all]+. The entry for
|
123
|
+
# +:all+ is necessary to make Google recognize that tracking is installed on a
|
124
|
+
# site; it is not the same as responding to all requests. Supply an array
|
125
|
+
# of formats to change this.
|
126
|
+
cattr_accessor :formats
|
127
|
+
|
128
|
+
@@defer_load = true
|
129
|
+
##
|
130
|
+
# :singleton-method:
|
131
|
+
# Set this to true (the default) if you want to load the Analytics javascript at
|
132
|
+
# the bottom of page. Set this to false if you want to load the Analytics
|
133
|
+
# javascript at the top of the page. The page will render faster if you set this to
|
134
|
+
# true, but that will break the linking functions in Rubaidh::GoogleAnalyticsViewHelper.
|
135
|
+
cattr_accessor :defer_load
|
136
|
+
|
137
|
+
@@local_javascript = false
|
138
|
+
##
|
139
|
+
# :singleton-method:
|
140
|
+
# Set this to true to use a local copy of the ga.js (or urchin.js) file.
|
141
|
+
# This gives you the added benefit of serving the JS directly from your
|
142
|
+
# server, which in case of a big geographical difference between your server
|
143
|
+
# and Google's can speed things up for your visitors. Use the
|
144
|
+
# 'google_analytics:update' rake task to update the local JS copies.
|
145
|
+
cattr_accessor :local_javascript
|
146
|
+
|
147
|
+
##
|
148
|
+
# :singleton-method:
|
149
|
+
# Set this to override the initialized domain name for a single render. Useful
|
150
|
+
# when you're serving to multiple hosts from a single codebase. Typically you'd
|
151
|
+
# set up a before filter in the appropriate controller:
|
152
|
+
# before_filter :override_domain_name
|
153
|
+
# def override_domain_name
|
154
|
+
# Rubaidh::GoogleAnalytics.override_domain_name = 'foo.com'
|
155
|
+
# end
|
156
|
+
cattr_accessor :override_domain_name
|
157
|
+
|
158
|
+
##
|
159
|
+
# :singleton-method:
|
160
|
+
# Set this to override the initialized tracker ID for a single render. Useful
|
161
|
+
# when you're serving to multiple hosts from a single codebase. Typically you'd
|
162
|
+
# set up a before filter in the appropriate controller:
|
163
|
+
# before_filter :override_tracker_id
|
164
|
+
# def override_tracker_id
|
165
|
+
# Rubaidh::GoogleAnalytics.override_tracker_id = 'UA-123456-7'
|
166
|
+
# end
|
167
|
+
cattr_accessor :override_tracker_id
|
168
|
+
|
169
|
+
##
|
170
|
+
# :singleton-method:
|
171
|
+
# Set this to override the automatically generated path to the page in the
|
172
|
+
# Google Analytics reports for a single render. Typically you'd set this up on an
|
173
|
+
# action-by-action basis:
|
174
|
+
# def show
|
175
|
+
# Rubaidh::GoogleAnalytics.override_trackpageview = "path_to_report"
|
176
|
+
# ...
|
177
|
+
cattr_accessor :override_trackpageview
|
178
|
+
|
179
|
+
# Return true if the Google Analytics system is enabled and configured
|
180
|
+
# correctly for the specified format
|
181
|
+
def self.enabled?(format)
|
182
|
+
raise Rubaidh::GoogleAnalyticsConfigurationError if tracker_id.blank? || analytics_url.blank?
|
183
|
+
environments.include?(RAILS_ENV) && formats.include?(format.to_sym)
|
184
|
+
end
|
185
|
+
|
186
|
+
# Construct the javascript code to be inserted on the calling page. The +ssl+
|
187
|
+
# parameter can be used to force the SSL version of the code in legacy mode only.
|
188
|
+
def self.google_analytics_code(ssl = false)
|
189
|
+
if asynchronous_mode
|
190
|
+
code = asynchronous_google_analytics_code
|
191
|
+
elsif legacy_mode
|
192
|
+
code = legacy_google_analytics_code(ssl)
|
193
|
+
else
|
194
|
+
code = synchronous_google_analytics_code
|
195
|
+
end
|
196
|
+
|
197
|
+
return code
|
198
|
+
end
|
199
|
+
|
200
|
+
# Construct the legacy version of the Google Analytics code. The +ssl+
|
201
|
+
# parameter specifies whether or not to return the SSL version of the code.
|
202
|
+
def self.legacy_google_analytics_code(ssl = false)
|
203
|
+
extra_code = domain_name.blank? ? nil : "_udn = \"#{domain_name}\";"
|
204
|
+
if !override_domain_name.blank?
|
205
|
+
extra_code = "_udn = \"#{override_domain_name}\";"
|
206
|
+
self.override_domain_name = nil
|
207
|
+
end
|
208
|
+
|
209
|
+
url = legacy_analytics_js_url(ssl)
|
210
|
+
|
211
|
+
code = <<-HTML
|
212
|
+
<script src="#{url}" type="text/javascript">
|
213
|
+
</script>
|
214
|
+
<script type="text/javascript">
|
215
|
+
_uacct = "#{request_tracker_id}";
|
216
|
+
#{extra_code}
|
217
|
+
urchinTracker(#{request_tracked_path});
|
218
|
+
</script>
|
219
|
+
HTML
|
220
|
+
end
|
221
|
+
|
222
|
+
# Construct the synchronous version of the Google Analytics code.
|
223
|
+
def self.synchronous_google_analytics_code
|
224
|
+
if !override_domain_name.blank?
|
225
|
+
domain_code = "pageTracker._setDomainName(\"#{override_domain_name}\");"
|
226
|
+
self.override_domain_name = nil
|
227
|
+
elsif !domain_name.blank?
|
228
|
+
domain_code = "pageTracker._setDomainName(\"#{domain_name}\");"
|
229
|
+
else
|
230
|
+
domain_code = nil
|
231
|
+
end
|
232
|
+
|
233
|
+
custom_vars = []
|
234
|
+
@@custom_vars.each do |name, var|
|
235
|
+
custom_vars << "pageTracker._setCustomVar(#{var[:slot]}, \"#{name}\", \"#{var[:value]}\", #{var[:scope]});"
|
236
|
+
end
|
237
|
+
|
238
|
+
if local_javascript
|
239
|
+
code = <<-HTML
|
240
|
+
<script src="#{LocalAssetTagHelper.new.javascript_path( 'ga.js' )}" type="text/javascript">
|
241
|
+
</script>
|
242
|
+
HTML
|
243
|
+
else
|
244
|
+
code = <<-HTML
|
245
|
+
<script type="text/javascript">
|
246
|
+
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
247
|
+
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
248
|
+
</script>
|
249
|
+
HTML
|
250
|
+
end
|
251
|
+
|
252
|
+
code << <<-HTML
|
253
|
+
<script type="text/javascript">
|
254
|
+
<!--//--><![CDATA[//><!--
|
255
|
+
try {
|
256
|
+
var pageTracker = _gat._getTracker('#{request_tracker_id}');
|
257
|
+
#{domain_code}
|
258
|
+
pageTracker._initData();
|
259
|
+
#{custom_vars.empty? ? nil : custom_vars.join("\n")}
|
260
|
+
pageTracker._trackPageview(#{request_tracked_path});
|
261
|
+
} catch(err) {}
|
262
|
+
//--><!]]>
|
263
|
+
</script>
|
264
|
+
HTML
|
265
|
+
end
|
266
|
+
|
267
|
+
# Construct the new asynchronous version of the Google Analytics code.
|
268
|
+
def self.asynchronous_google_analytics_code
|
269
|
+
if !override_domain_name.blank?
|
270
|
+
domain_code = "_gaq.push(['_setDomainName', '#{override_domain_name}']);"
|
271
|
+
self.override_domain_name = nil
|
272
|
+
elsif !domain_name.blank?
|
273
|
+
domain_code = "_gaq.push(['_setDomainName', '#{domain_name}']);"
|
274
|
+
else
|
275
|
+
domain_code = nil
|
276
|
+
end
|
277
|
+
|
278
|
+
custom_vars = []
|
279
|
+
@@custom_vars.each do |name, var|
|
280
|
+
custom_vars << "_gaq.push(['_setCustomVar', '#{name}', '#{var[:value]}', #{var[:scope]}]);"
|
281
|
+
end
|
282
|
+
|
283
|
+
code = <<-HTML
|
284
|
+
<script type="text/javascript">
|
285
|
+
var _gaq = _gaq || [];
|
286
|
+
_gaq.push(['_setAccount', '#{request_tracker_id}']);
|
287
|
+
#{domain_code}
|
288
|
+
#{custom_vars.empty? ? nil : custom_vars.join("\n")}
|
289
|
+
_gaq.push(['_trackPageview(#{request_tracked_path})']);
|
290
|
+
(function() {
|
291
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
292
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
293
|
+
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
|
294
|
+
})();
|
295
|
+
</script>
|
296
|
+
HTML
|
297
|
+
end
|
298
|
+
|
299
|
+
# Generate the correct URL for the legacy Analytics JS file
|
300
|
+
def self.legacy_analytics_js_url(ssl = false)
|
301
|
+
if local_javascript
|
302
|
+
LocalAssetTagHelper.new.javascript_path( 'urchin.js' )
|
303
|
+
else
|
304
|
+
ssl ? analytics_ssl_url : analytics_url
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
# Determine the tracker ID for this request
|
309
|
+
def self.request_tracker_id
|
310
|
+
use_tracker_id = override_tracker_id.blank? ? tracker_id : override_tracker_id
|
311
|
+
self.override_tracker_id = nil
|
312
|
+
use_tracker_id
|
313
|
+
end
|
314
|
+
|
315
|
+
# Determine the path to report for this request
|
316
|
+
def self.request_tracked_path
|
317
|
+
use_tracked_path = override_trackpageview.blank? ? '' : "'#{override_trackpageview}'"
|
318
|
+
self.override_trackpageview = nil
|
319
|
+
use_tracked_path
|
320
|
+
end
|
321
|
+
|
322
|
+
end
|
323
|
+
|
324
|
+
class LocalAssetTagHelper # :nodoc:
|
325
|
+
# For helping with local javascripts
|
326
|
+
include ActionView::Helpers::AssetTagHelper
|
327
|
+
end
|
328
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Rubaidh
|
2
|
+
# Collection of methods similar to the ones in ActionView::Helpers::UrlHelper,
|
3
|
+
# with the addition of outbound link tracking. See the Google Analytics help
|
4
|
+
# at http://www.google.com/support/googleanalytics/bin/answer.py?answer=55527
|
5
|
+
# for more information on outbound link tracking.
|
6
|
+
module GoogleAnalyticsViewHelper
|
7
|
+
# Creates a link tag of the given +name+ using a URL created by the set of +options+,
|
8
|
+
# with outbound link tracking under +track_path+ in Google Analytics. The +html_options+
|
9
|
+
# will accept a hash of attributes for the link tag.
|
10
|
+
def link_to_tracked(name, track_path = "/", options = {}, html_options = {})
|
11
|
+
raise AnalyticsError.new("You must set Rubaidh::GoogleAnalytics.defer_load = false to use outbound link tracking") if GoogleAnalytics.defer_load == true
|
12
|
+
html_options.merge!({:onclick => tracking_call(track_path)})
|
13
|
+
link_to name, options, html_options
|
14
|
+
end
|
15
|
+
|
16
|
+
# Creates a link tag of the given +name+ using a URL created by the set of +options+
|
17
|
+
# if +condition+ is true, with outbound link tracking under +track_path+ in Google Analytics.
|
18
|
+
# The +html_options+ will accept a hash of attributes for the link tag.
|
19
|
+
def link_to_tracked_if(condition, name, track_path = "/", options = {}, html_options = {}, &block)
|
20
|
+
raise AnalyticsError.new("You must set Rubaidh::GoogleAnalytics.defer_load = false to use outbound link tracking") if GoogleAnalytics.defer_load == true
|
21
|
+
html_options.merge!({:onclick => tracking_call(track_path)})
|
22
|
+
link_to_unless !condition, name, options, html_options, &block
|
23
|
+
end
|
24
|
+
|
25
|
+
# Creates a link tag of the given +name+ using a URL created by the set of +options+
|
26
|
+
# unless +condition+ is true, with outbound link tracking under +track_path+ in Google Analytics.
|
27
|
+
# The +html_options+ will accept a hash of attributes for the link tag.
|
28
|
+
def link_to_tracked_unless(condition, name, track_path = "/", options = {}, html_options = {}, &block)
|
29
|
+
raise AnalyticsError.new("You must set Rubaidh::GoogleAnalytics.defer_load = false to use outbound link tracking") if GoogleAnalytics.defer_load == true
|
30
|
+
html_options.merge!({:onclick => tracking_call(track_path)})
|
31
|
+
link_to_unless condition, name, options, html_options, &block
|
32
|
+
end
|
33
|
+
|
34
|
+
# Creates a link tag of the given +name+ using a URL created by the set of +options+
|
35
|
+
# unless the current request URI is the same as the link's, with outbound link tracking
|
36
|
+
# under +track_path+ in Google Analytics. If the request URI is the same as the link
|
37
|
+
# URI, only the name is returned, or the block is yielded, if one exists.
|
38
|
+
# The +html_options+ will accept a hash of attributes for the link tag.
|
39
|
+
def link_to_tracked_unless_current(name, track_path = "/", options = {}, html_options = {}, &block)
|
40
|
+
raise AnalyticsError.new("You must set Rubaidh::GoogleAnalytics.defer_load = false to use outbound link tracking") if GoogleAnalytics.defer_load == true
|
41
|
+
html_options.merge!({:onclick =>tracking_call(track_path)})
|
42
|
+
link_to_unless current_page?(options), name, options, html_options, &block
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def tracking_call(track_path)
|
48
|
+
if GoogleAnalytics.legacy_mode
|
49
|
+
"javascript:urchinTracker('#{track_path}');"
|
50
|
+
else
|
51
|
+
"javascript:pageTracker._trackPageview('#{track_path}');"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
# Error raised by tracking methods if Rubaidh::GoogleAnalytics.defer_load is not configured
|
58
|
+
# properly to enable tracking.
|
59
|
+
class AnalyticsError < StandardError
|
60
|
+
attr_reader :message
|
61
|
+
|
62
|
+
def initialize(message)
|
63
|
+
@message = message
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
data/rails/init.rb
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
require 'rubaidh/google_analytics'
|
2
|
+
require 'rubaidh/view_helpers'
|
3
|
+
ActionController::Base.send :include, Rubaidh::GoogleAnalyticsMixin
|
4
|
+
ActionController::Base.send :after_filter, :add_google_analytics_code
|
5
|
+
ActionView::Base.send :include, Rubaidh::GoogleAnalyticsViewHelper
|
@@ -0,0 +1,62 @@
|
|
1
|
+
namespace :google_analytics do
|
2
|
+
|
3
|
+
desc "Update the local copy of the Analytics JS"
|
4
|
+
task :update => :environment do
|
5
|
+
file = Rubaidh::GoogleAnalytics.legacy_mode ? 'urchin.js' : 'ga.js'
|
6
|
+
File.open( File.join( RAILS_ROOT, 'public', 'javascripts', file ), 'w+' ) do |f|
|
7
|
+
res = Net::HTTP.get_response( 'www.google-analytics.com', '/' + file )
|
8
|
+
f.write( res.plain_body )
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Intended to extend the Net::HTTP response object
|
14
|
+
# and adds support for decoding gzip and deflate encoded pages
|
15
|
+
#
|
16
|
+
# Author: Jason Stirk <http://griffin.oobleyboo.com>
|
17
|
+
# Home: http://griffin.oobleyboo.com/projects/http_encoding_helper
|
18
|
+
# Created: 5 September 2007
|
19
|
+
# Last Updated: 23 November 2007
|
20
|
+
#
|
21
|
+
# Usage:
|
22
|
+
#
|
23
|
+
# require 'net/http'
|
24
|
+
# require 'http_encoding_helper'
|
25
|
+
# headers={'Accept-Encoding' => 'gzip, deflate' }
|
26
|
+
# http = Net::HTTP.new('griffin.oobleyboo.com', 80)
|
27
|
+
# http.start do |h|
|
28
|
+
# request = Net::HTTP::Get.new('/', headers)
|
29
|
+
# response = http.request(request)
|
30
|
+
# content=response.plain_body # Method from our library
|
31
|
+
# puts "Transferred: #{response.body.length} bytes"
|
32
|
+
# puts "Compression: #{response['content-encoding']}"
|
33
|
+
# puts "Extracted: #{response.plain_body.length} bytes"
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
|
37
|
+
require 'net/http'
|
38
|
+
require 'zlib'
|
39
|
+
require 'stringio'
|
40
|
+
|
41
|
+
class Net::HTTPResponse
|
42
|
+
# Return the uncompressed content
|
43
|
+
def plain_body
|
44
|
+
encoding=self['content-encoding']
|
45
|
+
content=nil
|
46
|
+
if encoding then
|
47
|
+
case encoding
|
48
|
+
when 'gzip'
|
49
|
+
i=Zlib::GzipReader.new(StringIO.new(self.body))
|
50
|
+
content=i.read
|
51
|
+
when 'deflate'
|
52
|
+
i=Zlib::Inflate.new
|
53
|
+
content=i.inflate(self.body)
|
54
|
+
else
|
55
|
+
raise "Unknown encoding - #{encoding}"
|
56
|
+
end
|
57
|
+
else
|
58
|
+
content=self.body
|
59
|
+
end
|
60
|
+
return content
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'mocha'
|
5
|
+
RAILS_ENV = 'test'
|
6
|
+
|
7
|
+
class TestMixin
|
8
|
+
class MockRequest
|
9
|
+
attr_accessor :format
|
10
|
+
end
|
11
|
+
class MockResponse
|
12
|
+
attr_accessor :body
|
13
|
+
end
|
14
|
+
|
15
|
+
include Rubaidh::GoogleAnalyticsMixin
|
16
|
+
attr_accessor :request, :response
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
self.request = MockRequest.new
|
20
|
+
self.response = MockResponse.new
|
21
|
+
end
|
22
|
+
|
23
|
+
# override the mixin's method
|
24
|
+
def google_analytics_code
|
25
|
+
"Google Code"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
class GoogleAnalyticsTest < Test::Unit::TestCase
|
31
|
+
def setup
|
32
|
+
@ga = Rubaidh::GoogleAnalytics.new
|
33
|
+
@ga.tracker_id = "the tracker id"
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_createable
|
37
|
+
assert_not_nil(@ga)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_domain_name_defaults_to_nil
|
41
|
+
assert_nil(@ga.domain_name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_legacy_mode_defaults_to_false
|
45
|
+
assert_equal(false, @ga.legacy_mode)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_default_analytics_url
|
49
|
+
assert_equal("http://www.google-analytics.com/urchin.js", @ga.analytics_url)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_default_analytics_ssl_url
|
53
|
+
assert_equal('https://ssl.google-analytics.com/urchin.js', @ga.analytics_ssl_url)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_default_environments
|
57
|
+
assert_equal(false, @ga.environments.include?('test'))
|
58
|
+
assert_equal(false, @ga.environments.include?('development'))
|
59
|
+
assert_equal(true, @ga.environments.include?('production'))
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_default_formats
|
63
|
+
assert_equal(false, @ga.formats.include?(:xml))
|
64
|
+
assert_equal(true, @ga.formats.include?(:html))
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_defer_load_defaults_to_true
|
68
|
+
assert_equal(true, @ga.defer_load)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_local_javascript_defaults_to_false
|
72
|
+
assert_equal(false, @ga.local_javascript)
|
73
|
+
end
|
74
|
+
|
75
|
+
# test self.enabled
|
76
|
+
def test_enabled_requires_tracker_id
|
77
|
+
Rubaidh::GoogleAnalytics.stubs(:tracker_id).returns(nil)
|
78
|
+
assert_raise(Rubaidh::GoogleAnalyticsConfigurationError) { Rubaidh::GoogleAnalytics.enabled?(:html) }
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_enabled_requires_analytics_url
|
82
|
+
Rubaidh::GoogleAnalytics.stubs(:analytics_url).returns(nil)
|
83
|
+
assert_raise(Rubaidh::GoogleAnalyticsConfigurationError) { Rubaidh::GoogleAnalytics.enabled?(:html) }
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_enabled_returns_false_if_current_environment_not_enabled
|
87
|
+
Rubaidh::GoogleAnalytics.stubs(:environments).returns(['production'])
|
88
|
+
assert_equal(false, Rubaidh::GoogleAnalytics.enabled?(:html))
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_enabled_with_default_format
|
92
|
+
Rubaidh::GoogleAnalytics.stubs(:environments).returns(['test'])
|
93
|
+
assert_equal(true, Rubaidh::GoogleAnalytics.enabled?(:html))
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_enabled_with_not_included_format
|
97
|
+
Rubaidh::GoogleAnalytics.stubs(:environments).returns(['test'])
|
98
|
+
assert_equal(false, Rubaidh::GoogleAnalytics.enabled?(:xml))
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_enabled_with_added_format
|
102
|
+
Rubaidh::GoogleAnalytics.stubs(:environments).returns(['test'])
|
103
|
+
Rubaidh::GoogleAnalytics.stubs(:formats).returns([:xml])
|
104
|
+
assert_equal(true, Rubaidh::GoogleAnalytics.enabled?(:xml))
|
105
|
+
end
|
106
|
+
|
107
|
+
# test request_tracker_id
|
108
|
+
def test_request_tracker_id_without_override
|
109
|
+
Rubaidh::GoogleAnalytics.stubs(:tracker_id).returns("1234")
|
110
|
+
assert_equal("1234", Rubaidh::GoogleAnalytics.request_tracker_id)
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_request_tracker_id_with_override
|
114
|
+
Rubaidh::GoogleAnalytics.stubs(:tracker_id).returns("1234")
|
115
|
+
Rubaidh::GoogleAnalytics.override_tracker_id = "4567"
|
116
|
+
assert_equal("4567", Rubaidh::GoogleAnalytics.request_tracker_id)
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_request_tracker_id_resets_override
|
120
|
+
Rubaidh::GoogleAnalytics.override_tracker_id = "4567"
|
121
|
+
Rubaidh::GoogleAnalytics.stubs(:tracker_id).returns("1234")
|
122
|
+
foo = Rubaidh::GoogleAnalytics.request_tracker_id
|
123
|
+
assert_nil(Rubaidh::GoogleAnalytics.override_tracker_id)
|
124
|
+
end
|
125
|
+
|
126
|
+
# test request_tracked_path
|
127
|
+
def test_request_tracked_path_without_override
|
128
|
+
assert_equal('', Rubaidh::GoogleAnalytics.request_tracked_path)
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_request_tracked_path_with_override
|
132
|
+
Rubaidh::GoogleAnalytics.override_trackpageview = "/my/path"
|
133
|
+
assert_equal("'/my/path'", Rubaidh::GoogleAnalytics.request_tracked_path)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_request_tracked_path_resets_override
|
137
|
+
Rubaidh::GoogleAnalytics.override_trackpageview = "/my/path"
|
138
|
+
foo = Rubaidh::GoogleAnalytics.request_tracked_path
|
139
|
+
assert_nil(Rubaidh::GoogleAnalytics.override_trackpageview)
|
140
|
+
end
|
141
|
+
|
142
|
+
# Test the before_filter method does what we expect by subsituting the body tags and inserting
|
143
|
+
# some google code for us automagically.
|
144
|
+
def test_add_google_analytics_code
|
145
|
+
# setup our test mixin
|
146
|
+
mixin = TestMixin.new
|
147
|
+
|
148
|
+
# bog standard body tag
|
149
|
+
Rubaidh::GoogleAnalytics.defer_load = false
|
150
|
+
mixin.response.body = "<body><p>some text</p></body>"
|
151
|
+
mixin.add_google_analytics_code
|
152
|
+
assert_equal mixin.response.body, '<body>Google Code<p>some text</p></body>'
|
153
|
+
|
154
|
+
Rubaidh::GoogleAnalytics.defer_load = true
|
155
|
+
mixin.response.body = "<body><p>some text</p></body>"
|
156
|
+
mixin.add_google_analytics_code
|
157
|
+
assert_equal mixin.response.body, '<body><p>some text</p>Google Code</body>'
|
158
|
+
|
159
|
+
# body tag upper cased (ignoring this is semantically incorrect)
|
160
|
+
Rubaidh::GoogleAnalytics.defer_load = false
|
161
|
+
mixin.response.body = "<BODY><p>some text</p></BODY>"
|
162
|
+
mixin.add_google_analytics_code
|
163
|
+
assert_equal mixin.response.body, '<BODY>Google Code<p>some text</p></BODY>'
|
164
|
+
|
165
|
+
Rubaidh::GoogleAnalytics.defer_load = true
|
166
|
+
mixin.response.body = "<BODY><p>some text</p></BODY>"
|
167
|
+
mixin.add_google_analytics_code
|
168
|
+
assert_equal mixin.response.body, '<BODY><p>some text</p>Google Code</body>'
|
169
|
+
|
170
|
+
# body tag has additional attributes
|
171
|
+
Rubaidh::GoogleAnalytics.defer_load = false
|
172
|
+
mixin.response.body = '<body style="background-color:red"><p>some text</p></body>'
|
173
|
+
mixin.add_google_analytics_code
|
174
|
+
assert_equal mixin.response.body, '<body style="background-color:red">Google Code<p>some text</p></body>'
|
175
|
+
|
176
|
+
Rubaidh::GoogleAnalytics.defer_load = true
|
177
|
+
mixin.response.body = '<body style="background-color:red"><p>some text</p></body>'
|
178
|
+
mixin.add_google_analytics_code
|
179
|
+
assert_equal mixin.response.body, '<body style="background-color:red"><p>some text</p>Google Code</body>'
|
180
|
+
end
|
181
|
+
|
182
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
include Rubaidh::GoogleAnalyticsViewHelper
|
3
|
+
include ActionView::Helpers::UrlHelper
|
4
|
+
include ActionView::Helpers::TagHelper
|
5
|
+
|
6
|
+
class ViewHelpersTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
Rubaidh::GoogleAnalytics.defer_load = false
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_link_to_tracked_should_return_a_tracked_link
|
13
|
+
assert_equal "<a href=\"http://www.example.com\" onclick=\"javascript:pageTracker._trackPageview('/sites/linked');\">Link</a>", link_to_tracked('Link', '/sites/linked', "http://www.example.com" )
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_link_to_tracked_with_legacy_should_return_a_tracked_link
|
17
|
+
Rubaidh::GoogleAnalytics.legacy_mode = true
|
18
|
+
assert_equal "<a href=\"http://www.example.com\" onclick=\"javascript:urchinTracker('/sites/linked');\">Link</a>", link_to_tracked('Link', '/sites/linked', "http://www.example.com" )
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_link_to_tracked_should_error_if_defer_load
|
22
|
+
Rubaidh::GoogleAnalytics.defer_load = true
|
23
|
+
assert_raise(Rubaidh::AnalyticsError) { link_to_tracked('Link', '/sites/linked', "http://www.example.com" ) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_link_to_tracked_if_with_true_should_return_a_tracked_link
|
27
|
+
assert_equal "<a href=\"http://www.example.com\" onclick=\"javascript:pageTracker._trackPageview('/sites/linked');\">Link</a>", link_to_tracked_if(true, 'Link', '/sites/linked', "http://www.example.com" )
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_link_to_tracked_if_with_false_should_return_unlinked_text
|
31
|
+
assert_equal "Link", link_to_tracked_if(false, 'Link', '/sites/linked', "http://www.example.com" )
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_link_to_tracked_if_should_error_if_defer_load
|
35
|
+
Rubaidh::GoogleAnalytics.defer_load = true
|
36
|
+
assert_raise(Rubaidh::AnalyticsError) { link_to_tracked_if(false, 'Link', '/sites/linked', "http://www.example.com" ) }
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_link_to_tracked_unless_with_false_should_return_a_tracked_link
|
40
|
+
assert_equal "<a href=\"http://www.example.com\" onclick=\"javascript:pageTracker._trackPageview('/sites/linked');\">Link</a>", link_to_tracked_unless(false, 'Link', '/sites/linked', "http://www.example.com" )
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_link_to_tracked_unless_with_true_should_return_unlinked_text
|
44
|
+
assert_equal "Link", link_to_tracked_unless(true, 'Link', '/sites/linked', "http://www.example.com" )
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_link_to_tracked_unless_should_error_if_defer_load
|
48
|
+
Rubaidh::GoogleAnalytics.defer_load = true
|
49
|
+
assert_raise(Rubaidh::AnalyticsError) { link_to_tracked_unless(false, 'Link', '/sites/linked', "http://www.example.com" ) }
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_link_to_tracked_unless_current
|
53
|
+
#postponed
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kyusik-google_analytics
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Graeme Mathieson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-04-28 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: actionpack
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activesupport
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description: |
|
36
|
+
By default this gem will output google analytics code forevery page automatically, if it's configured correctly.This is done by adding:
|
37
|
+
Rubaidh::GoogleAnalytics.tracker_id = 'UA-12345-67'
|
38
|
+
|
39
|
+
email: mathie@rubaidh.com
|
40
|
+
executables: []
|
41
|
+
|
42
|
+
extensions: []
|
43
|
+
|
44
|
+
extra_rdoc_files: []
|
45
|
+
|
46
|
+
files:
|
47
|
+
- CREDITS
|
48
|
+
- MIT-LICENSE
|
49
|
+
- README.rdoc
|
50
|
+
- Rakefile
|
51
|
+
- rails/init.rb
|
52
|
+
- test/google_analytics_test.rb
|
53
|
+
- test/test_helper.rb
|
54
|
+
- test/view_helpers_test.rb
|
55
|
+
- lib/rubaidh.rb
|
56
|
+
- lib/rubaidh/google_analytics.rb
|
57
|
+
- lib/rubaidh/view_helpers.rb
|
58
|
+
- tasks/google_analytics.rake
|
59
|
+
has_rdoc: true
|
60
|
+
homepage: http://rubaidh.com/portfolio/open-source/google-analytics/
|
61
|
+
licenses: []
|
62
|
+
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options: []
|
65
|
+
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: "0"
|
73
|
+
version:
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: "0"
|
79
|
+
version:
|
80
|
+
requirements: []
|
81
|
+
|
82
|
+
rubyforge_project: rubaidh
|
83
|
+
rubygems_version: 1.3.5
|
84
|
+
signing_key:
|
85
|
+
specification_version: 3
|
86
|
+
summary: "[Rails] Easily enable Google Analytics support in your Rails application."
|
87
|
+
test_files: []
|
88
|
+
|