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

camatcode / basenji / 4e6ab01ab8578dff199cf92f5b41a9c641c12b53

03 Aug 2025 05:03PM UTC coverage: 84.192%. Remained the same
4e6ab01ab8578dff199cf92f5b41a9c641c12b53

Pull #85

github

camatcode
refactor: Reader behaviour
Pull Request #85: refactor: Reader behaviour

46 of 46 new or added lines in 6 files covered. (100.0%)

16 existing lines in 8 files now uncovered.

1209 of 1436 relevant lines covered (84.19%)

487.59 hits per line

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

93.33
/lib/basenji/reader/cbt_reader.ex
1
defmodule Basenji.Reader.CBTReader do
2
  @moduledoc false
3
  @behaviour Basenji.Reader
4

5
  use Basenji.TelemetryHelpers
6

7
  alias Basenji.Reader
8

9
  @impl Reader
10
  def format, do: :cbt
6✔
11

12
  @impl Reader
13
  def file_extensions, do: ["cbt"]
1,608✔
14

15
  @impl Reader
16
  def magic_numbers, do: [%{offset: 257, magic: ~c"ustar"}]
820✔
17

18
  @impl Reader
19
  def get_entries(cbz_file_path, _opts \\ []) do
20
    with {:ok, file_names} <- :erl_tar.table(cbz_file_path, [:compressed]) do
824✔
21
      file_entries =
824✔
22
        file_names
23
        |> Enum.map(&%{file_name: "#{&1}"})
3,296✔
24
        |> Reader.sort_file_names()
25
        |> Reader.reject_macos_preview()
26
        |> Reader.reject_directories()
27
        |> Reader.reject_non_image()
28

29
      {:ok, %{entries: file_entries}}
30
    end
31
  end
32

33
  @impl Reader
34
  def read(cbz_file_path, _opts \\ []) do
35
    meter_duration [:basenji, :process], "read_cbt" do
822✔
UNCOV
36
      with {:ok, %{entries: file_entries}} <- get_entries(cbz_file_path) do
×
37
        file_entries =
822✔
38
          file_entries
39
          |> Enum.map(fn entry ->
40
            entry
41
            |> Map.put(:stream_fun, fn -> get_entry_stream!(cbz_file_path, entry) end)
3,288✔
42
          end)
43

44
        {:ok, %{entries: file_entries}}
45
      end
46
    end
47
  end
48

49
  @impl Reader
50
  def close(_), do: :ok
6✔
51

52
  defp get_entry_stream!(cbz_file_path, entry) do
53
    escaped_filename = entry[:file_name]
84✔
54

55
    file_name = ~c"#{escaped_filename}"
84✔
56

57
    Reader.create_resource(fn ->
84✔
58
      with {:ok, [{^file_name, data}]} <-
84✔
59
             :erl_tar.extract(cbz_file_path, [
60
               {:files, [file_name]},
61
               :compressed,
62
               :memory
63
             ]) do
64
        [data |> :binary.bin_to_list()]
65
      end
66
    end)
67
  end
68
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