zip_tricks 5.5.0 → 5.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 50ba2d6a0b5bde1cf51443c7ff4228a7e99a1cc1ac843e3ef23c0d197878a04b
4
- data.tar.gz: 5fdb377cc34fd6d9edb4e7932e79ebe28bc2dc91aa71348e386b8b601e4f06f1
3
+ metadata.gz: 39403ce8cb20b4f772e5f44420b91be7e120df38b99de7de2a0db46f318760a8
4
+ data.tar.gz: c1c02357d9e5f322daf6d3ce338092020e753e362b3a70b3caf8d35a782925e8
5
5
  SHA512:
6
- metadata.gz: 4c2ae765d7e6c584632b7606d66b970c100b9679cb6b503209be1179bc9582f83727b13154bfce5281dd8dc105f1f5112d2794df7f97ebb987a1e224f67f4840
7
- data.tar.gz: e06306028f18fe1eb16abe12c48cd93182d11451298cde6068b9ccb37b78846be469b6bd48848507f38f8796b00281f27391589d20d9163b3845cba4112411c5
6
+ metadata.gz: 9b16f5a53ee31ea9f1f5ec1316a62d172c897c510df9f1bb9f7fabe12aafe89e2b4e43f1533a01b5507b9d1a0fe438ee3646c7c10eb1117f8053403796167aad
7
+ data.tar.gz: 3808c09040d549644cb7aba6e8eb4aa0fcbae2123753e406d86db683e4e8d332453112622303be0b8027cff4c43dc60e6678073eb3e7c80cac3359200379210f
@@ -0,0 +1,96 @@
1
+ name: CI
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ env:
8
+ BUNDLE_PATH: vendor/bundle
9
+
10
+ jobs:
11
+ lint:
12
+ name: Code Style
13
+ runs-on: ubuntu-18.04
14
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
15
+ strategy:
16
+ matrix:
17
+ ruby:
18
+ - '2.7'
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@v2
22
+ - name: Setup Ruby
23
+ uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: ${{ matrix.ruby }}
26
+ - name: Gemfile Cache
27
+ uses: actions/cache@v2
28
+ with:
29
+ path: Gemfile.lock
30
+ key: ${{ runner.os }}-gemlock-${{ matrix.ruby }}-${{ hashFiles('Gemfile', 'zip_tricks.gemspec') }}
31
+ restore-keys: |
32
+ ${{ runner.os }}-gemlock-${{ matrix.ruby }}-
33
+ - name: Bundle Cache
34
+ id: cache-gems
35
+ uses: actions/cache@v2
36
+ with:
37
+ path: vendor/bundle
38
+ key: ${{ runner.os }}-gems-${{ matrix.ruby }}-${{ hashFiles('Gemfile', 'Gemfile.lock', 'zip_tricks.gemspec') }}
39
+ restore-keys: |
40
+ ${{ runner.os }}-gems-${{ matrix.ruby }}-
41
+ ${{ runner.os }}-gems-
42
+ - name: Bundle Install
43
+ if: steps.cache-gems.outputs.cache-hit != 'true'
44
+ run: bundle install --jobs 4 --retry 3
45
+ - name: Rubocop Cache
46
+ uses: actions/cache@v2
47
+ with:
48
+ path: ~/.cache/rubocop_cache
49
+ key: ${{ runner.os }}-rubocop-${{ hashFiles('.rubocop.yml') }}
50
+ restore-keys: |
51
+ ${{ runner.os }}-rubocop-
52
+ - name: Rubocop
53
+ run: bundle exec rubocop
54
+ test:
55
+ name: Specs
56
+ runs-on: ubuntu-18.04
57
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
58
+ strategy:
59
+ matrix:
60
+ ruby:
61
+ - '2.7'
62
+ - '2.1'
63
+ - 'jruby-9.2'
64
+ experimental: [false]
65
+ include:
66
+ - ruby: 3.0
67
+ experimental: true
68
+ steps:
69
+ - name: Checkout
70
+ uses: actions/checkout@v2
71
+ - name: Setup Ruby
72
+ uses: ruby/setup-ruby@v1
73
+ with:
74
+ ruby-version: ${{ matrix.ruby }}
75
+ - name: Gemfile Cache
76
+ uses: actions/cache@v2
77
+ with:
78
+ path: Gemfile.lock
79
+ key: ${{ runner.os }}-gemlock-${{ matrix.ruby }}-${{ hashFiles('Gemfile', 'zip_tricks.gemspec') }}
80
+ restore-keys: |
81
+ ${{ runner.os }}-gemlock-${{ matrix.ruby }}-
82
+ - name: Bundle Cache
83
+ id: cache-gems
84
+ uses: actions/cache@v2
85
+ with:
86
+ path: vendor/bundle
87
+ key: ${{ runner.os }}-gems-${{ matrix.ruby }}-${{ hashFiles('Gemfile', 'Gemfile.lock', 'zip_tricks.gemspec') }}
88
+ restore-keys: |
89
+ ${{ runner.os }}-gems-${{ matrix.ruby }}-
90
+ ${{ runner.os }}-gems-
91
+ - name: Bundle Install
92
+ if: steps.cache-gems.outputs.cache-hit != 'true'
93
+ run: bundle install --jobs 4 --retry 3
94
+ - name: RSpec
95
+ continue-on-error: ${{ matrix.experimental }}
96
+ run: bundle exec rspec
data/.gitignore CHANGED
@@ -19,7 +19,7 @@ Gemfile.lock
19
19
  # jeweler generated
