omnizip 0.3.34 → 0.3.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad5f2e41132ed61e2e80173f7550d75f3f0c8711d264e36a605fbee28e4a322e
4
- data.tar.gz: 6d2b1989b06bb359cf48f2a5d24e8eea4b697cde22404c144cfef72357fdfb2d
3
+ metadata.gz: e76fab599398d72d3eb4999e7d516dabb26e1ca625dbc75afb35d48b7d037dcf
4
+ data.tar.gz: 6afeb78f1f806ba12a7577bfe8c6fd2f6ba127047ec8546b0513be5516a7420a
5
5
  SHA512:
6
- metadata.gz: 38afce515d452d0dd4b1ace8b32608b59ff72e86d76d7d0ccfe3985f2d8cae6c24f4e657dc2e48d92b1b9194de2bca7e6d38eedb499255f1b8dcc3da5e2660db
7
- data.tar.gz: dab546e8c4db730e7d257d29c89e903768e2112e858a87ef55daf3ac64305e584c715b3042a60e5caef7428357a8b12d4c2609e8ed2baa15612a5ada53ed3337
6
+ metadata.gz: 7a46395d5faa8ed51438bb680839490c99dd15c01f2409b60a8cf9241af8269150b0fb98694fc176c330af90ded71bea99e64f0c11770f0c9d8259abf1719b8f
7
+ data.tar.gz: bec34c361902bc7954b98d4d9d1f50e53cdac36bb9b800b3d6d0109a1ffc9e36e5211fba84cb38f829ef54c27a3eba79f03b0df8be39af0026c378f5feeee773
data/CHANGELOG.md CHANGED
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Fixed
11
+ - `Omnizip.list_archive` on `.7z` returned raw Reader objects (the
12
+ SevenZip.open facade discards block return values) and
13
+ `read_from_archive` on `.7z` raised NotImplementedError. Both work
14
+ now: list returns entry names (or name/size/directory/mtime hashes
15
+ with `details: true`) and read returns entry bytes, wired through
16
+ the reader's `extract_entry_data`; missing entries raise
17
+ `Errno::ENOENT` like the ZIP handler.
18
+
19
+ ## [0.3.34] - 2026-08-27
20
+
10
21
  ### Fixed
11
22
  - `Omnizip.compress_directory` to `.7z` and `.tar` (both documented)
12
23
  works now: the 7z handler treats directory entries as the no-op
@@ -21,16 +21,40 @@ module Omnizip
21
21
  end
22
22
 
23
23
  def list(path, details: false, **options)
24
- Omnizip::Formats::SevenZip.open(path, options) do |reader|
25
- files = reader.list_files
26
- return details ? files.map { |f| { name: f } } : files
24
+ with_reader(path, options) do |reader|
25
+ entries = reader.list_files
26
+ if details
27
+ entries.map do |e|
28
+ { name: e.name, size: e.size, directory: e.is_dir,
29
+ mtime: e.mtime }
30
+ end
31
+ else
32
+ entries.map(&:name)
33
+ end
27
34
  end
28
35
  end
29
36
 
30
- def read_entry(_path, _entry_name)
31
- raise NotImplementedError,
32
- "read_from_archive for .7z is not wired; use " \
33
- "Formats::SevenZip.open"
37
+ def read_entry(path, entry_name, **options)
38
+ with_reader(path, options) do |reader|
39
+ entry = reader.list_files.find { |e| e.name == entry_name }
40
+ raise Errno::ENOENT, "Entry not found: #{entry_name}" unless entry
41
+
42
+ reader.extract_entry_data(File.open(path, "rb"), entry)
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ # The SevenZip.open facade returns the reader, discarding the
49
+ # block's value — so drive the Reader directly.
50
+ def with_reader(path, options)
51
+ reader = Omnizip::Formats::SevenZip::Reader.new(path, options)
52
+ reader.open
53
+ begin
54
+ yield reader
55
+ ensure
56
+ reader.split_reader&.close
57
+ end
34
58
  end
35
59
 
36
60
  # Translates the generic +add(name, source_path)+ interface to
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Omnizip
4
- VERSION = "0.3.34"
4
+ VERSION = "0.3.35"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnizip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.34
4
+ version: 0.3.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.