doo_dah 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
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.2.1"
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-18}
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",
@@ -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
@@ -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
@@ -2,3 +2,4 @@ require 'doo_dah/dos_time'
2
2
  require 'doo_dah/zip_header'
3
3
  require 'doo_dah/zip_entry'
4
4
  require 'doo_dah/zip_output_stream'
5
+ require 'doo_dah/zip_size_calculator'
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: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 1
10
- version: 0.2.1
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 00:00:00 +10:00
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