20
20
  pkg
21
21
 
22
- # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
22
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
23
23
  #
24
24
  # * Create a file at ~/.gitignore
25
25
  # * Include files you want ignored
@@ -36,6 +36,7 @@ pkg
36
36
 
37
37
  tmp
38
38
  testing/*.zip
39
+ .ruby-version
39
40
 
40
41
  # For TextMate
41
42
  #*.tmproj
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 5.6.0
2
+
3
+ * Add customisable `unix_permissions` to Streamer and ZipWriter. Beware that customising these permissions can lead to the archive failing to expand with some unarchiving applications, and is especially sensitive for directories.
4
+
1
5
  ## 5.5.0
2
6
 
3
7
  * In `OutputEnumerator` apply some amount of buffering to be within a UNIX socket size for metatada writes. This
data/CONTRIBUTING.md CHANGED
@@ -27,7 +27,7 @@ The issue tracker is the preferred channel for [bug reports](#bug-reports),
27
27
  [feature requests](#feature-requests) and [submitting pull
28
28
  requests](#pull-requests), but please respect the following restrictions:
29
29
 
30
- * Please **do not** derail or troll issues. Keep the discussion on topic and respect the opinions of others. Adhere to the principles set out in the [Code of Conduct](https://github.com/WeTransfer/zip_tricks/blob/master/CODE_OF_CONDUCT.md).
30
+ * Please **do not** derail or troll issues. Keep the discussion on topic and respect the opinions of others. Adhere to the principles set out in the [Code of Conduct](https://github.com/WeTransfer/zip_tricks/blob/main/CODE_OF_CONDUCT.md).
31
31
 
32
32
  ## Bug reports
33
33
 
@@ -41,7 +41,7 @@ Guidelines for bug reports:
41
41
  reported.
42
42
 
43
43
  2. **Check if the issue has been fixed** — try to reproduce it using the
44
- latest `master` branch in the repository.
44
+ latest `main` branch in the repository.
45
45
 
46
46
  3. **Isolate the problem** — create a [reduced test
47
47
  case](http://css-tricks.com/reduced-test-cases/) and a live example.
@@ -96,7 +96,7 @@ accurate comments, etc.) and any other requirements (such as test coverage).
96
96
  The project uses Rubocop which can be run using `bundle exec rubocop`. The test
97
97
  suite can be run with `bundle exec rspec`. You are also encouraged to use the
98
98
  script in the `testing` directory to create test files that you can then verify
99
- with various zip/unzip utilities. Further instructions are [here](https://github.com/WeTransfer/zip_tricks/blob/master/testing/README_TESTING.md).
99
+ with various zip/unzip utilities. Further instructions are [here](https://github.com/WeTransfer/zip_tricks/blob/main/testing/README_TESTING.md).
100
100
 
101
101
  Follow this process if you'd like your work considered for inclusion in the
102
102
  project:
@@ -148,4 +148,4 @@ project:
148
148
 
149
149
  **IMPORTANT**: By submitting a patch, you agree to allow the project owner to
150
150
  license your work under the same license as that used by the project, which you
151
- can see by clicking [here](https://github.com/WeTransfer/zip_tricks/blob/master/LICENSE.txt).
151
+ can see by clicking [here](https://github.com/WeTransfer/zip_tricks/blob/main/LICENSE.txt).
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # zip_tricks
2
2
 
3
- [![Build Status](https://travis-ci.org/WeTransfer/zip_tricks.svg?branch=master)](https://travis-ci.org/WeTransfer/zip_tricks)
3
+ [![Build Status](https://travis-ci.org/WeTransfer/zip_tricks.svg?branch=main)](https://travis-ci.org/WeTransfer/zip_tricks)
4
4
  [![Gem Version](https://badge.fury.io/rb/zip_tricks.svg)](https://badge.fury.io/rb/zip_tricks)
5
5
 
6
6
  Allows streaming, non-rewinding ZIP file output from Ruby.
@@ -175,7 +175,7 @@ that have not been formally verified (ours hasn't been).
175
175
 
176
176
  ## Contributing to zip_tricks
177
177
 
178
- * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
178
+ * Check out the latest `main` to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
179
179
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
180
180
  * Fork the project.
181
181
  * Start a feature/bugfix branch.
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Should be included into a Rails controller (together with `ActionController::Live`)
4
- # for easy ZIP output from any action.
3
+ # Should be included into a Rails controller for easy ZIP output from any action.
5
4
  module ZipTricks::RailsStreaming
6
5
  # Opens a {ZipTricks::Streamer} and yields it to the caller. The output of the streamer
7
6
  # gets automatically forwarded to the Rails response stream. When the output completes,
@@ -200,14 +200,16 @@ class ZipTricks::Streamer
200
200
  # @param uncompressed_size [Integer] the size of the entry when uncompressed, in bytes
201
201
  # @param crc32 [Integer] the CRC32 checksum of the entry when uncompressed
202
202
  # @param use_data_descriptor [Boolean] whether the entry body will be followed by a data descriptor
203
+ # @param unix_permissions[Fixnum?] which UNIX permissions to set, normally the default should be used
203
204
  # @return [Integer] the offset the output IO is at after writing the entry header
204
- def add_deflated_entry(filename:, modification_time: Time.now.utc, compressed_size: 0, uncompressed_size: 0, crc32: 0, use_data_descriptor: false)
205
+ def add_deflated_entry(filename:, modification_time: Time.now.utc, compressed_size: 0, uncompressed_size: 0, crc32: 0, unix_permissions: nil, use_data_descriptor: false)
205
206
  add_file_and_write_local_header(filename: filename,
206
207
  modification_time: modification_time,
207
208
  crc32: crc32,
208
209
  storage_mode: DEFLATED,
209
210
  compressed_size: compressed_size,
210
211
  uncompressed_size: uncompressed_size,
212
+ unix_permissions: unix_permissions,
211
213
  use_data_descriptor: use_data_descriptor)
212
214
  @out.tell
213
215
  end
@@ -222,14 +224,16 @@ class ZipTricks::Streamer
222
224
  # @param size [Integer] the size of the file when uncompressed, in bytes
223
225
  # @param crc32 [Integer] the CRC32 checksum of the entry when uncompressed
224
226
  # @param use_data_descriptor [Boolean] whether the entry body will be followed by a data descriptor. When in use
227
+ # @param unix_permissions[Fixnum?] which UNIX permissions to set, normally the default should be used
225
228
  # @return [Integer] the offset the output IO is at after writing the entry header
226
- def add_stored_entry(filename:, modification_time: Time.now.utc, size: 0, crc32: 0, use_data_descriptor: false)
229
+ def add_stored_entry(filename:, modification_time: Time.now.utc, size: 0, crc32: 0, unix_permissions: nil, use_data_descriptor: false)
227
230
  add_file_and_write_local_header(filename: filename,
228
231
  modification_time: modification_time,
229
232
  crc32: crc32,
230
233
  storage_mode: STORED,
231
234
  compressed_size: size,
232
235
  uncompressed_size: size,
236
+ unix_permissions: unix_permissions,
233
237
  use_data_descriptor: use_data_descriptor)
234
238
  @out.tell
235
239
  end
@@ -238,14 +242,16 @@ class ZipTricks::Streamer
238
242
  #
239
243
  # @param dirname [String] the name of the directory in the archive
240
244
  # @param modification_time [Time] the modification time of the directory in the archive
245
+ # @param unix_permissions[Fixnum?] which UNIX permissions to set, normally the default should be used
241
246
  # @return [Integer] the offset the output IO is at after writing the entry header
242
- def add_empty_directory(dirname:, modification_time: Time.now.utc)
247
+ def add_empty_directory(dirname:, modification_time: Time.now.utc, unix_permissions: nil)
243
248
  add_file_and_write_local_header(filename: dirname.to_s + '/',
244
249
  modification_time: modification_time,
245
250
  crc32: 0,
246
251
  storage_mode: STORED,
247
252
  compressed_size: 0,
248
253
  uncompressed_size: 0,
254
+ unix_permissions: unix_permissions,
249
255
  use_data_descriptor: false)
250
256
  @out.tell
251
257
  end
@@ -283,14 +289,16 @@ class ZipTricks::Streamer
283
289
  #
284
290
  # @param filename[String] the name of the file in the archive
285
291
  # @param modification_time [Time] the modification time of the file in the archive
292
+ # @param unix_permissions[Fixnum?] which UNIX permissions to set, normally the default should be used
286
293
  # @yield [#<<, #write] an object that the file contents must be written to that will be automatically closed
287
294
  # @return [#<<, #write, #close] an object that the file contents must be written to, has to be closed manually
288
- def write_stored_file(filename, modification_time: Time.now.utc)
295
+ def write_stored_file(filename, modification_time: Time.now.utc, unix_permissions: nil)
289
296
  add_stored_entry(filename: filename,
290
297
  modification_time: modification_time,
291
298
  use_data_descriptor: true,
292
299
  crc32: 0,
293
- size: 0)
300
+ size: 0,
301
+ unix_permissions: unix_permissions)
294
302
 
295
303
  writable = Writable.new(self, StoredWriter.new(@out))
296
304
  if block_given?
@@ -335,14 +343,16 @@ class ZipTricks::Streamer
335
343
  #
336
344
  # @param filename[String] the name of the file in the archive
337
345
  # @param modification_time [Time] the modification time of the file in the archive
346
+ # @param unix_permissions[Fixnum?] which UNIX permissions to set, normally the default should be used
338
347
  # @yield [#<<, #write] an object that the file contents must be written to
339
- def write_deflated_file(filename, modification_time: Time.now.utc)
348
+ def write_deflated_file(filename, modification_time: Time.now.utc, unix_permissions: nil)
340
349
  add_deflated_entry(filename: filename,
341
350
  modification_time: modification_time,
342
351
  use_data_descriptor: true,
343
352
  crc32: 0,
344
353
  compressed_size: 0,
345
- uncompressed_size: 0)
354
+ uncompressed_size: 0,
355
+ unix_permissions: unix_permissions)
346
356
 
347
357
  writable = Writable.new(self, DeflatedWriter.new(@out))
348
358
  if block_given?
@@ -375,7 +385,8 @@ class ZipTricks::Streamer
375
385
  uncompressed_size: entry.uncompressed_size,
376
386
  mtime: entry.mtime,
377
387
  crc32: entry.crc32,
378
- filename: entry.filename)
388
+ filename: entry.filename,
389
+ unix_permissions: entry.unix_permissions)
379
390
  end
380
391
 
381
392
  # Record the central directory size, for the EOCDR
@@ -462,7 +473,8 @@ EMS
462
473
  storage_mode:,
463
474
  compressed_size:,
464
475
  uncompressed_size:,
465
- use_data_descriptor:)
476
+ use_data_descriptor:,
477
+ unix_permissions:)
466
478
 
467
479
  # Clean backslashes
468
480
  filename = remove_backslash(filename)
@@ -498,7 +510,8 @@ EMS
498
510
  use_data_descriptor,
499
511
  _local_file_header_offset = local_header_starts_at,
500
512
  _bytes_used_for_local_header = 0,
501
- _bytes_used_for_data_descriptor = 0)
513
+ _bytes_used_for_data_descriptor = 0,
514
+ unix_permissions)
502
515
 
503
516
  @writer.write_local_file_header(io: @out,
504
517
  gp_flags: e.gp_flags,
@@ -4,7 +4,7 @@
4
4
  # Normally you will not have to use this class directly
5
5
  class ZipTricks::Streamer::Entry < Struct.new(:filename, :crc32, :compressed_size,
6
6
  :uncompressed_size, :storage_mode, :mtime,
7
- :use_data_descriptor, :local_header_offset, :bytes_used_for_local_header, :bytes_used_for_data_descriptor)
7
+ :use_data_descriptor, :local_header_offset, :bytes_used_for_local_header, :bytes_used_for_data_descriptor, :unix_permissions)
8
8
  def initialize(*)
9
9
  super
10
10
  filename.force_encoding(Encoding::UTF_8)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ZipTricks
4
- VERSION = '5.5.0'
4
+ VERSION = '5.6.0'
5
5
  end
@@ -31,22 +31,10 @@ class ZipTricks::ZipWriter
31
31
  VERSION_MADE_BY = 52
32
32
  VERSION_NEEDED_TO_EXTRACT = 20
33
33
  VERSION_NEEDED_TO_EXTRACT_ZIP64 = 45
34
- DEFAULT_EXTERNAL_ATTRS = begin
35
- # These need to be set so that the unarchived files do not become executable on UNIX, for
36
- # security purposes. Strictly speaking we would want to make this user-customizable,
37
- # but for now just putting in sane defaults will do. For example, Trac with zipinfo does this:
38
- # zipinfo.external_attr = 0644 << 16L # permissions -r-wr--r--.
39
- # We snatch the incantations from Rubyzip for this.
40
- unix_perms = 0o644
41
- file_type_file = 0o10
42
- (file_type_file << 12 | (unix_perms & 0o7777)) << 16
43
- end
44
- EMPTY_DIRECTORY_EXTERNAL_ATTRS = begin
45
- # Applies permissions to an empty directory.
46
- unix_perms = 0o755
47
- file_type_dir = 0o04
48
- (file_type_dir << 12 | (unix_perms & 0o7777)) << 16
49
- end
34
+ DEFAULT_FILE_UNIX_PERMISSIONS = 0o644
35
+ DEFAULT_DIRECTORY_UNIX_PERMISSIONS = 0o755
36
+ FILE_TYPE_FILE = 0o10
37
+ FILE_TYPE_DIRECTORY = 0o04
50
38
  MADE_BY_SIGNATURE = begin
51
39
  # A combination of the VERSION_MADE_BY low byte and the OS type high byte
52
40
  os_type = 3 # UNIX
@@ -64,7 +52,8 @@ class ZipTricks::ZipWriter
64
52
  :VERSION_MADE_BY,
65
53
  :VERSION_NEEDED_TO_EXTRACT,
66
54
  :VERSION_NEEDED_TO_EXTRACT_ZIP64,
67
- :DEFAULT_EXTERNAL_ATTRS,
55
+ :FILE_TYPE_FILE,
56
+ :FILE_TYPE_DIRECTORY,
68
57
  :MADE_BY_SIGNATURE,
69
58
  :C_UINT4,
70
59
  :C_UINT2,
@@ -136,6 +125,7 @@ class ZipTricks::ZipWriter
136
125
  # @param crc32[Fixnum] The CRC32 checksum of the file
137
126
  # @param mtime[Time] the modification time to be recorded in the ZIP
138
127
  # @param gp_flags[Fixnum] bit-packed general purpose flags
128
+ # @param unix_permissions[Fixnum?] the permissions for the file, or nil for the default to be used
139
129
  # @return [void]
140
130
  def write_central_directory_file_header(io:,
141
131
  local_file_header_location:,
@@ -145,7 +135,9 @@ class ZipTricks::ZipWriter
145
135
  uncompressed_size:,
146
136
  mtime:,
147
137
  crc32:,
148
- filename:)
138
+ filename:,
139
+ unix_permissions: nil
140
+ )
149
141
  # At this point if the header begins somewhere beyound 0xFFFFFFFF we _have_ to record the offset
150
142
  # of the local file header as a zip64 extra field, so we give up, give in, you loose, love will always win...
151
143
  add_zip64 = (local_file_header_location > FOUR_BYTE_MAX_UINT) ||
@@ -200,11 +192,15 @@ class ZipTricks::ZipWriter
200
192
 
201
193
  # Because the add_empty_directory method will create a directory with a trailing "/",
202
194
  # this check can be used to assign proper permissions to the created directory.
203
- io << if filename.end_with?('/')
204
- [EMPTY_DIRECTORY_EXTERNAL_ATTRS].pack(C_UINT4)
195
+ # external file attributes 4 bytes
196
+ external_attrs = if filename.end_with?('/')
197
+ unix_permissions ||= DEFAULT_DIRECTORY_UNIX_PERMISSIONS
198
+ generate_external_attrs(unix_permissions, FILE_TYPE_DIRECTORY)
205
199
  else
206
- [DEFAULT_EXTERNAL_ATTRS].pack(C_UINT4) # external file attributes 4 bytes
200
+ unix_permissions ||= DEFAULT_FILE_UNIX_PERMISSIONS
201
+ generate_external_attrs(unix_permissions, FILE_TYPE_FILE)
207
202
  end
203
+ io << [external_attrs].pack(C_UINT4)
208
204
 
209
205
  io << if add_zip64 # relative offset of local header 4 bytes
210
206
  [FOUR_BYTE_MAX_UINT].pack(C_UINT4)
@@ -434,4 +430,8 @@ class ZipTricks::ZipWriter
434
430
  values, packspecs = values_to_packspecs.partition.each_with_index { |_, i| i.even? }
435
431
  values.pack(packspecs.join)
436
432
  end
433
+
434
+ def generate_external_attrs(unix_permissions_int, file_type_int)
435
+ (file_type_int << 12 | (unix_permissions_int & 0o7777)) << 16
436
+ end
437
437
  end
data/zip_tricks.gemspec CHANGED
@@ -5,7 +5,7 @@ require 'zip_tricks/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'zip_tricks'
7
7
  spec.version = ZipTricks::VERSION
8
- spec.authors = ['Julik Tarkhanov', 'Noah Berman', 'Dmitry Tymchuk', 'David Bosveld']
8
+ spec.authors = ['Julik Tarkhanov', 'Noah Berman', 'Dmitry Tymchuk', 'David Bosveld', 'Felix Bünemann']
9
9
  spec.email = ['me@julik.nl']
10
10
 
11
11
  spec.licenses = ['MIT (Hippocratic)']
@@ -32,10 +32,8 @@ Gem::Specification.new do |spec|
32
32
 
33
33
  spec.add_development_dependency 'bundler'
34
34
  spec.add_development_dependency 'rubyzip', '~> 1'
35
- spec.add_development_dependency 'terminal-table'
36
- spec.add_development_dependency 'range_utils'
37
35
 
38
- spec.add_development_dependency 'rack', '~> 1.6' # For Jeweler
36
+ spec.add_development_dependency 'rack', '~> 1.6' # For tests, where we spin up a server
39
37
  spec.add_development_dependency 'rake', '~> 12.2'
40
38
  spec.add_development_dependency 'rspec', '~> 3'
41
39
  spec.add_development_dependency 'complexity_assert'
metadata CHANGED
@@ -1,17 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zip_tricks
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.0
4
+ version: 5.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
8
8
  - Noah Berman
9
9
  - Dmitry Tymchuk
10
10
  - David Bosveld
11
- autorequire:
11
+ - Felix Bünemann
12
+ autorequire:
12
13
  bindir: exe
13
14
  cert_chain: []
14
- date: 2020-11-23 00:00:00.000000000 Z
15
+ date: 2021-06-05 00:00:00.000000000 Z
15
16
  dependencies:
16
17
  - !ruby/object:Gem::Dependency
17
18
  name: bundler
@@ -41,34 +42,6 @@ dependencies:
41
42
  - - "~>"
42
43
  - !ruby/object:Gem::Version
43
44
  version: '1'
44
- - !ruby/object:Gem::Dependency
45
- name: terminal-table
46
- requirement: !ruby/object:Gem::Requirement
47
- requirements:
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: '0'
51
- type: :development
52
- prerelease: false
53
- version_requirements: !ruby/object:Gem::Requirement
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: '0'
58
- - !ruby/object:Gem::Dependency
59
- name: range_utils
60
- requirement: !ruby/object:Gem::Requirement
61
- requirements:
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- version: '0'
65
- type: :development
66
- prerelease: false
67
- version_requirements: !ruby/object:Gem::Requirement
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- version: '0'
72
45
  - !ruby/object:Gem::Dependency
73
46
  name: rack
74
47
  requirement: !ruby/object:Gem::Requirement
@@ -218,10 +191,10 @@ extra_rdoc_files: []
218
191
  files:
219
192
  - ".codeclimate.yml"
220
193
  - ".document"
194
+ - ".github/workflows/ci.yml"
221
195
  - ".gitignore"
222
196
  - ".rspec"
223
197
  - ".rubocop.yml"
224
- - ".travis.yml"
225
198
  - ".yardopts"
226
199
  - CHANGELOG.md
227
200
  - CODE_OF_CONDUCT.md
@@ -268,7 +241,7 @@ licenses:
268
241
  - MIT (Hippocratic)
269
242
  metadata:
270
243
  allowed_push_host: https://rubygems.org
271
- post_install_message:
244
+ post_install_message:
272
245
  rdoc_options: []
273
246
  require_paths:
274
247
  - lib
@@ -284,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
284
257
  version: '0'
285
258
  requirements: []
286
259
  rubygems_version: 3.0.3
287
- signing_key:
260
+ signing_key:
288
261
  specification_version: 4
289
262
  summary: Stream out ZIP files from Ruby
290
263
  test_files: []
data/.travis.yml DELETED
@@ -1,8 +0,0 @@
1
- rvm:
2
- - 2.1.0
3
- - 2.6.5
4
- - jruby-9.0
5
- sudo: false
6
- cache: bundler
7
- script:
8
- - bundle exec rake