mirror of
https://github.com/ash-project/ash_blog.git
synced 2024-09-19 21:03:21 +12:00
improvement: make rss feed generic and actually work
This commit is contained in:
parent
56ca4116c6
commit
8a3bee3a49
1 changed files with 17 additions and 7 deletions
|
@ -8,16 +8,26 @@ defmodule AshBlog do
|
||||||
def rss_feed(blog_posts, opts \\ []) do
|
def rss_feed(blog_posts, opts \\ []) do
|
||||||
blog_posts = Enum.filter(blog_posts, &(&1.state == :published))
|
blog_posts = Enum.filter(blog_posts, &(&1.state == :published))
|
||||||
|
|
||||||
|
default_updated =
|
||||||
|
blog_posts
|
||||||
|
|> Enum.map(& &1.published_at)
|
||||||
|
|> case do
|
||||||
|
[] ->
|
||||||
|
DateTime.utc_now()
|
||||||
|
|
||||||
|
rows ->
|
||||||
|
Enum.max(rows, DateTime)
|
||||||
|
end
|
||||||
|
|
||||||
element(
|
element(
|
||||||
:feed,
|
:feed,
|
||||||
%{xmlns: "http://www.w3.org/2005/Atom"},
|
%{xmlns: "http://www.w3.org/2005/Atom"},
|
||||||
[
|
[
|
||||||
element(:title, "Ash Framework Blog"),
|
element(:id, opts[:link]),
|
||||||
element(:link, "https://ash-hq.org/blog"),
|
element(:title, opts[:title]),
|
||||||
element(
|
element(:link, %{href: opts[:link], rel: "alternate", type: "text/html"}),
|
||||||
:description,
|
element(:link, %{href: opts[:rss_link], rel: "self", type: "application/atom+xml"}),
|
||||||
"News and information about Ash Framework, a declarative, resource oriented Elixir application development framework."
|
element(:updated, to_string(opts[:updated] || default_updated))
|
||||||
)
|
|
||||||
] ++
|
] ++
|
||||||
Enum.map(blog_posts, fn %resource{} = blog_post ->
|
Enum.map(blog_posts, fn %resource{} = blog_post ->
|
||||||
data = [
|
data = [
|
||||||
|
@ -60,7 +70,7 @@ defmodule AshBlog do
|
||||||
|> Enum.map_join("-", &to_string(Map.get(blog_post, &1)))
|
|> Enum.map_join("-", &to_string(Map.get(blog_post, &1)))
|
||||||
)
|
)
|
||||||
|
|
||||||
element(:item, data, inners)
|
element(:entry, data, inners)
|
||||||
end)
|
end)
|
||||||
)
|
)
|
||||||
|> XmlBuilder.generate()
|
|> XmlBuilder.generate()
|
||||||
|
|
Loading…
Reference in a new issue