Module: TrackRelay::ControllerTracking
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/track_relay/controller_tracking.rb
Overview
Controller-side tracking helper.
Host applications include this concern in ApplicationController (or
any controller) to get:
- A `before_action` that populates {Current.controller},
{Current.request}, and {Current.client_id} (the latter derived
from the `_ga` cookie if present) before any action runs. This
means {TrackRelay.track} called inside an action automatically
captures the originating controller / request in
`payload.context`.
- An instance method `track(name, **params)` that delegates to
{TrackRelay.track}. The delegate is sugar — host code can also
call `TrackRelay.track(...)` directly.
The concern is NOT auto-included. Host apps include it explicitly, which keeps the gem opt-in and avoids surprising behavior in controllers that don't want tracking. The Phase 4 install generator will wire the include into ApplicationController.
client_id resolver chain
The before_action runs the ordered chain at
TrackRelay::Configuration#client_id_resolvers (default
[ClientId::Ga, ClientId::AhoyVisitor, ClientId::Session]). The
FIRST resolver to return a non-nil value wins; later resolvers are
not invoked. Each resolver call is wrapped in rescue StandardError
so a single misbehaving resolver cannot block client_id resolution
— the chain skips it and continues.
The default first resolver (TrackRelay::ClientId::Ga) reproduces Phase 1's
_ga-cookie parser bit-for-bit, so existing behavior is preserved.
Hosts can prepend custom resolvers (e.g. a request-header reader
for native-app traffic) via TrackRelay.config.client_id_resolvers.unshift(...).
Instance Method Summary collapse
-
#track(name, **params) ⇒ void
Delegate to track.
Instance Method Details
#track(name, **params) ⇒ void
This method returns an undefined value.
Delegate to TrackRelay.track. Sugar for in-controller call sites
so the host doesn't have to spell TrackRelay.track explicitly.
55 56 57 |
# File 'lib/track_relay/controller_tracking.rb', line 55 def track(name, **params) TrackRelay.track(name, **params) end |