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 |