archive_r_ruby 0.1.2 → 0.1.4

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +77 -77
  3. data/README.md +103 -103
  4. data/ext/archive_r/Makefile +273 -0
  5. data/ext/archive_r/archive_r-x64-mingw-ucrt.def +2 -0
  6. data/ext/archive_r/archive_r_ext.cc +1106 -1106
  7. data/ext/archive_r/archive_r_ext.o +0 -0
  8. data/ext/archive_r/extconf.rb +120 -90
  9. data/ext/archive_r/mkmf.log +40 -0
  10. data/ext/archive_r/vendor/archive_r/LICENSE.txt +77 -77
  11. data/ext/archive_r/vendor/archive_r/include/archive_r/data_stream.h +52 -41
  12. data/ext/archive_r/vendor/archive_r/include/archive_r/entry.h +166 -161
  13. data/ext/archive_r/vendor/archive_r/include/archive_r/entry_fault.h +34 -34
  14. data/ext/archive_r/vendor/archive_r/include/archive_r/entry_metadata.h +56 -56
  15. data/ext/archive_r/vendor/archive_r/include/archive_r/multi_volume_stream_base.h +46 -46
  16. data/ext/archive_r/vendor/archive_r/include/archive_r/path_hierarchy.h +109 -109
  17. data/ext/archive_r/vendor/archive_r/include/archive_r/path_hierarchy_utils.h +37 -37
  18. data/ext/archive_r/vendor/archive_r/include/archive_r/platform_compat.h +19 -0
  19. data/ext/archive_r/vendor/archive_r/include/archive_r/traverser.h +122 -122
  20. data/ext/archive_r/vendor/archive_r/src/archive_stack_cursor.cc +330 -330
  21. data/ext/archive_r/vendor/archive_r/src/archive_stack_cursor.h +97 -98
  22. data/ext/archive_r/vendor/archive_r/src/archive_stack_orchestrator.cc +162 -162
  23. data/ext/archive_r/vendor/archive_r/src/archive_stack_orchestrator.h +54 -54
  24. data/ext/archive_r/vendor/archive_r/src/archive_type.cc +552 -552
  25. data/ext/archive_r/vendor/archive_r/src/archive_type.h +77 -76
  26. data/ext/archive_r/vendor/archive_r/src/data_stream.cc +35 -35
  27. data/ext/archive_r/vendor/archive_r/src/entry.cc +253 -253
  28. data/ext/archive_r/vendor/archive_r/src/entry_fault.cc +26 -26
  29. data/ext/archive_r/vendor/archive_r/src/entry_fault_error.cc +54 -54
  30. data/ext/archive_r/vendor/archive_r/src/entry_fault_error.h +32 -32
  31. data/ext/archive_r/vendor/archive_r/src/entry_impl.h +57 -58
  32. data/ext/archive_r/vendor/archive_r/src/multi_volume_manager.cc +81 -81
  33. data/ext/archive_r/vendor/archive_r/src/multi_volume_manager.h +41 -41
  34. data/ext/archive_r/vendor/archive_r/src/multi_volume_stream_base.cc +199 -199
  35. data/ext/archive_r/vendor/archive_r/src/path_hierarchy.cc +151 -151
  36. data/ext/archive_r/vendor/archive_r/src/path_hierarchy_utils.cc +304 -304
  37. data/ext/archive_r/vendor/archive_r/src/simple_profiler.h +120 -120
  38. data/ext/archive_r/vendor/archive_r/src/system_file_stream.cc +295 -263
  39. data/ext/archive_r/vendor/archive_r/src/system_file_stream.h +46 -46
  40. data/ext/archive_r/vendor/archive_r/src/traverser.cc +314 -314
  41. data/lib/archive_r.rb +105 -80
  42. metadata +8 -3
