multiple authors are concatenated
This commit is contained in:
1 parent
34dea7a2ca
commit
515d60f331
2 files changed
+22
-1
No files matched your search
@@ -52,7 +52,7 @@ defmodule FeedReader.Formats.Atom do
|
|||||||
|> find_link()
|
|> find_link()
|
||||||
|> URL.resolve_root_relative([feed.html_url, feed.feed_url])
|
|> URL.resolve_root_relative([feed.html_url, feed.feed_url])
|
||||||
|
|
||||||
author = get_in(raw, ["author", "name"]) |> text()
|
author = raw |> Map.get("author") |> author()
|
||||||
|
|
||||||
date = text(raw["published"]) || text(raw["updated"])
|
date = text(raw["published"]) || text(raw["updated"])
|
||||||
|
|
||||||
@@ -84,6 +84,18 @@ defmodule FeedReader.Formats.Atom do
|
|||||||
|
|
||||||
defp content(value), do: text(value)
|
defp content(value), do: text(value)
|
||||||
|
|
||||||
|
defp author(value) do
|
||||||
|
value
|
||||||
|
|> List.wrap()
|
||||||
|
|> Enum.map(&author_name/1)
|
||||||
|
|> Enum.reject(&is_nil/1)
|
||||||
|
|> Enum.join(", ")
|
||||||
|
|> blank_to_nil()
|
||||||
|
end
|
||||||
|
|
||||||
|
defp author_name(%{"name" => name}), do: text(name)
|
||||||
|
defp author_name(value), do: text(value)
|
||||||
|
|
||||||
defp find_link(links) do
|
defp find_link(links) do
|
||||||
case Enum.find(links, &((is_map(&1) and &1["href"]) && &1["rel"] in [nil, "alternate"])) do
|
case Enum.find(links, &((is_map(&1) and &1["href"]) && &1["rel"] in [nil, "alternate"])) do
|
||||||
%{"href" => href} -> clean(href)
|
%{"href" => href} -> clean(href)
|
||||||
|
|||||||
@@ -34,6 +34,15 @@ defmodule FeedReader.AtomTest do
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "joins multiple author names in source order" do
|
||||||
|
raw = %{
|
||||||
|
"title" => "Story",
|
||||||
|
"author" => [%{"name" => "Alice"}, %{"name" => "Bob"}]
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:ok, %Item{author: "Alice, Bob"}} = Atom.normalize_item(raw, %Feed{}, [])
|
||||||
|
end
|
||||||
|
|
||||||
test "accounts for parser failures and closes empty feeds" do
|
test "accounts for parser failures and closes empty feeds" do
|
||||||
handler = Atom.handler()
|
handler = Atom.handler()
|
||||||
sink = fn event -> send(self(), event) end
|
sink = fn event -> send(self(), event) end
|
||||||
|
|||||||
Reference in new issue
Block a user