From 13a18dc62068fdc9ed3e6de7b7bb60a980868e16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gebhard=20W=C3=B6stemeyer?= Date: Fri, 29 Nov 2013 17:06:58 +0100 Subject: [PATCH] restructure ReTrack::Tracker, do not validate rt in Trackable --- lib/re_track/trackable.rb | 3 ++- lib/re_track/tracker.rb | 39 +++++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/lib/re_track/trackable.rb b/lib/re_track/trackable.rb index 21b22ea..2e93942 100644 --- a/lib/re_track/trackable.rb +++ b/lib/re_track/trackable.rb @@ -7,7 +7,8 @@ module Trackable included do has_one :referer_tracking, class_name: 'ReTrack::RefererTracking', - as: :trackable + as: :trackable, + validate: false end end end diff --git a/lib/re_track/tracker.rb b/lib/re_track/tracker.rb index 0b9b0d9..7400947 100644 --- a/lib/re_track/tracker.rb +++ b/lib/re_track/tracker.rb @@ -6,25 +6,28 @@ module Tracker before_filter :rt_track_referer end - def rt_track_referer - if session[:retrack].nil? && !request_from_a_known_bot? - session[:retrack] = Hash[ - :referer_url, request.headers['HTTP_REFERER'].presence || 'none', - :first_url, request.url, - :user_agent, request.env['HTTP_USER_AGENT'], - :first_visited_at, Time.now, - :ip, request.remote_ip, - :accept_language, request.env['HTTP_ACCEPT_LANGUAGE'], - :forwarded_ip, request.env['HTTP_X_FORWARDED_FOR'] || request.env['HTTP_CLIENT_IP'] - ] + private + + TRACK = { + referer_url: -> (request) { request.headers['HTTP_REFERER'].presence || 'none' }, + first_url: -> (request) { request.url }, + user_agent: -> (request) { request.env['HTTP_USER_AGENT'] }, + first_visited_at: -> (request) { Time.now }, + ip: -> (request) { request.remote_ip }, + accept_language: -> (request) { request.env['HTTP_ACCEPT_LANGUAGE'] }, + forwarded_ip: -> (request) { request.env['HTTP_X_FORWARDED_FOR'] || request.env['HTTP_CLIENT_IP'] } + } + + def rt_track_referer + session[:retrack].nil? && !request_from_a_known_bot? && + session[:retrack] = Hash[TRACK.map { |k, v| [k, v.call(request)] }] end - end - def request_from_a_known_bot? - bot_user_agents = ['GoogleBot', 'Mediapartners-Google', 'msnbot', - 'TwengaBot', 'DigExt; DTS Agent', 'YandexImages'] - bot_user_agents_re = /\b(#{bot_user_agents * '|'})\b/i - request.user_agent =~ bot_user_agents_re - end + def request_from_a_known_bot? + bot_user_agents = ['GoogleBot', 'Mediapartners-Google', 'msnbot', + 'TwengaBot', 'DigExt; DTS Agent', 'YandexImages'] + bot_user_agents_re = /\b(#{bot_user_agents * '|'})\b/i + request.user_agent =~ bot_user_agents_re + end end end