class Rack::Utm

Constants

DEFAULT_REQUIRED_PARAMETERS

Attributes

allow_overwrite[R]
app[R]
extras[R]
optional_parameters[R]
req[R]
required_parameters[R]

Public Class Methods

new(app, **options) click to toggle source
# File lib/rack_utm.rb, line 8
def initialize(app, **options)
  @app = app
  @required_parameters =
    options.fetch(:required_parameters, DEFAULT_REQUIRED_PARAMETERS).map(&:to_s)
  @cookie_time_to_live = options.fetch(:cookie_time_to_live, default_cookie_time_to_live)
  @allow_overwrite = options.fetch(:allow_overwrite, true)
  @cookie_path = options[:cookie_path]
  @cookie_domain = options[:cookie_domain]
  @optional_parameters = options.fetch(:optional_parameters, []).map(&:to_s)
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack_utm.rb, line 19
def call(env)
  @req = Rack::Request.new(env)

  set_env(env)

  status, headers, body = app.call(env)
  if set_cookies?
    set_cookies(headers)
  else
    delete_cookies(headers)
  end

  [status, headers, body]
end

Private Instance Methods

all_parameter_names() click to toggle source
# File lib/rack_utm.rb, line 46
def all_parameter_names
  required_parameters.concat(optional_parameters)
end
cookies() click to toggle source
# File lib/rack_utm.rb, line 54
def cookies
  req.cookies
end
delete_cookies(headers) click to toggle source
# File lib/rack_utm.rb, line 111
def delete_cookies(headers)
  cookies.each_key do |key|
    cookie =
      {
        value: nil,
        expires: expires,
        domain: cookie_domain,
        path: cookie_path
      }

    Rack::Utils.delete_cookie_header!(headers, key, cookie)
  end
end
expires() click to toggle source
# File lib/rack_utm.rb, line 93
def expires
  Time.now + cookie_time_to_live
end
newer_parameters() click to toggle source
# File lib/rack_utm.rb, line 102
def newer_parameters
  params
    .slice(*required_parameters.dup.concat(optional_parameters))
    .merge(
      'utm_from' => req.env["HTTP_REFERER"],
      'utm_time' => Time.now.to_i,
    )
end
params() click to toggle source
# File lib/rack_utm.rb, line 50
def params
  req.params
end
required_param_values() click to toggle source
# File lib/rack_utm.rb, line 80
def required_param_values
  params.values_at(*required_parameters)
end
set_cookies(headers) click to toggle source
# File lib/rack_utm.rb, line 125
def set_cookies(headers)
  values.each do |key, value|
    cookie =
      {
        value: value,
        expires: expires,
        domain: cookie_domain,
        path: cookie_path
      }

    Rack::Utils.set_cookie_header!(headers, key, cookie)
  end
end
set_cookies?() click to toggle source
# File lib/rack_utm.rb, line 97
def set_cookies?
  return false unless values.values_at(*required_parameters).all?
  required_param_values != required_cookie_values
end
set_cookies_for_env?() click to toggle source
# File lib/rack_utm.rb, line 58
def set_cookies_for_env?
  !required_cookie_values.empty?
end
set_env(env) click to toggle source
# File lib/rack_utm.rb, line 76
def set_env(env)
  values.each { |key, value| env["#{key}"] = value }
end
set_params_for_env?() click to toggle source
# File lib/rack_utm.rb, line 62
def set_params_for_env?
  return false unless !required_param_values.compact.empty?

  true
end
values() click to toggle source
# File lib/rack_utm.rb, line 68
def values
  values = []
  values = cookies if set_cookies_for_env?
  values = newer_parameters if set_params_for_env? && allow_overwrite

  values
end