defmodule Census do
alias Census.{Client, Query}
@doc """
Create a new api client.
Usage:
iex> Census.client("YOUR_API_KEY")
%Census.Client{api_key: "YOUR_API_KEY", dataset: "SF1", vintage: "2010"}
Clients default to the 2010 SF1 dataset. To set an alternate dataset and vintage:
iex> Census.client("YOUR_API_KEY", dataset: "ACS5", vintage: "2005")
%Census.Client{api_key: "YOUR_API_KEY", dataset: "ACS5", program: "dec", vintage: "2005"}
"""
@spec client(String.t(), Keyword.t()) :: Client.t()
def client(api_key, options \\ []) do
struct!(Client, Keyword.put(options, :api_key, api_key))
end
@doc """
Make a census api request given a client and query parameters.
Params:
* `get`
* `foreach`
* `within` (optional)
Usage:
iex> client = Census.client("YOUR_API_KEY")
iex> {:ok, response} = Census.fetch(client, get: "NAME", foreach: "COUNTY:*", within: "STATE:*")
iex> response.results
[%{}]
"""
def fetch(client, params) do
query = struct!(Query, Keyword.put(params, :client, client))
Application.get_env(:census, :adapter).run(query)
end
end