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

camatcode / basenji / 510183623a1afcec86a81c40dc2c479a483e7ff7

03 Aug 2025 05:27PM UTC coverage: 84.181% (-0.01%) from 84.192%
510183623a1afcec86a81c40dc2c479a483e7ff7

Pull #85

github

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

59 of 62 new or added lines in 6 files covered. (95.16%)

13 existing lines in 6 files now uncovered.

1208 of 1435 relevant lines covered (84.18%)

491.41 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,601✔
14

15
  @impl Reader
16
  def magic_numbers, do: [%{offset: 257, magic: ~c"ustar"}]
819✔
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
823✔
21
      file_entries =
823✔
22
        file_names
23
        |> Enum.map(&%{file_name: "#{&1}"})
3,292✔
24
        |> Reader.sort_and_reject()
25

26
      {:ok, %{entries: file_entries}}
27
    end
28
  end
29

30
  def read(cbz_file_path, _opts \\ []) do
31
    meter_duration [:basenji, :process], "read_cbt" do
815✔
NEW
32
      with {:ok, %{entries: file_entries}} <- get_entries(cbz_file_path) do
×
33
        file_entries =
815✔
34
          file_entries
35
          |> Enum.map(fn entry ->
36
            entry
37
            |> Map.put(:stream_fun, fn -> get_entry_stream!(cbz_file_path, entry) end)
3,260✔
38
          end)
39

40
        {:ok, %{entries: file_entries}}
41
      end
42
    end
43
  end
44

45
  @impl Reader
46
  def get_entry_stream!(cbz_file_path, entry) do
47
    escaped_filename = entry[:file_name]
96✔
48

49
    file_name = ~c"#{escaped_filename}"
96✔
50

51
    Reader.create_resource(fn ->
96✔
52
      with {:ok, [{^file_name, data}]} <-
96✔
53
             :erl_tar.extract(cbz_file_path, [
54
               {:files, [file_name]},
55
               :compressed,
56
               :memory
57
             ]) do
58
        [data |> :binary.bin_to_list()]
59
      end
60
    end)
61
  end
62

63
  @impl Reader
64
  def close(_), do: :ok
6✔
65
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