data/lib/archive_r.rb CHANGED
@@ -1,80 +1,105 @@
1
- # SPDX-License-Identifier: MIT
2
- # Copyright (c) 2025 archive_r Team
3
-
4
- begin
5
- # Prefer the packaged gem layout (lib/archive_r/archive_r.so)
6
- require_relative 'archive_r/archive_r'
7
- rescue LoadError
8
- # Fallback to the local development layout (bindings/ruby/archive_r.so)
9
- require_relative '../archive_r'
10
- end
11
-
12
- module Archive_r
13
- VERSION = "0.1.2"
14
- # Common archive formats excluding libarchive's mtree/raw pseudo formats
15
- STANDARD_FORMATS = %w[
16
- 7zip ar cab cpio empty iso9660 lha rar tar warc xar zip
17
- ].freeze
18
-
19
- def self.normalize_options(opts = nil)
20
- options =
21
- case opts
22
- when nil
23
- {}
24
- when Hash
25
- opts.dup
26
- else
27
- opts.to_hash.dup
28
- end
29
-
30
- options[:formats] = STANDARD_FORMATS unless options.key?(:formats)
31
- options
32
- end
33
-
34
- def self.traverse(paths, **opts, &block)
35
- options = normalize_options(opts)
36
-
37
- if block
38
- Traverser.open(paths, options) { |traverser| traverser.each(&block) }
39
- else
40
- Traverser.new(paths, options).each
41
- end
42
- end
43
-
44
- class Entry
45
- # Additional helper methods can be added here
46
-
47
- def to_s
48
- path
49
- end
50
-
51
- def inspect
52
- "#<Archive_r::Entry path=#{path.inspect} size=#{size} depth=#{depth}>"
53
- end
54
- end
55
-
56
- class Traverser
57
- # Additional helper methods can be added here
58
-
59
- class << self
60
- alias_method :__archive_r_c_open, :open
61
-
62
- def open(paths, opts = nil, &block)
63
- __archive_r_c_open(paths, Archive_r.normalize_options(opts), &block)
64
- end
65
- end
66
-
67
- alias_method :__archive_r_c_initialize, :initialize
68
-
69
- def initialize(paths, opts = nil)
70
- __archive_r_c_initialize(paths, Archive_r.normalize_options(opts))
71
- end
72
-
73
- # Count entries
74
- def count
75
- n = 0
76
- each { |entry| n += 1 }
77
- n
78
- end
79
- end
80
- end
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2025 archive_r Team
3
+
4
+ begin
5
+ # Windows/MSVC specific: Ensure dependent DLLs (like libarchive.dll) are found.
6
+ # If LIBARCHIVE_ROOT is set, add its bin directory to the DLL search path.
7
+ if RUBY_PLATFORM =~ /mswin|mingw|cygwin/
8
+ if ENV['LIBARCHIVE_ROOT']
9
+ bin_dir = File.join(ENV['LIBARCHIVE_ROOT'], 'bin')
10
+ if Dir.exist?(bin_dir)
11
+ if defined?(RubyInstaller::Runtime)
12
+ RubyInstaller::Runtime.add_dll_directory(bin_dir)
13
+ else
14
+ ENV['PATH'] = "#{bin_dir};#{ENV['PATH']}"
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ # Prefer the packaged gem layout (lib/archive_r/archive_r.so)
21
+ require_relative 'archive_r/archive_r'
22
+ rescue LoadError
23
+ begin
24
+ # Fallback to the local development layout (bindings/ruby/archive_r.so)
25
+ require_relative '../archive_r'
26
+ rescue LoadError
27
+ begin
28
+ # Fallback for Windows/MinGW where extension might be directly in lib/ or current dir
29
+ require 'archive_r/archive_r'
30
+ rescue LoadError
31
+ # Last resort: try requiring without directory prefix (common in some Windows setups)
32
+ require 'archive_r'
33
+ end
34
+ end
35
+ end
36
+
37
+ module Archive_r
38
+ VERSION = "0.1.3"
39
+ # Common archive formats excluding libarchive's mtree/raw pseudo formats
40
+ STANDARD_FORMATS = %w[
41
+ 7zip ar cab cpio empty iso9660 lha rar tar warc xar zip
42
+ ].freeze
43
+
44
+ def self.normalize_options(opts = nil)
45
+ options =
46
+ case opts
47
+ when nil
48
+ {}
49
+ when Hash
50
+ opts.dup
51
+ else
52
+ opts.to_hash.dup
53
+ end
54
+
55
+ options[:formats] = STANDARD_FORMATS unless options.key?(:formats)
56
+ options
57
+ end
58
+
59
+ def self.traverse(paths, **opts, &block)
60
+ options = normalize_options(opts)
61
+
62
+ if block
63
+ Traverser.open(paths, options) { |traverser| traverser.each(&block) }
64
+ else
65
+ Traverser.new(paths, options).each
66
+ end
67
+ end
68
+
69
+ class Entry
70
+ # Additional helper methods can be added here
71
+
72
+ def to_s
73
+ path
74
+ end
75
+
76
+ def inspect
77
+ "#<Archive_r::Entry path=#{path.inspect} size=#{size} depth=#{depth}>"
78
+ end
79
+ end
80
+
81
+ class Traverser
82
+ # Additional helper methods can be added here
83
+
84
+ class << self
85
+ alias_method :__archive_r_c_open, :open
86
+
87
+ def open(paths, opts = nil, &block)
88
+ __archive_r_c_open(paths, Archive_r.normalize_options(opts), &block)
89
+ end
90
+ end
91
+
92
+ alias_method :__archive_r_c_initialize, :initialize
93
+
94
+ def initialize(paths, opts = nil)
95
+ __archive_r_c_initialize(paths, Archive_r.normalize_options(opts))
96
+ end
97
+
98
+ # Count entries
99
+ def count
100
+ n = 0
101
+ each { |entry| n += 1 }
102
+ n
103
+ end
104
+ end
105
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: archive_r_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - raizo.tcs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-12-02 00:00:00.000000000 Z
11
+ date: 2025-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -49,8 +49,12 @@ extra_rdoc_files: []
49
49
  files:
