Class: Skadi::Visit

Inherits:
ApplicationRecord show all
Defined in:
app/models/skadi/visit.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build_from(tracking_token, user_id = nil, request = nil, cookies_enabled: nil) ⇒ Skadi::Visit

Parameters:

  • tracking_token (String, nil)
  • user (ActiveModel::Model, nil)
  • request (ActionDispatch::Request) (defaults to: nil)

Returns:



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'app/models/skadi/visit.rb', line 35

def self.build_from(tracking_token, user_id = nil, request = nil, cookies_enabled: nil)
  if cookies_enabled.nil?
    cookies_enabled = request&.cookie_jar&.key?("skadi_id") || false
  end

  new(
    visit_token: SecureRandom.uuid_v7,
    tracking_token: tracking_token,
    user_id: user_id,

    referrer: request ? Skadi::Url.redact_and_normalise_url(request.referrer) : nil,
    landing_page: request ? Skadi::Url.view_path_from_request(request) : nil,

    utm_source: request ? request.query_parameters["utm_source"] : nil,
    utm_medium: request ? request.query_parameters["utm_medium"] : nil,
    utm_term: request ? request.query_parameters["utm_term"] : nil,
    utm_content: request ? request.query_parameters["utm_content"] : nil,
    utm_campaign: request ? request.query_parameters["utm_campaign"] : nil,

    verified: false,
    cookies_enabled: cookies_enabled,
  )
end

.find_active_visit_for(tracking_token, user) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/models/skadi/visit.rb', line 8

def self.find_active_visit_for(tracking_token, user)
  return nil if tracking_token.nil? && user.nil?

  visit_query = nil
  if tracking_token
    visit_query = where(tracking_token: tracking_token)
      .and(where("created_at > ?", Skadi.configuration.visit_duration.ago))
  end
  if user&.persisted?
    user_visit_query = where(user_id: user.id)
      .and(where("created_at > ?", Skadi.configuration.visit_duration.ago))

    visit_query = visit_query ? visit_query.or(user_visit_query) : user_visit_query
  end

  visit = visit_query&.order(created_at: :desc)&.limit(1)&.first

  # If the user has changed since the last visit, create a new visit
  return nil if visit&.user_id && user&.persisted? && visit.user_id != user.id

  visit
end

Instance Method Details

#tokenObject



6
# File 'app/models/skadi/visit.rb', line 6

def token = visit_token