Class: Trackguard::TrackPageView

Inherits:
ApplicationService show all
Defined in:
app/services/trackguard/track_page_view.rb

Instance Method Summary collapse

Methods inherited from ApplicationService

call

Constructor Details

#initialize(path:, ip:, user_agent:, referer:, session_id: nil, trace_id: nil, source: nil, tracking_layer: nil, http_method: nil, visitor_scope: {}) ⇒ TrackPageView

Returns a new instance of TrackPageView.



3
4
5
6
7
8
9
10
11
12
13
14
15
# File 'app/services/trackguard/track_page_view.rb', line 3

def initialize(path:, ip:, user_agent:, referer:, session_id: nil, trace_id: nil,
               source: nil, tracking_layer: nil, http_method: nil, visitor_scope: {})
  @path           = path
  @ip             = ip
  @user_agent     = user_agent
  @referer        = referer
  @session_id     = session_id
  @trace_id       = trace_id
  @source         = source
  @tracking_layer = tracking_layer
  @http_method    = http_method
  @visitor_scope  = visitor_scope
end

Instance Method Details

#callObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/services/trackguard/track_page_view.rb', line 17

def call
  hashed_session_id = Digest::SHA256.hexdigest(@session_id) if @session_id.present?

  visitor = Visitor.find_or_create_by!(ip: @ip, **@visitor_scope) do |v|
    v.user_agent    = @user_agent
    v.first_seen_at = Time.current
    v.last_seen_at  = Time.current
  end
  visitor.update!(last_seen_at: Time.current, user_agent: @user_agent)

  PageView.create!(
    path: @path, user_agent: @user_agent, session_id: hashed_session_id,
    trace_id: @trace_id, source: @source, referer: @referer,
    http_method: @http_method, tracking_layer: @tracking_layer,
    visitor: visitor, **@visitor_scope
  )
end