50
50
  - LICENSE.txt
51
51
  - README.md
52
+ - ext/archive_r/Makefile
53
+ - ext/archive_r/archive_r-x64-mingw-ucrt.def
52
54
  - ext/archive_r/archive_r_ext.cc
55
+ - ext/archive_r/archive_r_ext.o
53
56
  - ext/archive_r/extconf.rb
57
+ - ext/archive_r/mkmf.log
54
58
  - ext/archive_r/vendor/archive_r/LICENSE.txt
55
59
  - ext/archive_r/vendor/archive_r/include/archive_r/data_stream.h
56
60
  - ext/archive_r/vendor/archive_r/include/archive_r/entry.h
@@ -59,6 +63,7 @@ files:
59
63
  - ext/archive_r/vendor/archive_r/include/archive_r/multi_volume_stream_base.h
60
64
  - ext/archive_r/vendor/archive_r/include/archive_r/path_hierarchy.h
61
65
  - ext/archive_r/vendor/archive_r/include/archive_r/path_hierarchy_utils.h
66
+ - ext/archive_r/vendor/archive_r/include/archive_r/platform_compat.h
62
67
  - ext/archive_r/vendor/archive_r/include/archive_r/traverser.h
63
68
  - ext/archive_r/vendor/archive_r/src/archive_stack_cursor.cc
64
69
  - ext/archive_r/vendor/archive_r/src/archive_stack_cursor.h
@@ -105,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
110
  - !ruby/object:Gem::Version
106
111
  version: '0'
107
112
  requirements: []
108
- rubygems_version: 3.4.20
113
+ rubygems_version: 3.4.19
109
114
  signing_key:
110
115
  specification_version: 4
111
116
  summary: Ruby bindings for archive_r that traverse nested archives without temp extraction