module Rubaidh # :nodoc: module GoogleAnalyticsMixin def google_analytics_code GoogleAnalytics.google_analytics_code(request.ssl?) if GoogleAnalytics.enabled?(request.format) end # An after_filter to automatically add the analytics code. # Add the code at the top of the page to support calls to _trackPageView # (see http://www.google.com/support/googleanalytics/bin/answer.py?answer=55527&topic=11006) # If you're not going to use the link_to_tracked view helpers, you can set Rubaidh::GoogleAnalytics.defer_load = true # to load the codel at the bottom of the page def add_google_analytics_code if GoogleAnalytics.defer_load response.body.sub! '', "#{google_analytics_code}" if response.body.respond_to?(:sub!) else response.body.sub! '', "#{google_analytics_code}" if response.body.respond_to?(:sub!) end end end class GoogleAnalyticsConfigurationError < StandardError; end class GoogleAnalytics # Specify the Google Analytics ID for this web site. This can be found # as the value of +_uacct+ in the Javascript excerpt @@tracker_id = nil cattr_accessor :tracker_id # 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. @@domain_name = nil cattr_accessor :domain_name # Specify whether the legacy Google Analytics code should be used. @@legacy_mode = false cattr_accessor :legacy_mode # 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_url = 'http://www.google-analytics.com/urchin.js' cattr_accessor :analytics_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. @@analytics_ssl_url = 'https://ssl.google-analytics.com/urchin.js' cattr_accessor :analytics_ssl_url # The environments in which to enable the Google Analytics code. Defaults # to 'production' only. @@environments = ['production'] cattr_accessor :environments # The formats for which to add. Defaults # to :html only. @@formats = [:html] cattr_accessor :formats # Set this to true if you want to load the Analytics javascript at the bottom of # each page rather than at the top. This may result in faster page render times, # but may break link_to_tracked functionality. @@defer_load = true cattr_accessor :defer_load # 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. @@local_javascript = false cattr_accessor :local_javascript # Return true if the Google Analytics system is enabled and configured # correctly for the specified format def self.enabled?(format) raise Rubaidh::GoogleAnalyticsConfigurationError if tracker_id.blank? || analytics_url.blank? environments.include?(RAILS_ENV) && formats.include?(format.to_sym) end 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}\");" code = if local_javascript <<-HTML HTML else <<-HTML HTML end code << <<-HTML HTML end # Run the legacy version of the Google Analytics code. def self.legacy_google_analytics_code(ssl = false) extra_code = domain_name.blank? ? nil : "_udn = \"#{domain_name}\";" url = legacy_analytics_js_url(ssl) code = <<-HTML HTML end # Generate the correct URL for the legacy Analytics JS file 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 end class LocalAssetTagHelper # For helping with local javascripts include ActionView::Helpers::AssetTagHelper end end