Move mention parsing to Formatter module.
authorRoger Braun <roger@rogerbraun.net>
Wed, 14 Jun 2017 11:58:56 +0000 (13:58 +0200)
committerRoger Braun <roger@rogerbraun.net>
Wed, 14 Jun 2017 11:58:56 +0000 (13:58 +0200)
lib/pleroma/formatter.ex
lib/pleroma/web/twitter_api/twitter_api.ex
test/formatter_test.exs
test/web/twitter_api/twitter_api_test.exs

index 5d989bc8ca1a77d6c0e9732a345a2d7329a51c7e..5a241fe457c3bd2a58ec8a89816fa8f0157f39dc 100644 (file)
@@ -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
index cf96107238f396b61c9ee57a0d34e9b32989e3ee..07ac30cb2ad6aba5c0f1d11358e754362b63fd78 100644 (file)
@@ -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"],
index bf09b246f16f5186e079636bcd42398c36424203..1e3a29e09ecc9096d8a064cfa31d58b0875ff59b 100644 (file)
@@ -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
index d5a1fa57a9ef4a9141ea7e189e89b6bc6699a527..da880e67c5652e6b8d5dc6a94b69b20d6f6f73d7 100644 (file)
@@ -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