logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: 1af9c777365f3b54edcb572cea4e2e6f185b3099
parent: 93764439730d708a9a07375f9d840e8dd32156fb
Author: Roger Braun <roger@rogerbraun.net>
Date:   Wed, 14 Jun 2017 13:58:56 +0200

Move mention parsing to Formatter module.

Diffstat:

Mlib/pleroma/formatter.ex12++++++++++++
Mlib/pleroma/web/twitter_api/twitter_api.ex13+------------
Mtest/formatter_test.exs18++++++++++++++++++
Mtest/web/twitter_api/twitter_api_test.exs18+-----------------
4 files changed, 32 insertions(+), 29 deletions(-)

diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex @@ -1,4 +1,5 @@ defmodule Pleroma.Formatter do + alias Pleroma.User @link_regex ~r/https?:\/\/[\w\.\/?=\-#]+[\w]/ def linkify(text) do @@ -10,4 +11,15 @@ defmodule Pleroma.Formatter do Regex.scan(@tag_regex, text) |> Enum.map(fn (["#" <> tag = full_tag]) -> {full_tag, tag} end) end + + def parse_mentions(text) do + # Modified from https://www.w3.org/TR/html5/forms.html#valid-e-mail-address + regex = ~r/@[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/ + + Regex.scan(regex, text) + |> List.flatten + |> Enum.uniq + |> Enum.map(fn ("@" <> match = full_match) -> {full_match, User.get_cached_by_nickname(match)} end) + |> Enum.filter(fn ({_match, user}) -> user end) + end end diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -31,7 +31,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do def create_status(%User{} = user, %{"status" => status} = data) do with attachments <- attachments_from_ids(data["media_ids"]), - mentions <- parse_mentions(status), + mentions <- Formatter.parse_mentions(status), inReplyTo <- get_replied_to_activity(data["in_reply_to_status_id"]), to <- to_for_user_and_mentions(user, mentions, inReplyTo), content_html <- make_content_html(status, mentions, attachments), @@ -182,17 +182,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do end end - def parse_mentions(text) do - # Modified from https://www.w3.org/TR/html5/forms.html#valid-e-mail-address - regex = ~r/@[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/ - - Regex.scan(regex, text) - |> List.flatten - |> Enum.uniq - |> Enum.map(fn ("@" <> match = full_match) -> {full_match, User.get_cached_by_nickname(match)} end) - |> Enum.filter(fn ({_match, user}) -> user end) - end - def register_user(params) do params = %{ nickname: params["nickname"], diff --git a/test/formatter_test.exs b/test/formatter_test.exs @@ -2,6 +2,8 @@ defmodule Pleroma.FormatterTest do alias Pleroma.Formatter use Pleroma.DataCase + import Pleroma.Factory + describe ".linkify" do test "turning urls into links" do text = "Hey, check out https://www.youtube.com/watch?v=8Zg1-TufFzY." @@ -25,4 +27,20 @@ defmodule Pleroma.FormatterTest do assert Formatter.parse_tags(text) == expected end end + + test "it can parse mentions and return the relevant users" do + text = "@gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me" + + gsimg = insert(:user, %{nickname: "gsimg"}) + archaeme = insert(:user, %{nickname: "archaeme"}) + archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"}) + + expected_result = [ + {"@gsimg", gsimg}, + {"@archaeme", archaeme}, + {"@archaeme@archae.me", archaeme_remote}, + ] + + assert Formatter.parse_mentions(text) == expected_result + end end diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs @@ -240,22 +240,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do assert is_binary(response) end - test "it can parse mentions and return the relevant users" do - text = "@gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me" - - gsimg = insert(:user, %{nickname: "gsimg"}) - archaeme = insert(:user, %{nickname: "archaeme"}) - archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"}) - - expected_result = [ - {"@gsimg", gsimg}, - {"@archaeme", archaeme}, - {"@archaeme@archae.me", archaeme_remote}, - ] - - assert TwitterAPI.parse_mentions(text) == expected_result - end - test "it adds user links to an existing text" do text = "@gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me" @@ -263,7 +247,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do archaeme = insert(:user, %{nickname: "archaeme"}) archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"}) - mentions = TwitterAPI.parse_mentions(text) + mentions = Pleroma.Formatter.parse_mentions(text) expected_text = "<a href='#{gsimg.ap_id}'>@gsimg</a> According to <a href='#{archaeme.ap_id}'>@archaeme</a>, that is @daggsy. Also hello <a href='#{archaeme_remote.ap_id}'>@archaeme</a>" assert Utils.add_user_links(text, mentions) == expected_text