Add ObjectValidators.LanguageCode type
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
parent
e32116131a
commit
adb84b1df9
3 changed files with 54 additions and 1 deletions
|
@ -0,0 +1,25 @@
|
||||||
|
# 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.LanguageCode do
|
||||||
|
use Ecto.Type
|
||||||
|
|
||||||
|
import Pleroma.Web.CommonAPI.Utils, only: [is_good_locale_code?: 1]
|
||||||
|
|
||||||
|
def type, do: :string
|
||||||
|
|
||||||
|
def cast(language) when is_binary(language) do
|
||||||
|
if is_good_locale_code?(language) do
|
||||||
|
{:ok, language}
|
||||||
|
else
|
||||||
|
{:error, :invalid_language}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def cast(_), do: :error
|
||||||
|
|
||||||
|
def dump(data), do: {:ok, data}
|
||||||
|
|
||||||
|
def load(data), do: {:ok, data}
|
||||||
|
end
|
|
@ -58,7 +58,7 @@ defmacro status_object_fields do
|
||||||
field(:like_count, :integer, default: 0)
|
field(:like_count, :integer, default: 0)
|
||||||
field(:announcement_count, :integer, default: 0)
|
field(:announcement_count, :integer, default: 0)
|
||||||
field(:quotes_count, :integer, default: 0)
|
field(:quotes_count, :integer, default: 0)
|
||||||
field(:language, :string)
|
field(:language, ObjectValidators.LanguageCode)
|
||||||
field(:inReplyTo, ObjectValidators.ObjectID)
|
field(:inReplyTo, ObjectValidators.ObjectID)
|
||||||
field(:quoteUrl, ObjectValidators.ObjectID)
|
field(:quoteUrl, ObjectValidators.ObjectID)
|
||||||
field(:url, ObjectValidators.BareUri)
|
field(:url, ObjectValidators.BareUri)
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
# 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.LanguageCodeTest do
|
||||||
|
use Pleroma.DataCase, async: true
|
||||||
|
|
||||||
|
alias Pleroma.EctoType.ActivityPub.ObjectValidators.LanguageCode
|
||||||
|
|
||||||
|
test "it accepts language code" do
|
||||||
|
text = "pl"
|
||||||
|
assert {:ok, ^text} = LanguageCode.cast(text)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it accepts language code with region" do
|
||||||
|
text = "pl-PL"
|
||||||
|
assert {:ok, ^text} = LanguageCode.cast(text)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "errors for invalid language code" do
|
||||||
|
assert {:error, :invalid_language} = LanguageCode.cast("ru_RU")
|
||||||
|
assert {:error, :invalid_language} = LanguageCode.cast(" ")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "errors for non-text" do
|
||||||
|
assert :error == LanguageCode.cast(42)
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue