Rename MapOfString to ContentLanguageMap
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
parent
92335a3fba
commit
86f2545068
3 changed files with 1 additions and 106 deletions
|
@ -1,49 +0,0 @@
|
||||||
# Pleroma: A lightweight social networking server
|
|
||||||
# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
|
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
|
|
||||||
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.MapOfString do
|
|
||||||
use Ecto.Type
|
|
||||||
|
|
||||||
import Pleroma.EctoType.ActivityPub.ObjectValidators.LanguageCode,
|
|
||||||
only: [is_good_locale_code?: 1]
|
|
||||||
|
|
||||||
def type, do: :map
|
|
||||||
|
|
||||||
def cast(%{} = object) do
|
|
||||||
with {status, %{} = data} when status in [:modified, :ok] <- validate_map(object) do
|
|
||||||
{:ok, data}
|
|
||||||
else
|
|
||||||
{_, nil} -> {:ok, nil}
|
|
||||||
{:error, _} -> :error
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def cast(_), do: :error
|
|
||||||
|
|
||||||
def dump(data), do: {:ok, data}
|
|
||||||
|
|
||||||
def load(data), do: {:ok, data}
|
|
||||||
|
|
||||||
defp validate_map(%{} = object) do
|
|
||||||
{status, data} =
|
|
||||||
object
|
|
||||||
|> Enum.reduce({:ok, %{}}, fn
|
|
||||||
{lang, value}, {status, acc} when is_binary(lang) and is_binary(value) ->
|
|
||||||
if is_good_locale_code?(lang) do
|
|
||||||
{status, Map.put(acc, lang, value)}
|
|
||||||
else
|
|
||||||
{:modified, acc}
|
|
||||||
end
|
|
||||||
|
|
||||||
_, {_status, acc} ->
|
|
||||||
{:modified, acc}
|
|
||||||
end)
|
|
||||||
|
|
||||||
if data == %{} do
|
|
||||||
{status, nil}
|
|
||||||
else
|
|
||||||
{status, data}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -31,7 +31,7 @@ defmacro activity_fields do
|
||||||
defmacro object_fields do
|
defmacro object_fields do
|
||||||
quote bind_quoted: binding() do
|
quote bind_quoted: binding() do
|
||||||
field(:content, :string)
|
field(:content, :string)
|
||||||
field(:contentMap, ObjectValidators.MapOfString)
|
field(:contentMap, ObjectValidators.ContentLanguageMap)
|
||||||
|
|
||||||
field(:published, ObjectValidators.DateTime)
|
field(:published, ObjectValidators.DateTime)
|
||||||
field(:updated, ObjectValidators.DateTime)
|
field(:updated, ObjectValidators.DateTime)
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
# Pleroma: A lightweight social networking server
|
|
||||||
# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
|
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
|
|
||||||
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.MapOfStringTest do
|
|
||||||
use Pleroma.DataCase, async: true
|
|
||||||
|
|
||||||
alias Pleroma.EctoType.ActivityPub.ObjectValidators.MapOfString
|
|
||||||
|
|
||||||
test "it validates" do
|
|
||||||
data = %{
|
|
||||||
"en-US" => "mew mew",
|
|
||||||
"en-GB" => "meow meow"
|
|
||||||
}
|
|
||||||
|
|
||||||
assert {:ok, ^data} = MapOfString.cast(data)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it validates empty strings" do
|
|
||||||
data = %{
|
|
||||||
"en-US" => "mew mew",
|
|
||||||
"en-GB" => ""
|
|
||||||
}
|
|
||||||
|
|
||||||
assert {:ok, ^data} = MapOfString.cast(data)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it ignores non-strings within the map" do
|
|
||||||
data = %{
|
|
||||||
"en-US" => "mew mew",
|
|
||||||
"en-GB" => 123
|
|
||||||
}
|
|
||||||
|
|
||||||
assert {:ok, validated_data} = MapOfString.cast(data)
|
|
||||||
|
|
||||||
assert validated_data == %{"en-US" => "mew mew"}
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it ignores bad locale codes" do
|
|
||||||
data = %{
|
|
||||||
"en-US" => "mew mew",
|
|
||||||
"en_GB" => "meow meow",
|
|
||||||
"en<<#@!$#!@%!GB" => "meow meow"
|
|
||||||
}
|
|
||||||
|
|
||||||
assert {:ok, validated_data} = MapOfString.cast(data)
|
|
||||||
|
|
||||||
assert validated_data == %{"en-US" => "mew mew"}
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it complains with non-map data" do
|
|
||||||
assert :error = MapOfString.cast("mew")
|
|
||||||
assert :error = MapOfString.cast(["mew"])
|
|
||||||
assert :error = MapOfString.cast([%{"en-US" => "mew"}])
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue