Packages

Typeracer.com statistics api wrapper

Current section

Files

Jump to
typeracer lib typeracer.ex
Raw

lib/typeracer.ex

defmodule Typeracer do
@endpoint "https://typeracerdata.appspot.com/users"
def get_user(id, http_lib \\ HTTPoison) do
case id |> user_query_url |> http_lib.get do
{:ok, %{status_code: 404}} ->
{:error, :id_not_found}
{:ok, response = %{status_code: 200}} ->
decode(response)
error -> error
end
end
defp decode(response) do
case Poison.decode(response.body) do
{:ok, map} -> to_user(map)
error -> error
end
end
defp to_user(map = %{
"tstats" => %{
"bestGameWpm" => best_game_wpm,
"cg" => completed_games,
"gamesWon" => games_won,
"level" => level,
"recentAvgWpm" => recent_avg_wpm,
"recentScores" => recent_scores,
"wpm" => wpm
}
}) do
user = %Typeracer.User{
id: map["id"],
name: map["name"],
last_name: map["lastName"],
country: map["country"],
level: level,
best_game_wpm: best_game_wpm,
completed_games: completed_games,
games_won: games_won,
recent_avg_wpm: recent_avg_wpm,
recent_scores: recent_scores,
wpm: wpm
}
{:ok, user}
end
defp to_user(_) do
{:error, "Unrecognized response"}
end
defp user_query_url(id) do
@endpoint <> "?id=tr:" <> id
end
end