Current section
Files
Jump to
Current section
Files
lib/strava/util.ex
defmodule Strava.Util do
@moduledoc """
Generic utility functions
"""
@doc """
Parses a `String` date into `NaiveDateTime` struct.
## Examples
iex> Strava.Util.parse_date("2012-05-16T21:37:06Z")
~N[2012-05-16 21:37:06]
"""
@spec parse_date(String.t) :: NaiveDateTime.t | String.t
def parse_date(date)
def parse_date(nil), do: nil
def parse_date(date) do
case NaiveDateTime.from_iso8601(date) do
{:ok, date} -> date
{:error, _} -> date
end
end
@doc """
Parses an unix timestamp into `NaiveDateTime` struct.
## Examples
iex> Strava.Util.parse_timestamp(1414868960)
~N[2014-11-01 19:09:20]
"""
@spec parse_timestamp(number) :: NaiveDateTime.t
def parse_timestamp(timestamp)
def parse_timestamp(nil), do: nil
def parse_timestamp(timestamp) do
{:ok, date_time} = DateTime.from_unix(timestamp)
DateTime.to_naive(date_time)
end
@spec struct_from_map(map, term) :: struct
def struct_from_map(map, destination) do
map = for {key, val} <- map, into: %{} do
cond do
is_atom(key) -> {key, val}
true -> {String.to_atom(key), val}
end
end
struct(destination, map)
end
@spec query_string(Strava.Pagination.t, map) :: binary
def query_string(pagination, filters \\ %{}) do
pagination
|> Map.from_struct
|> Enum.filter(fn {_, v} -> v != nil end)
|> Enum.into(filters)
|> URI.encode_query
end
end