Module: UniversalTrackManagerConcern
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb
Instance Attribute Summary collapse
-
#visit_evicted ⇒ Object
Returns the value of attribute visit_evicted.
Instance Method Summary collapse
- #any_utm_params? ⇒ Boolean
- #evict_visit!(old_visit) ⇒ Object
- #find_or_create_browser_by_current ⇒ Object
- #find_or_create_campaign_by_current ⇒ Object
- #gen_campaign_key(params) ⇒ Object
- #ip_address ⇒ Object
- #new_visitor ⇒ Object
- #now ⇒ Object
- #permitted_utm_params ⇒ Object
- #track_visitor ⇒ Object
- #user_agent ⇒ Object
Instance Attribute Details
#visit_evicted ⇒ Object
Returns the value of attribute visit_evicted.
3 4 5 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 3 def visit_evicted @visit_evicted end |
Instance Method Details
#any_utm_params? ⇒ Boolean
93 94 95 96 97 98 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 93 def any_utm_params? return false if ! UniversalTrackManager.track_utms? UniversalTrackManager.campaign_column_symbols.any? do |key| params[key].present? end end |
#evict_visit!(old_visit) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 126 def evict_visit!(old_visit) @visit_evicted = true params = { first_pageload: now, last_pageload: now, original_visit_id: old_visit.original_visit_id.nil? ? old_visit.id : old_visit.original_visit_id, count: old_visit.original_visit_id.nil? ? old_visit.count + 1 : 1, ip_v4_address: ip_address, campaign: find_or_create_campaign_by_current } # fail silently if there is no user agent if request.user_agent params[:browser] = find_or_create_browser_by_current end visit = UniversalTrackManager::Visit.create!(params) session[:visit_id] = visit.id end |
#find_or_create_browser_by_current ⇒ Object
100 101 102 103 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 100 def find_or_create_browser_by_current return nil if ! UniversalTrackManager.track_user_agent? browser = UniversalTrackManager::Browser.find_or_create_by(name: user_agent) end |
#find_or_create_campaign_by_current ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 105 def find_or_create_campaign_by_current return nil if ! UniversalTrackManager.track_utms? params_without_glcid = permitted_utm_params.tap{|x| x.delete("gclid")} gen_sha1 = gen_campaign_key(params_without_glcid) gclid_present = UniversalTrackManager.track_gclid_present? && permitted_utm_params[:gclid].present? campaign = UniversalTrackManager::Campaign.find_by(sha1: gen_sha1, gclid_present: gclid_present) campaign ||= UniversalTrackManager::Campaign.create(*(params_without_glcid.merge({ sha1: gen_sha1, gclid_present: gclid_present }))) end |
#gen_campaign_key(params) ⇒ Object
122 123 124 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 122 def gen_campaign_key(params) Digest::SHA1.hexdigest(params.keys.map{|k| k.downcase()}.sort.map{|k| {"#{k}": params[k]}}.to_s) end |
#ip_address ⇒ Object
23 24 25 26 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 23 def ip_address return nil if ! UniversalTrackManager.track_ips? request.ip end |
#new_visitor ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 37 def new_visitor params = { first_pageload: now, last_pageload: now, ip_v4_address: ip_address, campaign: find_or_create_campaign_by_current } if request.referrer && !request.referrer.include?(request.host) params[:referer] = request.referer if UniversalTrackManager.track_http_referrer? end params[:browser] = find_or_create_browser_by_current if request.user_agent visit = UniversalTrackManager::Visit.create!(params) session[:visit_id] = visit.id end |
#now ⇒ Object
33 34 35 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 33 def now @now ||= Time.now end |
#permitted_utm_params ⇒ Object
18 19 20 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 18 def permitted_utm_params params.permit(*(UniversalTrackManager.campaign_column_symbols)) end |
#track_visitor ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 52 def track_visitor if !session['visit_id'] new_visitor else # existing visit begin existing_visit = UniversalTrackManager::Visit.find(session['visit_id']) if any_utm_params? && !existing_visit.matches_all_utms?(permitted_utm_params) evict_visit!(existing_visit) end if existing_visit.ip_v4_address != ip_address evict_visit!(existing_visit) end if existing_visit.browser && existing_visit.browser.name != user_agent evict_visit!(existing_visit) end if (UniversalTrackManager.track_http_referrer?) if existing_visit.referer == request.referer elsif request.referrer && !request.referrer.include?(request.host) evict_visit!(existing_visit) end end existing_visit.update_columns(:last_pageload => Time.now) if !@visit_evicted rescue ActiveRecord::RecordNotFound # this happens if the session table is cleared or if the record in the session # table points to a visit that has been cleared new_visitor end end end |
#user_agent ⇒ Object
28 29 30 31 |
# File 'lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb', line 28 def user_agent return nil if ! UniversalTrackManager.track_user_agent? request.user_agent && request.user_agent[0..254] end |