lib/renamer.ex

defmodule Strom.Renamer do
  defstruct names: %{}

  def new(names) when is_map(names) and map_size(names) > 0 do
    %__MODULE__{names: names}
  end

  def start(%__MODULE__{names: names} = renamer) when is_map(names) and map_size(names) > 0 do
    renamer
  end

  def call(flow, %__MODULE__{names: names}) do
    Enum.reduce(names, flow, fn {name, new_name}, acc ->
      acc
      |> Map.put(new_name, Map.fetch!(acc, name))
      |> Map.delete(name)
    end)
  end

  def stop(%__MODULE__{}), do: :ok
end