defmodule Money.ExchangeRates.Cache.EtsDets do
defmacro define_common_functions do
quote do
def latest_rates do
case get(:latest_rates) do
nil ->
{:error, {Money.ExchangeRateError, "No exchange rates were found"}}
rates ->
{:ok, rates}
end
end
def historic_rates(%Date{calendar: Calendar.ISO} = date) do
case get(date) do
nil ->
{:error,
{Money.ExchangeRateError, "No exchange rates for #{Date.to_string(date)} were found"}}
rates ->
{:ok, rates}
end
end
def historic_rates(%{year: year, month: month, day: day}) do
{:ok, date} = Date.new(year, month, day)
historic_rates(date)
end
def last_updated do
case get(:last_updated) do
nil ->
Logger.error("Argument error getting last updated timestamp from ETS table")
{:error, {Money.ExchangeRateError, "Last updated date is not known"}}
last_updated ->
{:ok, last_updated}
end
end
def store_latest_rates(rates, retrieved_at) do
put(:latest_rates, rates)
put(:last_updated, retrieved_at)
end
def store_historic_rates(rates, date) do
put(date, rates)
end
end
end
end