Class: Rubaidh::GoogleAnalytics

Inherits:
Object
  • Object
show all
Defined in:
lib/rubaidh/google_analytics.rb

Overview

The core functionality to connect a Rails application to a Google Analytics installation.

The GoogleAnalytics class has a variety of class attributes for configuration:

  • tracker_id (required)

Specify the Google Analytics ID for this web site. This can be found as the value of _getTracker if you are using the new (ga.js) tracking code, or the value of _uacct if you are using the old (urchin.js) tracking code.

  • domain_name

Specify a different domain name from the default. You’ll want to use this if you have several subdomains that you want to combine into one report. See the Google Analytics documentation for more information.

  • legacy_mode

Specify whether the legacy Google Analytics code should be used. By default, the new Google Analytics code is used.

  • analytics_url

I can’t see why you’d want to do this, but you can always change the analytics URL. This is only applicable in legacy mode.

  • analytics_ssl_url

I can’t see why you’d want to do this, but you can always change the analytics URL (ssl version). This is only applicable in legacy mode.

  • environments

The environments in which to enable the Google Analytics code. Defaults to ‘production’ only. Supply an array of environment names to change this.

  • formats

The formats for which to add. Defaults to :html only. Supply an array of formats to change this.

  • defer_load

Set this to true (the default) if you want to load the Analytics javascript at the bottom of page. Set this to false if you want to load the Analytics javascript at the top of the page. The page will render faster if you set this to true, but that will break the linking functions in Rubaidh::GoogleAnalyticsViewHelper.

  • local_javascript

Set this to true to use a local copy of the ga.js (or urchin.js) file. This gives you the added benefit of serving the JS directly from your server, which in case of a big geographical difference between your server and Google’s can speed things up for your visitors. Use the ‘google_analytics:update’ rake task to update the local JS copies.

  • override_domain_name

Set this to override the initialized domain name for a single render. Useful when you’re serving to multiple hosts from a single codebase. Typically you’d set up a before filter in the appropriate controller:

 before_filter :override_domain_name
 def override_domain_name
   Rubaidh::GoogleAnalytics.override_domain_name  = 'foo.com'
end
  • override_tracker_id

Set this to override the initialized tracker ID for a single render. Useful when you’re serving to multiple hosts from a single codebase. Typically you’d set up a before filter in the appropriate controller:

 before_filter :override_tracker_id
 def override_tracker_id
   Rubaidh::GoogleAnalytics.override_tracker_id  = 'UA-123456-7'
end
  • override_trackpageview

Set this to override the automatically generated path to the page in the Google Analytics reports for a single render. Typically you’d set this up on a controller-by-controller basis:

def show
  Rubaidh::GoogleAnalytics.override_trackpageview = "path_to_report"
  ...

Constant Summary collapse

@@tracker_id =
nil
@@domain_name =
nil
@@legacy_mode =
false
@@analytics_url =
'http://www.google-analytics.com/urchin.js'
@@analytics_ssl_url =
'https://ssl.google-analytics.com/urchin.js'
@@environments =
['production']
@@formats =
[:html]
@@defer_load =
true
@@local_javascript =
false

Class Method Summary collapse

Class Method Details

.enabled?(format) ⇒ Boolean

Return true if the Google Analytics system is enabled and configured correctly for the specified format

Returns:

  • (Boolean)

Raises:



144
145
146
147
# File 'lib/rubaidh/google_analytics.rb', line 144

def self.enabled?(format)
  raise Rubaidh::GoogleAnalyticsConfigurationError if tracker_id.blank? || analytics_url.blank?
  environments.include?(RAILS_ENV) && formats.include?(format.to_sym)
end

.google_analytics_code(ssl = false) ⇒ Object

Construct the javascript code to be inserted on the calling page. The ssl parameter can be used to force the SSL version of the code in legacy mode only.



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'lib/rubaidh/google_analytics.rb', line 151

def self.google_analytics_code(ssl = false)
  return legacy_google_analytics_code(ssl) if legacy_mode

  extra_code = domain_name.blank? ? nil : "pageTracker._setDomainName(\"#{domain_name}\");"
  if !override_domain_name.blank?
    extra_code = "pageTracker._setDomainName(\"#{override_domain_name}\");"
    self.override_domain_name = nil
  end
  
  code = if local_javascript
    <<-HTML
    <script src="#{LocalAssetTagHelper.new.javascript_path( 'ga.js' )}" type="text/javascript">
    </script>
    HTML
  else
    <<-HTML
  <script type="text/javascript">
  var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
  document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
  </script>
    HTML
  end
  
  code << <<-HTML
  <script type="text/javascript">
  <!--//--><![CDATA[//><!--
  var pageTracker = _gat._getTracker('#{request_tracker_id}');
  #{extra_code}
  pageTracker._initData();
  pageTracker._trackPageview(#{request_tracked_path});
  //--><!]]>
  </script>
  HTML
end

.legacy_analytics_js_url(ssl = false) ⇒ Object

Generate the correct URL for the legacy Analytics JS file



209
210
211
212
213
214
215
# File 'lib/rubaidh/google_analytics.rb', line 209

def self.legacy_analytics_js_url(ssl = false)
  if local_javascript
    LocalAssetTagHelper.new.javascript_path( 'urchin.js' )
  else
    ssl ? analytics_ssl_url : analytics_url
  end
end

.legacy_google_analytics_code(ssl = false) ⇒ Object

Construct the legacy version of the Google Analytics code. The ssl parameter specifies whether or not to return the SSL version of the code.



188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'lib/rubaidh/google_analytics.rb', line 188

def self.legacy_google_analytics_code(ssl = false)
  extra_code = domain_name.blank? ? nil : "_udn = \"#{domain_name}\";"
  if !override_domain_name.blank?
    extra_code = "_udn = \"#{override_domain_name}\";"
    self.override_domain_name = nil
  end

  url = legacy_analytics_js_url(ssl)

  code = <<-HTML
  <script src="#{url}" type="text/javascript">
  </script>
  <script type="text/javascript">
  _uacct = "#{request_tracker_id}";
  #{extra_code}
  urchinTracker(#{request_tracked_path});
  </script>
  HTML
end

.request_tracked_pathObject

Determine the path to report for this request



225
226
227
228
229
# File 'lib/rubaidh/google_analytics.rb', line 225

def self.request_tracked_path
  use_tracked_path = override_trackpageview.blank? ? '' : "'#{override_trackpageview}'"
  self.override_trackpageview = nil
  use_tracked_path
end

.request_tracker_idObject

Determine the tracker ID for this request



218
219
220
221
222
# File 'lib/rubaidh/google_analytics.rb', line 218

def self.request_tracker_id
  use_tracker_id = override_tracker_id.blank? ? tracker_id : override_tracker_id
  self.override_tracker_id = nil
  use_tracker_id
end