defmodule Munge do @moduledoc """ `Munge` helps process and reshape complex records. """ # def good({:ok, response}), do: response def good({key, response} = source, guard) when is_list(guard), do: (if (key in guard), do: response, else: raise(Munge.ResponseError, response: source)) def good({key, response}, guard \\ :ok) when guard == key, do: response def good({key, response} = source, _), do: raise(Munge.ResponseError, response: source) @doc """ From an enum of maps, group the maps by the values on a chosen key. """ def group_by(records, key) when is_binary(key) do records |> Enum.reduce(%{}, fn record, groupings -> group = record |> Map.get(key) groupings |> Map.update(group, [record], fn prior -> [record | prior] end) end) end # @doc """ # From a generic enum of terms, # group the terms by some &closure/1 on each term. # """ # def group_by(records, closure) when is_function(closure) do # records # end end