Class: Harbor::ZippedIO

Inherits:
Object
  • Object
show all
Defined in:
lib/harbor/zipped_io.rb

Overview

An IO class for zipping files suitable for sending via rack.

Defined Under Namespace

Classes: Deflater, ZipCentralDirectory, ZipEntry

Constant Summary collapse

CENTRAL_DIRECTORY_ENTRY_SIGNATURE =
0x02014b50
END_OF_CENTRAL_DIRECTORY_SIGNATURE =
0x06054b50
@@block_size =
4096

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(files) ⇒ ZippedIO

Returns a new instance of ZippedIO.


11
12
13
# File 'lib/harbor/zipped_io.rb', line 11

def initialize(files)
  @files = files
end

Class Method Details

.block_sizeObject


53
54
55
# File 'lib/harbor/zipped_io.rb', line 53

def self.block_size
  @@block_size
end

.block_size=(value) ⇒ Object


57
58
59
# File 'lib/harbor/zipped_io.rb', line 57

def self.block_size=(value)
  @@block_size = value
end

Instance Method Details

#eachObject


15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/harbor/zipped_io.rb', line 15

def each
  zip_entries.each do |entry|
    yield entry.read_local_entry

    deflater = Deflater.new(entry.file)
    deflater.read do |data|
      yield data
    end
  end

  zip_central_directory.read do |data|
    yield data
  end
end

#sizeObject


30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/harbor/zipped_io.rb', line 30

def size
  return @size if @size
  @size = 0
  zip_entries.each do |entry|
    @size += entry.size 
  end
  @files.each do |file|
    @size += ZippedIO::Deflater.new(file).size
  end
  @size += zip_central_directory.size
  @size
end

#zip_central_directoryObject


43
44
45
# File 'lib/harbor/zipped_io.rb', line 43

def zip_central_directory
  @zip_central_directory ||= ZipCentralDirectory.new(zip_entries)
end

#zip_entriesObject


47
48
49
# File 'lib/harbor/zipped_io.rb', line 47

def zip_entries
  @zip_entries ||= @files.map { |file| ZipEntry.new(file) }
end