Class: Compression::Strategy

Inherits:
Object
  • Object
show all
Defined in:
lib/compression/strategy.rb

Direct Known Subclasses

Gzip, Pipeline, Tar, Zip

Constant Summary collapse

ExtractFailed =
Class.new(StandardError)
DestinationFileExistsError =
Class.new(StandardError)

Instance Method Summary collapse

Instance Method Details

#can_handle?(file_name) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
# File 'lib/compression/strategy.rb', line 8

def can_handle?(file_name)
  file_name.include?(extension)
end

#decompress(dest_path, compressed_file_path, max_size) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/compression/strategy.rb', line 12

def decompress(dest_path, compressed_file_path, max_size)
  sanitized_compressed_file_path = sanitize_path(compressed_file_path)
  sanitized_dest_path = sanitize_path(dest_path)

  get_compressed_file_stream(sanitized_compressed_file_path) do |compressed_file|
    available_size = calculate_available_size(max_size)

    entries_of(compressed_file).each do |entry|
      entry_path = build_entry_path(sanitized_dest_path, entry, sanitized_compressed_file_path)
      next if !is_safe_path_for_extraction?(entry_path, sanitized_dest_path)

      FileUtils.mkdir_p(File.dirname(entry_path))
      if is_file?(entry)
        remaining_size = extract_file(entry, entry_path, available_size)
        available_size = remaining_size
      else
        extract_folder(entry, entry_path)
      end
    end
    decompression_results_path(sanitized_dest_path, sanitized_compressed_file_path)
  end
end