From d5e334dc09cfd2d6497229c6d52ce19a7c4f8053 Mon Sep 17 00:00:00 2001 From: shibao Date: Sat, 4 Nov 2023 22:07:25 -0400 Subject: [PATCH] tolerate spaces in tags --- changelog.md | 1 + lib/memex/contexts/context.ex | 8 ++++---- lib/memex/notes/note.ex | 8 ++++---- lib/memex/pipelines/pipeline.ex | 8 ++++---- priv/gettext/de/LC_MESSAGES/errors.po | 14 +++++++------- priv/gettext/en/LC_MESSAGES/errors.po | 14 +++++++------- priv/gettext/errors.pot | 14 +++++++------- test/memex_web/live/context_live_test.exs | 4 ++-- test/memex_web/live/note_live_test.exs | 4 ++-- test/memex_web/live/pipeline_live_test.exs | 4 ++-- 10 files changed, 40 insertions(+), 39 deletions(-) diff --git a/changelog.md b/changelog.md index b563ee6..5d29ae4 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,7 @@ # v0.1.13 - Update dependencies - Fix debounces +- Allow space as delimiter for tags # v0.1.12 - Code quality fixes diff --git a/lib/memex/contexts/context.ex b/lib/memex/contexts/context.ex index 3aa3e96..f83a8cc 100644 --- a/lib/memex/contexts/context.ex +++ b/lib/memex/contexts/context.ex @@ -79,11 +79,11 @@ defmodule Memex.Contexts.Context do changeset |> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string()) |> cast(attrs, [:tags_string]) - |> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\,]+$/, + |> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\, ]+$/, message: dgettext( "errors", - "invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited" + "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited" ) ) |> cast_tags() @@ -98,9 +98,9 @@ defmodule Memex.Contexts.Context do defp process_tags(tags_string) when tags_string |> is_binary() do tags_string - |> String.split(",", trim: true) + |> String.split([",", " "], trim: true) |> Enum.map(fn str -> str |> String.trim() end) - |> Enum.reject(fn str -> str |> is_nil() end) + |> Enum.reject(fn str -> str in [nil, ""] end) |> Enum.sort() end diff --git a/lib/memex/notes/note.ex b/lib/memex/notes/note.ex index d52b8ea..b427771 100644 --- a/lib/memex/notes/note.ex +++ b/lib/memex/notes/note.ex @@ -78,11 +78,11 @@ defmodule Memex.Notes.Note do changeset |> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string()) |> cast(attrs, [:tags_string]) - |> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\,]+$/, + |> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\, ]+$/, message: dgettext( "errors", - "invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited" + "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited" ) ) |> cast_tags() @@ -97,9 +97,9 @@ defmodule Memex.Notes.Note do defp process_tags(tags_string) when tags_string |> is_binary() do tags_string - |> String.split(",", trim: true) + |> String.split([",", " "], trim: true) |> Enum.map(fn str -> str |> String.trim() end) - |> Enum.reject(fn str -> str |> is_nil() end) + |> Enum.reject(fn str -> str in [nil, ""] end) |> Enum.sort() end diff --git a/lib/memex/pipelines/pipeline.ex b/lib/memex/pipelines/pipeline.ex index 15d1be4..c2d7422 100644 --- a/lib/memex/pipelines/pipeline.ex +++ b/lib/memex/pipelines/pipeline.ex @@ -81,11 +81,11 @@ defmodule Memex.Pipelines.Pipeline do changeset |> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string()) |> cast(attrs, [:tags_string]) - |> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\,]+$/, + |> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\, ]+$/, message: dgettext( "errors", - "invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited" + "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited" ) ) |> cast_tags() @@ -100,9 +100,9 @@ defmodule Memex.Pipelines.Pipeline do defp process_tags(tags_string) when tags_string |> is_binary() do tags_string - |> String.split(",", trim: true) + |> String.split([",", " "], trim: true) |> Enum.map(fn str -> str |> String.trim() end) - |> Enum.reject(fn str -> str |> is_nil() end) + |> Enum.reject(fn str -> str in [nil, ""] end) |> Enum.sort() end diff --git a/priv/gettext/de/LC_MESSAGES/errors.po b/priv/gettext/de/LC_MESSAGES/errors.po index e793d4a..22685ee 100644 --- a/priv/gettext/de/LC_MESSAGES/errors.po +++ b/priv/gettext/de/LC_MESSAGES/errors.po @@ -79,13 +79,6 @@ msgstr "" msgid "unauthorized" msgstr "" -#: lib/memex/contexts/context.ex:84 -#: lib/memex/notes/note.ex:83 -#: lib/memex/pipelines/pipeline.ex:86 -#, elixir-autogen, elixir-format, fuzzy -msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited" -msgstr "" - #: lib/memex_web/controllers/user_registration_html/new.html.heex:13 #: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:13 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:64 @@ -146,3 +139,10 @@ msgstr "" #, elixir-autogen, elixir-format, fuzzy msgid "user confirmation link is invalid or it has expired." msgstr "" + +#: lib/memex/contexts/context.ex:84 +#: lib/memex/notes/note.ex:83 +#: lib/memex/pipelines/pipeline.ex:86 +#, elixir-autogen, elixir-format, fuzzy +msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/errors.po b/priv/gettext/en/LC_MESSAGES/errors.po index 226bd09..a336e9e 100644 --- a/priv/gettext/en/LC_MESSAGES/errors.po +++ b/priv/gettext/en/LC_MESSAGES/errors.po @@ -80,13 +80,6 @@ msgstr "" msgid "unauthorized" msgstr "" -#: lib/memex/contexts/context.ex:84 -#: lib/memex/notes/note.ex:83 -#: lib/memex/pipelines/pipeline.ex:86 -#, elixir-autogen, elixir-format -msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited" -msgstr "" - #: lib/memex_web/controllers/user_registration_html/new.html.heex:13 #: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:13 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:64 @@ -147,3 +140,10 @@ msgstr "" #, elixir-autogen, elixir-format, fuzzy msgid "user confirmation link is invalid or it has expired." msgstr "" + +#: lib/memex/contexts/context.ex:84 +#: lib/memex/notes/note.ex:83 +#: lib/memex/pipelines/pipeline.ex:86 +#, elixir-autogen, elixir-format, fuzzy +msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited" +msgstr "" diff --git a/priv/gettext/errors.pot b/priv/gettext/errors.pot index 0672411..23f62b2 100644 --- a/priv/gettext/errors.pot +++ b/priv/gettext/errors.pot @@ -79,13 +79,6 @@ msgstr "" msgid "unauthorized" msgstr "" -#: lib/memex/contexts/context.ex:84 -#: lib/memex/notes/note.ex:83 -#: lib/memex/pipelines/pipeline.ex:86 -#, elixir-autogen, elixir-format -msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited" -msgstr "" - #: lib/memex_web/controllers/user_registration_html/new.html.heex:13 #: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:13 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:64 @@ -146,3 +139,10 @@ msgstr "" #, elixir-autogen, elixir-format msgid "user confirmation link is invalid or it has expired." msgstr "" + +#: lib/memex/contexts/context.ex:84 +#: lib/memex/notes/note.ex:83 +#: lib/memex/pipelines/pipeline.ex:86 +#, elixir-autogen, elixir-format +msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited" +msgstr "" diff --git a/test/memex_web/live/context_live_test.exs b/test/memex_web/live/context_live_test.exs index a6ad8ea..6148385 100644 --- a/test/memex_web/live/context_live_test.exs +++ b/test/memex_web/live/context_live_test.exs @@ -17,7 +17,7 @@ defmodule MemexWeb.ContextLiveTest do } @invalid_attrs %{ content: nil, - tags_string: "invalid tags", + tags_string: "invalid_tag or_tags", slug: nil, visibility: nil } @@ -114,7 +114,7 @@ defmodule MemexWeb.ContextLiveTest do |> render_change(context: @invalid_attrs) assert html =~ "can't be blank" - assert html =~ "tags must be comma-delimited" + assert html =~ "tags must be comma or space delimited" {:ok, _live, html} = show_live diff --git a/test/memex_web/live/note_live_test.exs b/test/memex_web/live/note_live_test.exs index 70e7030..7604fb4 100644 --- a/test/memex_web/live/note_live_test.exs +++ b/test/memex_web/live/note_live_test.exs @@ -17,7 +17,7 @@ defmodule MemexWeb.NoteLiveTest do } @invalid_attrs %{ content: nil, - tags_string: "invalid tags", + tags_string: "invalid_tag or_tags", slug: nil, visibility: nil } @@ -55,7 +55,7 @@ defmodule MemexWeb.NoteLiveTest do |> render_change(note: @invalid_attrs) assert html =~ "can't be blank" - assert html =~ "tags must be comma-delimited" + assert html =~ "tags must be comma or space delimited" {:ok, _live, html} = index_live diff --git a/test/memex_web/live/pipeline_live_test.exs b/test/memex_web/live/pipeline_live_test.exs index d7b60da..595f11b 100644 --- a/test/memex_web/live/pipeline_live_test.exs +++ b/test/memex_web/live/pipeline_live_test.exs @@ -17,7 +17,7 @@ defmodule MemexWeb.PipelineLiveTest do } @invalid_attrs %{ description: nil, - tags_string: "invalid tags", + tags_string: "invalid_tag or_tags", slug: nil, visibility: nil } @@ -130,7 +130,7 @@ defmodule MemexWeb.PipelineLiveTest do |> render_change(pipeline: @invalid_attrs) assert html =~ "can't be blank" - assert html =~ "tags must be comma-delimited" + assert html =~ "tags must be comma or space delimited" {:ok, _live, html} = show_live