code-corps/code-corps-api

View on GitHub
lib/code_corps/analytics/segment_tracker.ex

Summary

Maintainability
Test Coverage
defmodule CodeCorps.Analytics.SegmentTracker do
  @moduledoc """
  Performs tracking of segment events
  """

  alias CodeCorps.Analytics.{
    SegmentEventNameBuilder,
    SegmentTraitsBuilder
  }

  @api Application.get_env(:code_corps, :analytics)

  @doc """
  Calls `identify` in the configured API module.
  """
  @spec identify(CodeCorps.User.t) :: any
  def identify(%CodeCorps.User{} = user) do
    @api.identify(user.id, SegmentTraitsBuilder.build(user))
  end

  @doc """
  Calls `track` in the configured API module.
  """
  @spec track(String.t, atom | String.t, struct) :: any
  def track(user_id, action, data) when is_atom(action) do
    event = SegmentEventNameBuilder.build(action, data)
    traits = SegmentTraitsBuilder.build(data)
    @api.track(user_id, event, traits)
  end
  def track(user_id, event, data) when is_binary(event) do
    traits = SegmentTraitsBuilder.build(data)
    @api.track(user_id, event, traits)
  end
end