Send proper content-type for responses

This commit is contained in:
Mikko Ahlroth 2018-11-26 22:16:50 +02:00
parent 0e2066b712
commit dce5676a17
7 changed files with 23 additions and 12 deletions

View file

@ -5,7 +5,7 @@ defmodule Mebe2.Web.Routes.Index do
@impl Raxx.SimpleServer
def handle_request(%Raxx.Request{path: ["p", page]} = _req, _state) do
Utils.render_posts(page, &post_getter/2, &Index.render/4)
Utils.render_posts(page, &post_getter/2, &renderer/4)
end
@impl Raxx.SimpleServer
@ -15,7 +15,11 @@ defmodule Mebe2.Web.Routes.Index do
@impl Raxx.SimpleServer
def handle_request(%Raxx.Request{} = _req, _state) do
Utils.render_posts(&post_getter/2, &Index.render/4)
Utils.render_posts(&post_getter/2, &renderer/4)
end
defp renderer(response, posts, total, page) do
Utils.render_template(response, Index, [posts, total, page])
end
defp post_getter(first, limit),

View file

@ -49,5 +49,5 @@ defmodule Mebe2.Web.Routes.Month do
}
defp renderer(year, month, response, posts, total, page),
do: Mebe2.Web.Views.Month.render(response, year, month, posts, total, page)
do: Utils.render_template(response, Mebe2.Web.Views.Month, [year, month, posts, total, page])
end

View file

@ -7,7 +7,7 @@ defmodule Mebe2.Web.Routes.Page do
def handle_request(%Raxx.Request{path: [slug]} = _req, _state) do
with {:page, %Models.Page{} = page} <- {:page, DB.get_page(slug)} do
Utils.html_response(200)
|> Mebe2.Web.Views.Page.render(page)
|> Utils.render_template(Mebe2.Web.Views.Page, [page])
else
_ -> Utils.render_404()
end

View file

@ -10,7 +10,7 @@ defmodule Mebe2.Web.Routes.Post do
{:day, {day, ""}} <- {:day, Integer.parse(d_str)},
{:post, %Models.Post{} = post} <- {:post, DB.get_post(year, month, day, slug)} do
Utils.html_response(200)
|> Mebe2.Web.Views.SinglePost.render(post)
|> Utils.render_template(Mebe2.Web.Views.SinglePost, [post])
else
_ -> Utils.render_404()
end

View file

@ -28,5 +28,5 @@ defmodule Mebe2.Web.Routes.Tag do
}
defp renderer(tag, response, posts, total, page),
do: Mebe2.Web.Views.Tag.render(response, tag, posts, total, page)
do: Utils.render_template(response, Mebe2.Web.Views.Tag, [tag, posts, total, page])
end

View file

@ -68,7 +68,7 @@ defmodule Mebe2.Web.Routes.Utils do
{posts, _} = post_getter.(first, limit)
rss_response(200)
|> Mebe2.Web.Views.Feeds.PostList.render(posts)
|> render_template(Mebe2.Web.Views.Feeds.PostList, [posts])
else
_ -> render_404()
end
@ -80,7 +80,7 @@ defmodule Mebe2.Web.Routes.Utils do
@spec render_404() :: Raxx.Response.t()
def render_404() do
html_response(404)
|> Mebe2.Web.Views.NotFound.render()
|> render_template(Mebe2.Web.Views.NotFound)
end
@doc """
@ -89,8 +89,7 @@ defmodule Mebe2.Web.Routes.Utils do
@spec html_response(integer) :: Raxx.Response.t()
def html_response(code) when is_integer(code) do
Raxx.response(code)
# TODO: Fix these when Raxx doesn't crash on setting content type when using views
# |> Raxx.set_header("content-type", "text/html; charset=utf-8")
|> Raxx.set_header("content-type", "text/html; charset=utf-8")
end
@doc """
@ -99,6 +98,14 @@ defmodule Mebe2.Web.Routes.Utils do
@spec rss_response(integer) :: Raxx.Response.t()
def rss_response(code) when is_integer(code) do
Raxx.response(code)
# |> Raxx.set_header("content-type", "application/xml+rss; charset=utf-8")
|> Raxx.set_header("content-type", "application/xml+rss; charset=utf-8")
end
@doc """
Render a template with the given args into the response.
"""
@spec render_template(Raxx.Response.t(), module, [any]) :: Raxx.Response.t()
def render_template(response, template, args \\ []) do
Raxx.set_body(response, apply(template, :html, args).data)
end
end

View file

@ -43,5 +43,5 @@ defmodule Mebe2.Web.Routes.Year do
}
defp renderer(year, response, posts, total, page),
do: Mebe2.Web.Views.Year.render(response, year, posts, total, page)
do: Utils.render_template(response, Mebe2.Web.Views.Year, [year, posts, total, page])
end