zip_tricks 4.7.3 → 4.7.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -1
- data/CHANGELOG.md +5 -0
- data/LICENSE.txt +1 -1
- data/README.md +12 -6
- data/lib/zip_tricks/stream_crc32.rb +14 -1
- data/lib/zip_tricks/version.rb +1 -1
- data/lib/zip_tricks/write_buffer.rb +2 -0
- data/zip_tricks.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1119a96243d5da6b423a2a3c992efc6fbb580fa
|
4
|
+
data.tar.gz: 63a1d0b2c93e5b231568e83efb60220862c07b7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89c7300a0c3af8ceb0408d2c4315fc62e4abf5fecc53ca93219bf9ce30c146d9cc8bca193d35908f1d24516bc1298c12332850ff0352dd561ed67a56a6fe7211
|
7
|
+
data.tar.gz: 20cdfca60a6ac3cc5beaa57bf74dba06bd09ef18931931ddead388de68e6316650e4aad14fe96b7838b415babaafe9f8aa72ca5a9ccd547eb535f3e6f27901f4
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -30,7 +30,7 @@ The easiest is to use the Rails' built-in streaming feature:
|
|
30
30
|
class ZipsController < ActionController::Base
|
31
31
|
include ActionController::Live # required for streaming
|
32
32
|
include ZipTricks::RailsStreaming
|
33
|
-
|
33
|
+
|
34
34
|
def download
|
35
35
|
zip_tricks_stream do |zip|
|
36
36
|
zip.write_deflated_file('report1.csv') do |sink|
|
@@ -122,10 +122,10 @@ ZipTricks::Streamer.open(io) do | zip |
|
|
122
122
|
# raw_file is written "as is" (STORED mode).
|
123
123
|
# Write the local file header first..
|
124
124
|
zip.add_stored_entry(filename: "first-file.bin", size: raw_file.size, crc32: raw_file_crc32)
|
125
|
-
|
125
|
+
|
126
126
|
# then send the actual file contents bypassing the Streamer interface
|
127
127
|
io.sendfile(my_temp_file)
|
128
|
-
|
128
|
+
|
129
129
|
# ...and then adjust the ZIP offsets within the Streamer
|
130
130
|
zip.simulate_write(my_temp_file.size)
|
131
131
|
end
|
@@ -143,7 +143,7 @@ It is slightly more convenient for the purpose than using the raw Zlib library f
|
|
143
143
|
|
144
144
|
```ruby
|
145
145
|
crc = ZipTricks::StreamCRC32.new
|
146
|
-
crc <<
|
146
|
+
crc << next_chunk_of_data
|
147
147
|
...
|
148
148
|
|
149
149
|
crc.to_i # Returns the actual CRC32 value computed so far
|
@@ -152,6 +152,12 @@ crc.to_i # Returns the actual CRC32 value computed so far
|
|
152
152
|
crc.append(precomputed_crc32, size_of_the_blob_computed_from)
|
153
153
|
```
|
154
154
|
|
155
|
+
You can also compute the CRC32 for an entire IO object if it responds to `#eof?`:
|
156
|
+
|
157
|
+
```ruby
|
158
|
+
crc = ZipTricks::StreamCRC32.from_io(file) # Returns an Integer
|
159
|
+
```
|
160
|
+
|
155
161
|
## Reading ZIP files
|
156
162
|
|
157
163
|
The library contains a reader module, play with it to see what is possible. It is not a complete ZIP reader
|
@@ -160,7 +166,7 @@ as such it performs it's function quite well. Please beware of the security impl
|
|
160
166
|
that have not been formally verified (ours hasn't been).
|
161
167
|
|
162
168
|
## Contributing to zip_tricks
|
163
|
-
|
169
|
+
|
164
170
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
165
171
|
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
|
166
172
|
* Fork the project.
|
@@ -172,4 +178,4 @@ that have not been formally verified (ours hasn't been).
|
|
172
178
|
|
173
179
|
## Copyright
|
174
180
|
|
175
|
-
Copyright (c)
|
181
|
+
Copyright (c) 2019 WeTransfer. See LICENSE.txt for further details.
|
@@ -2,13 +2,26 @@
|
|
2
2
|
|
3
3
|
# A simple stateful class for keeping track of a CRC32 value through multiple writes
|
4
4
|
class ZipTricks::StreamCRC32
|
5
|
+
STRINGS_HAVE_CAPACITY_SUPPORT = begin
|
6
|
+
String.new('', capacity: 1)
|
7
|
+
true
|
8
|
+
rescue ArgumentError
|
9
|
+
false
|
10
|
+
end
|
11
|
+
CRC_BUF_SIZE = 1024 * 512
|
12
|
+
private_constant :STRINGS_HAVE_CAPACITY_SUPPORT, :CRC_BUF_SIZE
|
13
|
+
|
5
14
|
# Compute a CRC32 value from an IO object. The object should respond to `read` and `eof?`
|
6
15
|
#
|
7
16
|
# @param io[IO] the IO to read the data from
|
8
17
|
# @return [Fixnum] the computed CRC32 value
|
9
18
|
def self.from_io(io)
|
19
|
+
# If we can specify the string capacity upfront we will not have to resize
|
20
|
+
# the string during operation. This saves time but is only available on
|
21
|
+
# recent Ruby 2.x versions.
|
22
|
+
blob = STRINGS_HAVE_CAPACITY_SUPPORT ? String.new('', capacity: CRC_BUF_SIZE) : String.new('')
|
10
23
|
crc = new
|
11
|
-
crc << io.read(
|
24
|
+
crc << io.read(CRC_BUF_SIZE, blob) until io.eof?
|
12
25
|
crc.to_i
|
13
26
|
end
|
14
27
|
|
data/lib/zip_tricks/version.rb
CHANGED
data/zip_tricks.gemspec
CHANGED
@@ -40,6 +40,7 @@ Gem::Specification.new do |spec|
|
|
40
40
|
spec.add_development_dependency 'complexity_assert'
|
41
41
|
spec.add_development_dependency 'coderay'
|
42
42
|
spec.add_development_dependency 'benchmark-ips'
|
43
|
+
spec.add_development_dependency 'allocation_stats', '~> 0.1.5'
|
43
44
|
spec.add_development_dependency 'yard', '~> 0.9'
|
44
45
|
spec.add_development_dependency 'wetransfer_style', '0.6.0'
|
45
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zip_tricks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.7.
|
4
|
+
version: 4.7.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julik Tarkhanov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -150,6 +150,20 @@ dependencies:
|
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: allocation_stats
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 0.1.5
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 0.1.5
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: yard
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|