Skip to content

Commit 76cacc6

Browse files
begedinjoshsmith
authored andcommitted
Added tracking of "Connected to GitHub" event to segment
1 parent bf84d4e commit 76cacc6

File tree

5 files changed

+35
-7
lines changed

5 files changed

+35
-7
lines changed

lib/code_corps/analytics/segment_tracker.ex

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,14 @@ defmodule CodeCorps.Analytics.SegmentTracker do
2121
@doc """
2222
Calls `track` in the configured API module.
2323
"""
24-
@spec track(String.t, atom, struct) :: any
25-
def track(user_id, action, data) do
24+
@spec track(integer, atom | String.t, struct) :: any
25+
def track(user_id, action, data) when is_atom(action) do
2626
event = SegmentEventNameBuilder.build(action, data)
2727
traits = SegmentTraitsBuilder.build(data)
2828
@api.track(user_id, event, traits)
2929
end
30+
def track(user_id, event, data) when is_binary(event) do
31+
traits = SegmentTraitsBuilder.build(data)
32+
@api.track(user_id, event, traits)
33+
end
3034
end

lib/code_corps/analytics/segment_traits_builder.ex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,15 @@ defmodule CodeCorps.Analytics.SegmentTraitsBuilder do
1313
created_at: user.inserted_at,
1414
email: user.email,
1515
first_name: user.first_name,
16+
github_id: user.github_id,
17+
github_username: user.github_username,
1618
last_name: user.last_name,
19+
sign_up_context: user.sign_up_context,
1720
state: user.state,
1821
twitter: user.twitter,
19-
username: user.username
22+
type: user.type,
23+
username: user.username,
24+
website: user.website
2025
}
2126
end
2227

lib/code_corps/model/user.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ defmodule CodeCorps.User do
3232
field :password, :string, virtual: true
3333
field :password_confirmation, :string, virtual: true
3434
field :sign_up_context, :string, default: "default"
35+
field :state, :string, default: "signed_up"
36+
field :state_transition, :string, virtual: true
3537
field :twitter, :string
3638
field :type, :string, default: "user"
3739
field :username, :string
3840
field :website, :string
39-
field :state, :string, default: "signed_up"
40-
field :state_transition, :string, virtual: true
4141

4242
has_one :slugged_route, SluggedRoute
4343

lib/code_corps_web/controllers/user_controller.ex

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
defmodule CodeCorpsWeb.UserController do
22
use CodeCorpsWeb, :controller
33

4-
alias CodeCorps.{Helpers.Query, Services.UserService, User}
5-
alias CodeCorps.GitHub
4+
alias CodeCorps.{
5+
Analytics,
6+
GitHub,
7+
Helpers.Query,
8+
Services.UserService,
9+
User
10+
}
611

712
action_fallback CodeCorpsWeb.FallbackController
813
plug CodeCorpsWeb.Plug.DataToAttributes
@@ -48,6 +53,7 @@ defmodule CodeCorpsWeb.UserController do
4853
current_user = Guardian.Plug.current_resource(conn)
4954
with {:ok, user} <- GitHub.User.connect(current_user, code, state)
5055
do
56+
Analytics.SegmentTracker.track(user.id, "Connected to GitHub", user)
5157
conn |> render("show.json-api", data: user)
5258
end
5359
end

test/lib/code_corps_web/controllers/user_controller_test.exs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ defmodule CodeCorpsWeb.UserControllerTest do
247247

248248
describe "github_oauth" do
249249
@attrs %{"code" => "foo", "state" => "bar"}
250+
250251
@tag :authenticated
251252
test "return the user when current user connects successfully", %{conn: conn, current_user: current_user} do
252253
path = user_path(conn, :github_oauth)
@@ -257,6 +258,18 @@ defmodule CodeCorpsWeb.UserControllerTest do
257258
assert json["data"]["attributes"]["github-id"]
258259
end
259260

261+
@tag :authenticated
262+
test "tracks event on segment when current user connects successfully", %{conn: conn, current_user: %{id: id}} do
263+
path = user_path(conn, :github_oauth)
264+
265+
assert conn |> post(path, @attrs) |> json_response(200)
266+
expected_data =
267+
User
268+
|> Repo.get(id)
269+
|> CodeCorps.Analytics.SegmentTraitsBuilder.build
270+
assert_received {:track, ^id, "Connected to GitHub", ^expected_data}
271+
end
272+
260273
test "requires authentication", %{conn: conn} do
261274
path = user_path(conn, :github_oauth)
262275
assert conn |> post(path, @attrs) |> json_response(401)

0 commit comments

Comments
 (0)