• 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/cbr_reader.ex
1
defmodule Basenji.Reader.CBRReader 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: :cbr
4✔
11

12
  @impl Reader
13
  def file_extensions, do: ["cbr"]
3,164✔
14

15
  @impl Reader
16
  def magic_numbers, do: [%{offset: 0, magic: [0x52, 0x61, 0x72, 0x21, 0x1A, 0x07]}]
777✔
17

18
  @impl Reader
19
  def get_entries(cbr_file_path, _opts \\ []) do
20
    with {:ok, output} <- Reader.exec("unrar", ["lb", cbr_file_path]) do
779✔
21
      file_names = String.split(output, "\n")
779✔
22

23
      file_entries =
779✔
24
        file_names
25
        |> Enum.map(&%{file_name: &1})
3,116✔
26
        |> Reader.sort_file_names()
27
        |> Reader.reject_macos_preview()
28
        |> Reader.reject_directories()
29
        |> Reader.reject_non_image()
30

31
      {:ok, %{entries: file_entries}}
32
    end
33
  end
34

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

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

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

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

58
      with {:ok, output} <- Reader.exec("unrar", ["p", cbr_file_path, escaped_filename]) do
73✔
59
        [output |> :binary.bin_to_list()]
60
      end
61
    end)
62
  end
63
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