logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

maps.ex (897B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Maps do
  5. def put_if_present(map, key, value, value_function \\ &{:ok, &1}) when is_map(map) do
  6. with false <- is_nil(key),
  7. false <- is_nil(value),
  8. {:ok, new_value} <- value_function.(value) do
  9. Map.put(map, key, new_value)
  10. else
  11. _ -> map
  12. end
  13. end
  14. def safe_put_in(data, keys, value) when is_map(data) and is_list(keys) do
  15. Kernel.put_in(data, keys, value)
  16. rescue
  17. _ -> data
  18. end
  19. def filter_empty_values(data) do
  20. # TODO: Change to Map.filter in Elixir 1.13+
  21. data
  22. |> Enum.filter(fn
  23. {_k, nil} -> false
  24. {_k, ""} -> false
  25. {_k, []} -> false
  26. {_k, %{} = v} -> Map.keys(v) != []
  27. {_k, _v} -> true
  28. end)
  29. |> Map.new()
  30. end
  31. end