rubaidh-google_analytics 1.0.20081111

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/README.rdoc ADDED
@@ -0,0 +1,122 @@
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
+ == Note
30
+
31
+ This version of the plugin uses the new Google Analytics code (ga.js) by
32
+ default. To use the legacy tracking code add the following line to your
33
+ <tt>config/environment.rb</tt>:
34
+
35
+ Rubaidh::GoogleAnalytics.legacy_mode = true
36
+
37
+ == Tracking outbound Links
38
+
39
+ Google Analytics only tracks intra-site links by default. To create an
40
+ outbound link that is tracked use the link_to_tracked helper:
41
+
42
+ link_to_tracked(name, track_path = "/", options = {}, html_options = {})
43
+
44
+ You can use the track_path parameter to group your outbound links into logical
45
+ folders inside of Google Analytics.
46
+
47
+ The other forms of link_to are also supported:
48
+
49
+ link_to_tracked_if(condition, name, track_path = "/", options = {}, html_options = {}, &block)
50
+ link_to_tracked_unless(condition, name, track_path = "/", options = {}, html_options = {}, &block)
51
+ link_to_tracked_unless_current(name, track_path = "/", options = {}, html_options = {}, &block)
52
+
53
+ To track outbound links, you should set
54
+
55
+ Rubaidh::GoogleAnalytics.defer_load = false
56
+
57
+ This will move the tracking javascript to the top of your page.
58
+ (see http://www.google.com/support/googleanalytics/bin/answer.py?answer=55527&topic=11006)
59
+
60
+ Tracked links respect the legacy_mode flag.
61
+
62
+ Note: Link-tracking works by inserting onclick() code in the HTML. Because of
63
+ this, it will overwrite any onclick that you insert in the html_options hash.
64
+
65
+ == Using local copies of the Analytics Javascript files
66
+
67
+ Under certain circumstances you might find it valuable to serve a copy of the
68
+ Analytics JavaScript directly from your server to your visitors, and not
69
+ directly from Google. If your visitors are geograhically very far from Google,
70
+ or if they have low quality international bandwidth, the loading time for the
71
+ Analytics JS might kill the user experience and force you to remove the
72
+ valuable tracking code from your site.
73
+
74
+ This plugin now supports local copies of the legacy and new Analytics
75
+ JavaScript files, updated via a rake task and served courtesy of the Rails
76
+ AssetTagHelper methods. So even if you use asset hosts, the JS will be served
77
+ from the correct source and under the correct protocol (HTTP/HTTPS).
78
+
79
+ To enable cached copies and the following to your initialization code:
80
+
81
+ Rubaidh::GoogleAnalytics.local_javascript = true
82
+
83
+ Use the following rake task to update the local copy of the JavaScript file:
84
+
85
+ rake google_analytics:updates
86
+
87
+ To keep the file updated you can add the following to your Capistrano
88
+ configuration:
89
+
90
+ after "deploy:symlink", "deploy:google_analytics"
91
+
92
+ namespace :deploy do
93
+ desc "Update local Google Analytics files"
94
+ task :google_analytics, :role => :web do
95
+ run "cd #{current_path} && rake google_analytics:update RAILS_ENV=#{ENV['RAILS_ENV']}"
96
+ end
97
+ end
98
+
99
+ The above Capistrano recipe will almost certainly need some adjustments based
100
+ on how you run your deployments, but you should get the idea.
101
+
102
+ == Overriding application-default values
103
+
104
+ If you're using one Rails application to serve pages across multiple domains,
105
+ you may wish to override the domain and tracker ID values on a
106
+ controller-by-controller or view-by-view basis. You can do this by setting the
107
+ override_domain_name and override_tracker_id properties. These properties are
108
+ automatically reset after each use, so the values you set for domain_name and
109
+ tracker_id (usually in an initializer) will apply to all other requests.
110
+
111
+ before_filter :local_analytics
112
+
113
+ def local_analytics
114
+ Rubaidh::GoogleAnalytics.override_domain_name = 'foo.com'
115
+ Rubaidh::GoogleAnalytics.override_tracker_id = 'UA-123456-7'
116
+ end
117
+
118
+ See the documentation for the GoogleAnalytics class for other configuration
119
+ options.
120
+
121
+ Note: You will need to have the mocha gem installed to run the tests for this
122
+ plugin.
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the google_analytics plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.pattern = 'test/**/*_test.rb'
12
+ t.verbose = true
13
+ end
14
+
15
+ desc 'Generate documentation for the google_analytics plugin.'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ rdoc.title = 'GoogleAnalytics'
19
+ rdoc.options << '--line-numbers' << '--inline-source'
20
+ rdoc.rdoc_files.include('README.rdoc')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
@@ -0,0 +1,233 @@
1
+ module Rubaidh # :nodoc:
2
+ # This module gets mixed in to ActionController::Base
3
+ module GoogleAnalyticsMixin
4
+ # The javascript code to enable Google Analytics on the current page.
5
+ # Normally you won't need to call this directly; the +add_google_analytics_code+
6
+ # after filter will insert it for you.
7
+ def google_analytics_code
8
+ GoogleAnalytics.google_analytics_code(request.ssl?) if GoogleAnalytics.enabled?(request.format)
9
+ end
10
+
11
+ # An after_filter to automatically add the analytics code.
12
+ # If you intend to use the link_to_tracked view helpers, you need to set Rubaidh::GoogleAnalytics.defer_load = false
13
+ # to load the code at the top of the page
14
+ # (see http://www.google.com/support/googleanalytics/bin/answer.py?answer=55527&topic=11006)
15
+ def add_google_analytics_code
16
+ if GoogleAnalytics.defer_load
17
+ response.body.sub! '</body>', "#{google_analytics_code}</body>" if response.body.respond_to?(:sub!)
18
+ else
19
+ response.body.sub! '<body>', "<body>#{google_analytics_code}" if response.body.respond_to?(:sub!)
20
+ end
21
+ end
22
+ end
23
+
24
+ class GoogleAnalyticsConfigurationError < StandardError; end
25
+
26
+ # The core functionality to connect a Rails application
27
+ # to a Google Analytics installation.
28
+ class GoogleAnalytics
29
+
30
+ @@tracker_id = nil
31
+ ##
32
+ # :singleton-method:
33
+ # Specify the Google Analytics ID for this web site. This can be found
34
+ # as the value of +_getTracker+ if you are using the new (ga.js) tracking
35
+ # code, or the value of +_uacct+ if you are using the old (urchin.js)
36
+ # tracking code.
37
+ cattr_accessor :tracker_id
38
+
39
+ @@domain_name = nil
40
+ ##
41
+ # :singleton-method:
42
+ # Specify a different domain name from the default. You'll want to use
43
+ # this if you have several subdomains that you want to combine into
44
+ # one report. See the Google Analytics documentation for more
45
+ # information.
46
+ cattr_accessor :domain_name
47
+
48
+ @@legacy_mode = false
49
+ ##
50
+ # :singleton-method:
51
+ # Specify whether the legacy Google Analytics code should be used. By
52
+ # default, the new Google Analytics code is used.
53
+ cattr_accessor :legacy_mode
54
+
55
+ @@analytics_url = 'http://www.google-analytics.com/urchin.js'
56
+ ##
57
+ # :singleton-method:
58
+ # The URL that analytics information is sent to. This defaults to the
59
+ # standard Google Analytics URL, and you're unlikely to need to change it.
60
+ # This has no effect unless you're in legacy mode.
61
+ cattr_accessor :analytics_url
62
+
63
+ @@analytics_ssl_url = 'https://ssl.google-analytics.com/urchin.js'
64
+ ##
65
+ # :singleton-method:
66
+ # The URL that analytics information is sent to when using SSL. This defaults to the
67
+ # standard Google Analytics URL, and you're unlikely to need to change it.
68
+ # This has no effect unless you're in legacy mode.
69
+ cattr_accessor :analytics_ssl_url
70
+
71
+ @@environments = ['production']
72
+ ##
73
+ # :singleton-method:
74
+ # The environments in which to enable the Google Analytics code. Defaults
75
+ # to 'production' only. Supply an array of environment names to change this.
76
+ cattr_accessor :environments
77
+
78
+ @@formats = [:html, :all]
79
+ ##
80
+ # :singleton-method:
81
+ # The request formats where tracking code should be added. Defaults to +[:html, :all]+. The entry for
82
+ # +:all+ is necessary to make Google recognize that tracking is installed on a
83
+ # site; it is not the same as responding to all requests. Supply an array
84
+ # of formats to change this.
85
+ cattr_accessor :formats
86
+
87
+ @@defer_load = true
88
+ ##
89
+ # :singleton-method:
90
+ # Set this to true (the default) if you want to load the Analytics javascript at
91
+ # the bottom of page. Set this to false if you want to load the Analytics
92
+ # javascript at the top of the page. The page will render faster if you set this to
93
+ # true, but that will break the linking functions in Rubaidh::GoogleAnalyticsViewHelper.
94
+ cattr_accessor :defer_load
95
+
96
+ @@local_javascript = false
97
+ ##
98
+ # :singleton-method:
99
+ # Set this to true to use a local copy of the ga.js (or urchin.js) file.
100
+ # This gives you the added benefit of serving the JS directly from your
101
+ # server, which in case of a big geographical difference between your server
102
+ # and Google's can speed things up for your visitors. Use the
103
+ # 'google_analytics:update' rake task to update the local JS copies.
104
+ cattr_accessor :local_javascript
105
+
106
+ ##
107
+ # :singleton-method:
108
+ # Set this to override the initialized domain name for a single render. Useful
109
+ # when you're serving to multiple hosts from a single codebase. Typically you'd
110
+ # set up a before filter in the appropriate controller:
111
+ # before_filter :override_domain_name
112
+ # def override_domain_name
113
+ # Rubaidh::GoogleAnalytics.override_domain_name = 'foo.com'
114
+ # end
115
+ cattr_accessor :override_domain_name
116
+
117
+ ##
118
+ # :singleton-method:
119
+ # Set this to override the initialized tracker ID for a single render. Useful
120
+ # when you're serving to multiple hosts from a single codebase. Typically you'd
121
+ # set up a before filter in the appropriate controller:
122
+ # before_filter :override_tracker_id
123
+ # def override_tracker_id
124
+ # Rubaidh::GoogleAnalytics.override_tracker_id = 'UA-123456-7'
125
+ # end
126
+ cattr_accessor :override_tracker_id
127
+
128
+ ##
129
+ # :singleton-method:
130
+ # Set this to override the automatically generated path to the page in the
131
+ # Google Analytics reports for a single render. Typically you'd set this up on an
132
+ # action-by-action basis:
133
+ # def show
134
+ # Rubaidh::GoogleAnalytics.override_trackpageview = "path_to_report"
135
+ # ...
136
+ cattr_accessor :override_trackpageview
137
+
138
+ # Return true if the Google Analytics system is enabled and configured
139
+ # correctly for the specified format
140
+ def self.enabled?(format)
141
+ raise Rubaidh::GoogleAnalyticsConfigurationError if tracker_id.blank? || analytics_url.blank?
142
+ environments.include?(RAILS_ENV) && formats.include?(format.to_sym)
143
+ end
144
+
145
+ # Construct the javascript code to be inserted on the calling page. The +ssl+
146
+ # parameter can be used to force the SSL version of the code in legacy mode only.
147
+ def self.google_analytics_code(ssl = false)
148
+ return legacy_google_analytics_code(ssl) if legacy_mode
149
+
150
+ extra_code = domain_name.blank? ? nil : "pageTracker._setDomainName(\"#{domain_name}\");"
151
+ if !override_domain_name.blank?
152
+ extra_code = "pageTracker._setDomainName(\"#{override_domain_name}\");"
153
+ self.override_domain_name = nil
154
+ end
155
+
156
+ code = if local_javascript
157
+ <<-HTML
158
+ <script src="#{LocalAssetTagHelper.new.javascript_path( 'ga.js' )}" type="text/javascript">
159
+ </script>
160
+ HTML
161
+ else
162
+ <<-HTML
163
+ <script type="text/javascript">
164
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
165
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
166
+ </script>
167
+ HTML
168
+ end
169
+
170
+ code << <<-HTML
171
+ <script type="text/javascript">
172
+ <!--//--><![CDATA[//><!--
173
+ var pageTracker = _gat._getTracker('#{request_tracker_id}');
174
+ #{extra_code}
175
+ pageTracker._initData();
176
+ pageTracker._trackPageview(#{request_tracked_path});
177
+ //--><!]]>
178
+ </script>
179
+ HTML
180
+ end
181
+
182
+ # Construct the legacy version of the Google Analytics code. The +ssl+
183
+ # parameter specifies whether or not to return the SSL version of the code.
184
+ def self.legacy_google_analytics_code(ssl = false)
185
+ extra_code = domain_name.blank? ? nil : "_udn = \"#{domain_name}\";"
186
+ if !override_domain_name.blank?
187
+ extra_code = "_udn = \"#{override_domain_name}\";"
188
+ self.override_domain_name = nil
189
+ end
190
+
191
+ url = legacy_analytics_js_url(ssl)
192
+
193
+ code = <<-HTML
194
+ <script src="#{url}" type="text/javascript">
195
+ </script>
196
+ <script type="text/javascript">
197
+ _uacct = "#{request_tracker_id}";
198
+ #{extra_code}
199
+ urchinTracker(#{request_tracked_path});
200
+ </script>
201
+ HTML
202
+ end
203
+
204
+ # Generate the correct URL for the legacy Analytics JS file
205
+ def self.legacy_analytics_js_url(ssl = false)
206
+ if local_javascript
207
+ LocalAssetTagHelper.new.javascript_path( 'urchin.js' )
208
+ else
209
+ ssl ? analytics_ssl_url : analytics_url
210
+ end
211
+ end
212
+
213
+ # Determine the tracker ID for this request
214
+ def self.request_tracker_id
215
+ use_tracker_id = override_tracker_id.blank? ? tracker_id : override_tracker_id
216
+ self.override_tracker_id = nil
217
+ use_tracker_id
218
+ end
219
+
220
+ # Determine the path to report for this request
221
+ def self.request_tracked_path
222
+ use_tracked_path = override_trackpageview.blank? ? '' : "'#{override_trackpageview}'"
223
+ self.override_trackpageview = nil
224
+ use_tracked_path
225
+ end
226
+
227
+ end
228
+
229
+ class LocalAssetTagHelper # :nodoc:
230
+ # For helping with local javascripts
231
+ include ActionView::Helpers::AssetTagHelper
232
+ end
233
+ 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,119 @@
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 GoogleAnalyticsTest < Test::Unit::TestCase
8
+ def setup
9
+ @ga = Rubaidh::GoogleAnalytics.new
10
+ @ga.tracker_id = "the tracker id"
11
+ end
12
+
13
+ def test_createable
14
+ assert_not_nil(@ga)
15
+ end
16
+
17
+ def test_domain_name_defaults_to_nil
18
+ assert_nil(@ga.domain_name)
19
+ end
20
+
21
+ def test_legacy_mode_defaults_to_false
22
+ assert_equal(false, @ga.legacy_mode)
23
+ end
24
+
25
+ def test_default_analytics_url
26
+ assert_equal("http://www.google-analytics.com/urchin.js", @ga.analytics_url)
27
+ end
28
+
29
+ def test_default_analytics_ssl_url
30
+ assert_equal('https://ssl.google-analytics.com/urchin.js', @ga.analytics_ssl_url)
31
+ end
32
+
33
+ def test_default_environments
34
+ assert_equal(false, @ga.environments.include?('test'))
35
+ assert_equal(false, @ga.environments.include?('development'))
36
+ assert_equal(true, @ga.environments.include?('production'))
37
+ end
38
+
39
+ def test_default_formats
40
+ assert_equal(false, @ga.formats.include?(:xml))
41
+ assert_equal(true, @ga.formats.include?(:html))
42
+ end
43
+
44
+ def test_defer_load_defaults_to_true
45
+ assert_equal(true, @ga.defer_load)
46
+ end
47
+
48
+ def test_local_javascript_defaults_to_false
49
+ assert_equal(false, @ga.local_javascript)
50
+ end
51
+
52
+ # test self.enabled
53
+ def test_enabled_requires_tracker_id
54
+ Rubaidh::GoogleAnalytics.stubs(:tracker_id).returns(nil)
55
+ assert_raise(Rubaidh::GoogleAnalyticsConfigurationError) { Rubaidh::GoogleAnalytics.enabled?(:html) }
56
+ end
57
+
58
+ def test_enabled_requires_analytics_url
59
+ Rubaidh::GoogleAnalytics.stubs(:analytics_url).returns(nil)
60
+ assert_raise(Rubaidh::GoogleAnalyticsConfigurationError) { Rubaidh::GoogleAnalytics.enabled?(:html) }
61
+ end
62
+
63
+ def test_enabled_returns_false_if_current_environment_not_enabled
64
+ Rubaidh::GoogleAnalytics.stubs(:environments).returns(['production'])
65
+ assert_equal(false, Rubaidh::GoogleAnalytics.enabled?(:html))
66
+ end
67
+
68
+ def test_enabled_with_default_format
69
+ Rubaidh::GoogleAnalytics.stubs(:environments).returns(['test'])
70
+ assert_equal(true, Rubaidh::GoogleAnalytics.enabled?(:html))
71
+ end
72
+
73
+ def test_enabled_with_not_included_format
74
+ Rubaidh::GoogleAnalytics.stubs(:environments).returns(['test'])
75
+ assert_equal(false, Rubaidh::GoogleAnalytics.enabled?(:xml))
76
+ end
77
+
78
+ def test_enabled_with_added_format
79
+ Rubaidh::GoogleAnalytics.stubs(:environments).returns(['test'])
80
+ Rubaidh::GoogleAnalytics.stubs(:formats).returns([:xml])
81
+ assert_equal(true, Rubaidh::GoogleAnalytics.enabled?(:xml))
82
+ end
83
+
84
+ # test request_tracker_id
85
+ def test_request_tracker_id_without_override
86
+ Rubaidh::GoogleAnalytics.stubs(:tracker_id).returns("1234")
87
+ assert_equal("1234", Rubaidh::GoogleAnalytics.request_tracker_id)
88
+ end
89
+
90
+ def test_request_tracker_id_with_override
91
+ Rubaidh::GoogleAnalytics.stubs(:tracker_id).returns("1234")
92
+ Rubaidh::GoogleAnalytics.override_tracker_id = "4567"
93
+ assert_equal("4567", Rubaidh::GoogleAnalytics.request_tracker_id)
94
+ end
95
+
96
+ def test_request_tracker_id_resets_override
97
+ Rubaidh::GoogleAnalytics.override_tracker_id = "4567"
98
+ Rubaidh::GoogleAnalytics.stubs(:tracker_id).returns("1234")
99
+ foo = Rubaidh::GoogleAnalytics.request_tracker_id
100
+ assert_nil(Rubaidh::GoogleAnalytics.override_tracker_id)
101
+ end
102
+
103
+ # test request_tracked_path
104
+ def test_request_tracked_path_without_override
105
+ assert_equal('', Rubaidh::GoogleAnalytics.request_tracked_path)
106
+ end
107
+
108
+ def test_request_tracked_path_with_override
109
+ Rubaidh::GoogleAnalytics.override_trackpageview = "/my/path"
110
+ assert_equal("'/my/path'", Rubaidh::GoogleAnalytics.request_tracked_path)
111
+ end
112
+
113
+ def test_request_tracked_path_resets_override
114
+ Rubaidh::GoogleAnalytics.override_trackpageview = "/my/path"
115
+ foo = Rubaidh::GoogleAnalytics.request_tracked_path
116
+ assert_nil(Rubaidh::GoogleAnalytics.override_trackpageview)
117
+ end
118
+
119
+ end
@@ -0,0 +1,10 @@
1
+ ENV['RAILS_ENV'] = 'test'
2
+
3
+ require 'rubygems'
4
+ require 'test/unit'
5
+ require 'action_controller'
6
+ require 'active_record'
7
+
8
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/rubaidh/google_analytics.rb')
9
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/rubaidh/view_helpers.rb')
10
+
@@ -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,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubaidh-google_analytics
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.20081111
5
+ platform: ruby
6
+ authors:
7
+ - Graeme Mathieson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-11-11 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: actionpack
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ description: "By default this gem will output google analytics code forevery page automatically, if it's configured correctly.This is done by adding: Rubaidh::GoogleAnalytics.tracker_id = 'UA-12345-67'"
25
+ email: mathie@rubaidh.com
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files: []
31
+
32
+ files:
33
+ - README.rdoc
34
+ - Rakefile
35
+ - rails/init.rb
36
+ - test/google_analytics_test.rb
37
+ - test/test_helper.rb
38
+ - test/view_helpers_test.rb
39
+ - lib/rubaidh/google_analytics.rb
40
+ - lib/rubaidh/view_helpers.rb
41
+ - task/google_analytics.rake
42
+ has_rdoc: true
43
+ homepage: http://github.com/rubaidh/google_analytics/tree/master
44
+ post_install_message:
45
+ rdoc_options: []
46
+
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: "0"
60
+ version:
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.2.0
65
+ signing_key:
66
+ specification_version: 2
67
+ summary: "[Rails] This is a quick 'n' dirty module to easily enableGoogle Analytics support in your application."
68
+ test_files: []
69
+