• 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.75
/lib/basenji/reader/cb7_reader.ex
1
defmodule Basenji.Reader.CB7Reader do
2
  @moduledoc false
3

4
  @behaviour Basenji.Reader
5

6
  use Basenji.TelemetryHelpers
7

8
  alias Basenji.Reader
9

10
  @impl Reader
11
  def format, do: :cb7
4✔
12

13
  @impl Reader
14
  def file_extensions, do: ["cb7"]
2,387✔
15

16
  @impl Reader
17
  def magic_numbers, do: [%{offset: 0, magic: [0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C]}]
779✔
18

19
  @impl Reader
20
  def get_entries(cbz_file_path, _opts \\ []) do
21
    with {:ok, output} <- Reader.exec("7z", ["l", "-ba", cbz_file_path]) do
783✔
22
      file_names =
783✔
23
        output
24
        |> String.split("\n")
25
        |> Enum.map(&String.slice(&1, 53..-1//1))
3,132✔
26

27
      file_entries =
783✔
28
        file_names
29
        |> Enum.map(&%{file_name: &1})
3,132✔
30
        |> Reader.sort_file_names()
31
        |> Reader.reject_macos_preview()
32
        |> Reader.reject_directories()
33
        |> Reader.reject_non_image()
34

35
      {:ok, %{entries: file_entries}}
36
    end
37
  end
38

39
  @impl Reader
40
  def read(cbz_file_path, _opts \\ []) do
41
    meter_duration [:basenji, :process], "read_cb7" do
781✔
UNCOV
42
      with {:ok, %{entries: file_entries}} <- get_entries(cbz_file_path) do
×
43
        file_entries =
781✔
44
          file_entries
45
          |> Enum.map(&Map.put(&1, :stream_fun, fn -> get_entry_stream!(cbz_file_path, &1) end))
3,124✔
46

47
        {:ok, %{entries: file_entries}}
48
      end
49
    end
50
  end
51

52
  @impl Reader
53
  def close(_), do: :ok
4✔
54

55
  defp get_entry_stream!(cbz_file_path, entry) do
56
    Reader.create_resource(fn ->
83✔
57
      escaped_filename = entry[:file_name]
83✔
58

59
      with {:ok, output} <- Reader.exec("7z", ["x", "-so", cbz_file_path, escaped_filename]) do
83✔
60
        [output |> :binary.bin_to_list()]
61
      end
62
    end)
63
  end
64
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