doo_dah 0.2.1 → 0.3.0
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.
- data/VERSION +1 -1
- data/doo_dah.gemspec +3 -2
- data/lib/doo_dah/zip_entry.rb +5 -0
- data/lib/doo_dah/zip_header.rb +34 -0
- data/lib/doo_dah/zip_size_calculator.rb +20 -0
- data/lib/doo_dah.rb +1 -0
- metadata +6 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/doo_dah.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{doo_dah}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Collas"]
|
12
|
-
s.date = %q{2012-06-
|
12
|
+
s.date = %q{2012-06-22}
|
13
13
|
s.description = %q{ This gem creates zip files using the STORE method - i.e. with no compression. This enables the generation of
|
14
14
|
zip files with a known size from streamed data, providing the size of the input files is known.
|
15
15
|
}
|
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
"lib/doo_dah/zip_entry.rb",
|
31
31
|
"lib/doo_dah/zip_header.rb",
|
32
32
|
"lib/doo_dah/zip_output_stream.rb",
|
33
|
+
"lib/doo_dah/zip_size_calculator.rb",
|
33
34
|
"spec/central_directory_spec.rb",
|
34
35
|
"spec/dos_time_spec.rb",
|
35
36
|
"spec/local_directory_header_spec.rb",
|
data/lib/doo_dah/zip_entry.rb
CHANGED
@@ -5,6 +5,11 @@ module DooDah
|
|
5
5
|
class ZipEntry
|
6
6
|
include LocalDirectoryHeader
|
7
7
|
include CentralDirectoryHeader
|
8
|
+
|
9
|
+
def self.overhead(name, size=0, crc=0)
|
10
|
+
LocalDirectoryHeader.local_header_size(name) + ((size == 0 || crc == 0) ? LocalDirectoryHeader.local_footer_size : 0) +
|
11
|
+
CentralDirectoryHeader.central_header_size(name)
|
12
|
+
end
|
8
13
|
|
9
14
|
attr_reader :name, :closed
|
10
15
|
alias_method :closed?, :closed
|
data/lib/doo_dah/zip_header.rb
CHANGED
@@ -23,9 +23,15 @@ module DooDah
|
|
23
23
|
end
|
24
24
|
|
25
25
|
module ZipHeader
|
26
|
+
|
27
|
+
def self.signature_size
|
28
|
+
4
|
29
|
+
end
|
30
|
+
|
26
31
|
def write_signature(signature)
|
27
32
|
write([signature].pack('V'))
|
28
33
|
end
|
34
|
+
|
29
35
|
end
|
30
36
|
|
31
37
|
module ZipEntryHeader
|
@@ -42,6 +48,14 @@ module DooDah
|
|
42
48
|
VERSION_NEEDED_TO_EXTRACT = 10
|
43
49
|
GP_FLAGS_CRC_UNKNOWN = 0x0008
|
44
50
|
GP_FLAGS_UTF8 = 0x0800
|
51
|
+
|
52
|
+
def self.common_header_size
|
53
|
+
14 + 12
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.name_size(name)
|
57
|
+
name.length
|
58
|
+
end
|
45
59
|
|
46
60
|
def write_common_header()
|
47
61
|
flags = GP_FLAGS_UTF8
|
@@ -72,6 +86,14 @@ module DooDah
|
|
72
86
|
|
73
87
|
module LocalDirectoryHeader
|
74
88
|
include ZipEntryHeader
|
89
|
+
|
90
|
+
def self.local_header_size(name)
|
91
|
+
ZipHeader.signature_size + ZipEntryHeader.common_header_size + ZipEntryHeader.name_size(name)
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.local_footer_size
|
95
|
+
ZipHeader.signature_size + 12
|
96
|
+
end
|
75
97
|
|
76
98
|
def write_local_header
|
77
99
|
self.local_header_offset = current_offset
|
@@ -89,6 +111,18 @@ module DooDah
|
|
89
111
|
|
90
112
|
module CentralDirectoryHeader
|
91
113
|
include ZipEntryHeader
|
114
|
+
|
115
|
+
def self.central_header_size(name)
|
116
|
+
ZipHeader.signature_size + version_made_by_size + ZipEntryHeader.common_header_size + 6 + 8 + ZipEntryHeader.name_size(name)
|
117
|
+
end
|
118
|
+
|
119
|
+
def self.end_of_central_directory_size
|
120
|
+
ZipHeader.signature_size + 10 + 8
|
121
|
+
end
|
122
|
+
|
123
|
+
def self.version_made_by_size
|
124
|
+
2
|
125
|
+
end
|
92
126
|
|
93
127
|
def write_central_header
|
94
128
|
write_signature(CENTRAL_ENTRY_HEADER_SIGNATURE)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module DooDah
|
2
|
+
|
3
|
+
class ZipSizeCalculator
|
4
|
+
|
5
|
+
attr_accessor :size, :overhead
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@overhead = CentralDirectoryHeader.end_of_central_directory_size
|
9
|
+
@size = @overhead
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_file(name, size=0, crc=0)
|
13
|
+
new_overhead = ZipEntry.overhead(name, size, crc)
|
14
|
+
@overhead += new_overhead
|
15
|
+
@size += (size + new_overhead)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/lib/doo_dah.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: doo_dah
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Collas
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-06-
|
18
|
+
date: 2012-06-22 00:00:00 +10:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -87,6 +87,7 @@ files:
|
|
87
87
|
- lib/doo_dah/zip_entry.rb
|
88
88
|
- lib/doo_dah/zip_header.rb
|
89
89
|
- lib/doo_dah/zip_output_stream.rb
|
90
|
+
- lib/doo_dah/zip_size_calculator.rb
|
90
91
|
- spec/central_directory_spec.rb
|
91
92
|
- spec/dos_time_spec.rb
|
92
93
|
- spec/local_directory_header_spec.rb
|