class GabbaGMP::GabbaGMP
Constants
- BEACON_PATH
- DIMENSION_MAX
- ESCAPES
- GOOGLE_HOST
- USER_AGENT
Attributes
logger[RW]
Public Class Methods
new(ga_tracking_id, request, cookies, options = {})
click to toggle source
Public: Initialize Gabba Google Analytics Tracking Object.
ga_tracking_id - A String containing your Google Analytics account id. request - The request this tracker relates to. cookies - The cookies object for this request. Will be updated with the client_id cookie options - Allows for:
-client_id_cookie_expiry = Set the expiry of the visitor cookie manually -client_id_cookie_sym = The symbol to store the visitor id cookie under
Example:
g = GabbaGMP::GabbaGMP.new("UT-1234", "mydomain.com")
# File lib/gabba-gmp/gabba_gmp.rb, line 50 def initialize(ga_tracking_id, request, cookies, options = {}) client_id_cookie = options[:client_id_cookie_sym] client_id_cookie = :utm_visitor_uuid if client_id_cookie.nil? or !client_id_cookie.kind_of? Symbol if cookies[client_id_cookie].nil? cookie_expiry = options[:client_id_cookie_expiry] ? options[:client_id_cookie_expiry] : Time.now + (60*60*24*365) cookies[client_id_cookie] = { value: "#{SecureRandom.uuid}", expires: cookie_expiry} end @sessionopts = {protocol_version: 1, tracking_id: ga_tracking_id, document_host: request.host, client_id: cookies[client_id_cookie], user_ip_address: request.remote_ip, user_agent: request.user_agent, user_language: preferred_language(request.accept_language)} @sessionopts[:document_referrer] = request.referrer if request.referrer and !request.referrer.start_with?("#{request.protocol}#{request.host_with_port}") end
Public Instance Methods
add_options(options)
click to toggle source
Public: Set the session’s parameters. This will be added to all actions that are sent to analytics.
See:: ParameterMap:GA_PARAMS
# File lib/gabba-gmp/gabba_gmp.rb, line 81 def add_options(options) options.keys.each do |key| raise GoogleAnalyticsParameterNotFoundError, "Parameter '#{key}'" unless GA_PARAMS[key] end @sessionopts.merge!(options) self end
campaign=(campaign)
click to toggle source
Public: Set the campaign details from a campaign object. You can also use your own Campaign
object so long
as they support the 5 methods (name, source, medium, keyword, content)
# File lib/gabba-gmp/gabba_gmp.rb, line 92 def campaign=(campaign) campaign ||= Campaign.new {}.tap do |campaign_params| if campaign.present? @sessionopts[:campaign_name] = parse_string(campaign.name) @sessionopts[:campaign_name] ||= "(direct)" @sessionopts[:campaign_source] = parse_string(campaign.source) @sessionopts[:campaign_source] ||= "(direct)" @sessionopts[:campaign_medium] = parse_string(campaign.medium) @sessionopts[:campaign_medium] ||= "(none)" @sessionopts.delete(:campaign_keyword) @sessionopts[:campaign_keyword] = campaign.keyword unless campaign.keyword.to_s.empty? @sessionopts.delete(:campaign_content) @sessionopts[:campaign_content] = campaign.content unless campaign.content.to_s.empty? end end end
preferred_language(language)
click to toggle source
# File lib/gabba-gmp/gabba_gmp.rb, line 71 def preferred_language(language) return "" unless language language_arr = language.split(",").map {|lang_pref| lang_pref.split(";")} language_arr[0][0].downcase.strip #just get the first language. Will probably be correct. end
Private Instance Methods
escape(t)
click to toggle source
# File lib/gabba-gmp/gabba_gmp.rb, line 153 def escape(t) return t if !t || (/\w/ !~ t.to_s) t.to_s.gsub(/[\*'!\)]/) do |m| "'#{ESCAPES.index(m)}" end end
hey(params)
click to toggle source
makes the tracking call to Google Analytics
# File lib/gabba-gmp/gabba_gmp.rb, line 133 def hey(params) validate_session_parameters(params) params_formatted = params.each_pair {|k,v| params[k] = "#{v}"}.keep_if {|k,v| !v.nil? and !v.empty?} params_formatted = params_formatted.map {|k,v| "#{GA_PARAMS[k]}=#{URI.escape(v, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))}" } query = params_formatted.join('&') @http ||= Net::HTTP::Persistent.new 'GabbaGMP' @logger.info "GABBA_GMP: request params: #{query}" if @logger request = Net::HTTP::Get.new("#{BEACON_PATH}?#{query}") request["User-Agent"] = URI.escape(params[:user_agent]) if params[:user_agent] request["Accept"] = "*/*" uri = URI "http://#{GOOGLE_HOST}/#{BEACON_PATH}" response = @http.request(uri, request) raise GoogleAnalyticsNetworkError unless response.code == "200" response end
parse_string(value)
click to toggle source
# File lib/gabba-gmp/gabba_gmp.rb, line 116 def parse_string(value) (value.to_s.empty? ? nil : value) end
validate_session_parameters(params)
click to toggle source
Sanity check that we have needed params to even call GA
# File lib/gabba-gmp/gabba_gmp.rb, line 121 def validate_session_parameters(params) raise GoogleAnalyticsRequiredParameterMissingError, "Protocol version is required" unless params[:protocol_version] raise GoogleAnalyticsRequiredParameterMissingError, "Tracking id is required" unless params[:tracking_id] raise GoogleAnalyticsRequiredParameterMissingError, "Client id is required" unless params[:client_id] raise GoogleAnalyticsRequiredParameterMissingError, "Hit type is required" unless params[:hit_type] params.keys.each do |param| raise GoogleAnalyticsInvalidParameterError, "The parameter '#{param}' is not currently recognised." unless GA_PARAMS[param] end end