class Rack::GaTrack

Public Class Methods

new(app, opts = {}) click to toggle source
# File lib/rack-ga-track.rb, line 4
def initialize(app, opts = {})
  @app = app
  @cookie_ttl = opts[:ttl] || 60*60*24*30
  @cookie_domain = opts[:domain] || nil
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack-ga-track.rb, line 10
def call(env)
  req = Rack::Request.new(env)

  params = set_params(req)
  if params
    create_env_vars(env, params)
  end

  response = @app.call(env)
  if params && req.params['utm_source']
    create_cookie(response[1], params)
  end
  response
end

Private Instance Methods

create_env_vars(env, params) click to toggle source
# File lib/rack-ga-track.rb, line 56
def create_env_vars(env, params)
  params.each do |key, value|
    env["ga_track.#{key.to_s}"] = value
  end
end
params_hash(req) click to toggle source
# File lib/rack-ga-track.rb, line 36
def params_hash(req)
  {
    source: req.params['utm_source'],
    medium: req.params['utm_medium'],
    term: req.params['utm_term'],
    content: req.params['utm_content'],
    campaign: req.params['utm_campaign'],
    referer: req.referer,
    landing_page: req.path,
    time: Time.now.to_i
  }
end
set_params(req) click to toggle source
# File lib/rack-ga-track.rb, line 27
def set_params(req)
  if req.params['utm_source']
    return params_hash(req)
  elsif req.cookies['ga_track'] && !req.cookies['ga_track'].empty?
   return JSON.parse(req.cookies['ga_track'])
  end
  false
end