Packages

Fetch Gas Rates from gasprices.aaa.com.

Current section

Files

Jump to
gasrate lib gasrate.server
Raw

lib/gasrate.server

defmodule Gasrate.Server do
use GenServer
alias Gasrate as: G
@name __MODULE__
@registry_name :gas_rate_registry
defstruct rates: nil,
state: nil
def start_link(id) do
name = via_tuple(id)
GenServer.start_link(__MODULE__, [id], name: name)
end
defp via_tuple(id) do
{:via, Registry, {@registry_name, id}}
end
def init([id]) do
{:ok, %__MODULE__{ id: id }}
end
def fetch_avg_rates(id, state) do
GenServer.call(via_tuple(id), {:fetch_avg_rates, state})
end
def fetch_avg_rates!(id, state) do
GenServer.call(via_tuple(id), {:fetch_avg_rates!, state})
end
def fetch_national_avg(id) do
GenServer.call(via_tuple(id), :fetch_national_avg)
end
def fetch_national_avg!(id) do
GenServer.call(via_tuple(id), :fetch_national_avg!)
end
@doc "Fetch the national avg gas rates"
def handle_call(:fetch_national_avg, _from, %__MODULE__{ rates: rates } = state) do
r = G.fetch_national_avg
{status, rte } = r
{:reply, r, %__MODULE__{ state | rates: rte }
end
@doc "Fetch the national avg gas rates"
def handle_call(:fetch_national_avg!, _from, %__MODULE__{ rates: rates } = state) do
r = G.fetch_national_avg
{status, rte } = r
{:reply, rte, %__MODULE__{ state | rates: rte }
end
@doc "Fetch the avg gas rates"
def handle_call({:fetch_avg_rates,state}, _from, %__MODULE__{ rates: rates } = state) do
r = G.fetch_avg_rates(state)
{status, rte } = r
{:reply, r, %__MODULE__{ state | rates: rte }
end
@doc "Fetch the avg gas rates"
def handle_call({:fetch_avg_rates!,state}, _from, %__MODULE__{ rates: rates } = state) do
r = G.fetch_avg_rates(state)
{status, rte } = r
{:reply, rte, %__MODULE__{ state | rates: rte }
end
end