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 +4 -4
- data/CHANGELOG.md +11 -0
- data/lib/omnizip/archive_handlers/seven_zip_handler.rb +31 -7
- data/lib/omnizip/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e76fab599398d72d3eb4999e7d516dabb26e1ca625dbc75afb35d48b7d037dcf
|
|
4
|
+
data.tar.gz: 6afeb78f1f806ba12a7577bfe8c6fd2f6ba127047ec8546b0513be5516a7420a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
data/lib/omnizip/version.rb
CHANGED