Class: Omnizip::Formats::Rar::VolumeManager
- Inherits:
-
Object
- Object
- Omnizip::Formats::Rar::VolumeManager
- Defined in:
- lib/omnizip/formats/rar/volume_manager.rb
Overview
Manages multi-volume RAR archives Handles volume detection, sequencing, and coordination
Instance Attribute Summary collapse
-
#base_path ⇒ Object
readonly
Returns the value of attribute base_path.
-
#volumes ⇒ Object
readonly
Returns the value of attribute volumes.
Instance Method Summary collapse
-
#first_volume ⇒ Models::RarVolume?
Get first volume.
-
#initialize(path) ⇒ VolumeManager
constructor
Initialize volume manager.
-
#last_volume ⇒ Models::RarVolume?
Get last volume.
-
#multi_volume? ⇒ Boolean
Check if this is a multi-volume archive.
-
#recovery_files ⇒ Array<String>
Get recovery files for volumes.
-
#valid_sequence? ⇒ Boolean
Validate volume sequence.
-
#volume_at(number) ⇒ Models::RarVolume?
Get volume by number.
-
#volume_count ⇒ Integer
Get total number of volumes.
-
#volume_paths ⇒ Array<String>
Get all volume paths.
Constructor Details
#initialize(path) ⇒ VolumeManager
Initialize volume manager
14 15 16 17 18 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 14 def initialize(path) @base_path = path @volumes = [] detect_volumes end |
Instance Attribute Details
#base_path ⇒ Object (readonly)
Returns the value of attribute base_path.
9 10 11 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 9 def base_path @base_path end |
#volumes ⇒ Object (readonly)
Returns the value of attribute volumes.
9 10 11 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 9 def volumes @volumes end |
Instance Method Details
#first_volume ⇒ Models::RarVolume?
Get first volume
37 38 39 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 37 def first_volume @volumes.find(&:first?) end |
#last_volume ⇒ Models::RarVolume?
Get last volume
44 45 46 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 44 def last_volume @volumes.find(&:last?) end |
#multi_volume? ⇒ Boolean
Check if this is a multi-volume archive
30 31 32 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 30 def multi_volume? @volumes.size > 1 end |
#recovery_files ⇒ Array<String>
Get recovery files for volumes
66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 66 def recovery_files rev_files = [] @volumes.each do |volume| # Check for .rev file for this volume rev_path = "#{volume.path}.rev" rev_files << rev_path if File.exist?(rev_path) end rev_files end |
#valid_sequence? ⇒ Boolean
Validate volume sequence
81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 81 def valid_sequence? return true unless multi_volume? # Check all volumes exist return false unless @volumes.all?(&:exist?) # Check sequence is continuous expected_numbers = (0...@volumes.size).to_a actual_numbers = @volumes.map(&:volume_number).sort expected_numbers == actual_numbers end |
#volume_at(number) ⇒ Models::RarVolume?
Get volume by number
52 53 54 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 52 def volume_at(number) @volumes.find { |v| v.volume_number == number } end |
#volume_count ⇒ Integer
Get total number of volumes
23 24 25 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 23 def volume_count @volumes.size end |
#volume_paths ⇒ Array<String>
Get all volume paths
59 60 61 |
# File 'lib/omnizip/formats/rar/volume_manager.rb', line 59 def volume_paths @volumes.map(&:path) end |