• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

camatcode / basenji / 054fcf23aad24ad087f0187c508835b45486fd03

05 Jul 2025 02:31AM UTC coverage: 60.0% (-1.5%) from 61.462%
054fcf23aad24ad087f0187c508835b45486fd03

Pull #23

github

camatcode
feat(comics): using plug for json_api
Pull Request #23: feat(comics): using plug for json_api

34 of 40 new or added lines in 5 files covered. (85.0%)

3 existing lines in 2 files now uncovered.

297 of 495 relevant lines covered (60.0%)

280.33 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

46.15
/lib/basenji_web/controllers/api/comics_controller.ex
1
defmodule BasenjiWeb.ComicsController do
2
  @moduledoc false
3
  use BasenjiWeb, :controller
4

5
  alias Basenji.Comics
6
  alias BasenjiWeb.API.Utils
7

8
  plug JSONAPIPlug.Plug, api: BasenjiWeb.API, path: "comics", resource: Basenji.Comic
9

10
  def index(%{private: %{jsonapi_plug: jsonapi_plug}} = conn, _params) do
11
    comics = Comics.list_comics(Utils.to_opts(jsonapi_plug))
65✔
12
    render(conn, "index.json", %{data: comics})
65✔
13
  end
14

15
  def create(conn, params) do
16
    # validate params!
17
    attrs = params["data"]["attributes"] |> Utils.atomize()
1✔
18

19
    Comics.from_resource(params["data"]["attributes"]["resource_location"], attrs)
20
    |> case do
1✔
21
      {:ok, comic} -> render(conn, "create.json", %{data: comic})
1✔
22
      error -> Utils.bad_request_handler(conn, error)
×
23
    end
24
  end
25

26
  def show(%{private: %{jsonapi_plug: %JSONAPIPlug{} = jsonapi_plug}} = conn, params) do
27
    Comics.get_comic(params["id"], Utils.to_opts(jsonapi_plug))
28
    |> case do
1✔
29
      {:ok, comic} ->
30
        render(conn, "create.json", %{data: comic})
1✔
31

32
      _ ->
NEW
33
        Utils.bad_request_handler(conn, {:error, :not_found})
×
34
    end
35
  end
36

37
  def update(conn, params) do
38
    id = params["id"]
1✔
39

40
    Comics.update_comic(id, params["data"]["attributes"])
41
    |> case do
1✔
42
      {:ok, comic} -> render(conn, "update.json", %{data: comic})
1✔
NEW
43
      e -> Utils.bad_request_handler(conn, e)
×
44
    end
45
  end
46

47
  def delete(conn, params) do
48
    {:ok, deleted} = Comics.delete_comic(params["id"])
1✔
49
    render(conn, "show.json", %{data: deleted})
1✔
50
  end
51

52
  def get_page(conn, params) do
53
    id = params["id"]
×
54
    page = params["page"]
×
55

56
    with {:ok, page_num} <- Utils.safe_to_int(page),
×
57
         {:ok, page_stream, mime} <- Comics.get_page(id, page_num) do
×
58
      binary = page_stream |> Enum.to_list()
×
59
      {:ok, binary, mime}
×
60
    end
61
    |> case do
×
62
      {:ok, binary, mime} ->
63
        length = Enum.count(binary)
×
64

65
        conn
66
        |> merge_resp_headers([{"access-control-allow-origin", "*"}])
67
        |> merge_resp_headers([{"content-type", mime}])
68
        |> merge_resp_headers([{"content-length", "#{length}"}])
×
69
        |> merge_resp_headers([{"content-disposition", "attachment"}])
70
        |> send_resp(200, binary)
×
71

72
      error ->
73
        Utils.bad_request_handler(conn, error)
×
74
    end
75
  end
76
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc