Packages
literature
0.1.32
0.5.1
0.5.0
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
retired
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.32
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A simple CMS / Blog
Current section
Files
Jump to
Current section
Files
lib/literature/controllers/rss_controller.ex
defmodule Literature.RSSController do
use Literature.Web, :controller
alias Atomex.Entry
alias Atomex.Feed
alias Literature.Config
@default_path "/rss.xml"
def rss(conn, _params) do
base_path = String.replace(current_path(conn), @default_path, "")
base_url = Config.feed_url() <> base_path
publication_slug = String.split(base_path, "/") |> List.last()
publication = Literature.get_publication!(slug: publication_slug)
conn
|> put_resp_content_type("text/xml")
|> send_resp(200, render_feed(base_url, publication))
end
defp render_feed(base_url, publication) do
%{
"status" => "published",
"publication_slug" => publication.slug,
"max" => 10
}
|> Literature.list_posts()
|> build_feed(publication, base_url)
end
def build_feed(posts, publication, base_url) do
Feed.new(base_url, DateTime.utc_now(), publication.name)
|> Feed.author(Config.feed_author(), email: Config.feed_email())
|> Feed.link(base_url <> @default_path, rel: "self")
|> Feed.entries(Enum.map(posts, &get_entry(base_url, &1)))
|> Feed.build()
|> Atomex.generate_document()
end
defp get_entry(base_url, %{
title: title,
slug: slug,
excerpt: excerpt,
published_at: published_at,
authors: [author | _]
}) do
post_path = "#{base_url}/#{slug}"
Entry.new(post_path, DateTime.from_naive!(published_at, "Etc/UTC"), title)
|> Entry.link(post_path)
|> Entry.author(author.name)
|> Entry.content(excerpt)
|> Entry.build()
end
end