defmodule Iris.Adapters.AppendItems do defguard is_valid_input(token, list, module, key) when is_list(list) and is_atom(module) and is_atom(key) and is_binary(token) def from_list(token, list, module, key) when is_valid_input(token, list, module, key) do ids = Enum.map(list, &Map.get(&1, key)) with {:ok, items} <- module.all(token, ids) do key_without_sufix = String.slice(Atom.to_string(key), 0..-4) |> String.to_atom() {:ok, for item <- items, entry <- list do Map.put(entry, key_without_sufix, item) |> Map.delete(key) end} end end def from_list!(token, list, module, key) when is_valid_input(token, list, module, key) do ids = Enum.map(list, &Map.get(&1, key)) items = module.all!(token, ids) key_without_sufix = String.slice(Atom.to_string(key), 0..-4) |> String.to_atom() for item <- items, entry <- list do Map.put(entry, key_without_sufix, item) |> Map.delete(key) end end end