ngzip 1.0.7 → 1.1.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
- SHA1:
3
- metadata.gz: e20636d23b8e7ba30af726b7a530f96f31eb636a
4
- data.tar.gz: ed999e168b1c77b6942cb2cb6f118a5a936fe434
2
+ SHA256:
3
+ metadata.gz: 84899280f348b240160b5c6984b7a4130a7a48f71b9c7d903051f99a36326f09
4
+ data.tar.gz: 1b1b057b9da9d80900035e732ed586b13c9e5a25659b4b9ac226862f7d6782b4
5
5
  SHA512:
6
- metadata.gz: 70d66540ec58ff16e08321b26b998e303c765f3aaa057f58e9956cd5922c1e39869ce1c2d75b5a5db01952a91089661470fca66bc069fe0d540b15e60c9743fc
7
- data.tar.gz: 769e82edd41c5029b2eef0be5dbc89fcdaaae0f5b2570902cbe3bc71b601d3145dde48b86bfebfe4839d785d4aece3a8b62fd74d7ae079cc1d5ba1d7bed882d6
6
+ metadata.gz: 6f5b599664e6b4f49de86596596ae5bdae4f9ab8601c260e58e075c6376d6a37c5aa25a441baa971cf590a1b11d218e675369e67140ca9076df197fc2c62aeaa
7
+ data.tar.gz: 815fb0735456a2020781276b456c47e8e76d567e2ef8b35bcd65856e38913c55e00c717cb1a0ced8da4f8e39d1d9febf9deec9645dcb9d2bf4de2790520ddee1
data/Gemfile CHANGED
@@ -1,4 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in ngzip.gemspec
6
+ group :test do
7
+ gem 'minitest'
8
+ gem 'minitest-reporters'
9
+ gem 'pry'
10
+ end
11
+
4
12
  gemspec
data/Rakefile CHANGED
@@ -1,11 +1,13 @@
1
- require "bundler/gem_tasks"
1
+ # frozen_string_literal: true
2
2
 
3
- require "rake/testtask"
3
+ require 'bundler/gem_tasks'
4
+
5
+ require 'rake/testtask'
4
6
 
5
7
  Rake::TestTask.new do |t|
6
8
  t.libs << 'lib'
7
9
  t.test_files = FileList['test/lib/ngzip/*_test.rb']
8
10
  t.verbose = true
9
11
  end
10
-
11
- task :default => :test
12
+
13
+ task default: :test
@@ -1,8 +1,11 @@
1
- require "ngzip/version"
2
- require "ngzip/builder"
1
+ # frozen_string_literal: true
3
2
 
3
+ require 'ngzip/version'
4
+ require 'ngzip/builder'
5
+
6
+ # Ngzip module
4
7
  module Ngzip
5
8
  def self.build(files, options)
6
- Ngzip::Builder.new().build(files, options)
9
+ Ngzip::Builder.new.build(files, options)
7
10
  end
8
11
  end
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'zlib'
2
4
  require 'uri'
5
+ require 'erb'
3
6
 
4
7
  module Ngzip
8
+ # The manifest builder based on the file list
5
9
  class Builder
6
10
  BUFFER_SIZE = 8 * 1024
7
11
 
@@ -13,22 +17,25 @@ module Ngzip
13
17
  # Returns a line for each file separated by \n
14
18
  #
15
19
  # The following options are available:
16
- # :crc => Enable or disable CRC-32 checksums
17
- # :crc_cache => Allows for provided cached CRC-32 checksums in a hash where the key is the file path
18
- # :base_dir => Use this as root for the relative pathes in the archive, keep all directories below
20
+ # crc: Enable or disable CRC-32 checksums
21
+ # crc_cache: Allows for provided cached CRC-32 checksums in a hash where the key is the file path
22
+ # base_dir: Use this as root for the relative pathes in the archive, keep all directories below
19
23
  def build(files, options = {})
20
- settings = {:crc => true}
24
+ settings = { crc: true }
21
25
  settings.merge! options
22
26
 
23
27
  list = file_list(files)
24
28
  prefix = options[:base_dir] || detect_common_prefix(list)
25
29
  prefix += '/' unless prefix.end_with?('/')
26
30
  list.map do |f|
27
- sprintf('%s %d %s %s',
28
- compute_crc32(f, settings),
29
- File.size(f).to_i,
30
- Builder.encode(f),
31
- f.gsub(prefix, '')
31
+ format(
32
+ '%<crc>s %<size>d %<url>s %<name>s',
33
+ {
34
+ crc: compute_crc32(f, settings),
35
+ size: File.size(f).to_i,
36
+ url: Builder.encode(f),
37
+ name: f.gsub(prefix, '')
38
+ }
32
39
  )
33
40
  end.join("\n")
34
41
  end
@@ -36,15 +43,15 @@ module Ngzip
36
43
  # Public: Get the special header to signal the mod_zip
37
44
  #
38
45
  # Returns the header as a string "key: value"
39
- def header()
40
- "X-Archive-Files: zip"
46
+ def header
47
+ 'X-Archive-Files: zip'
41
48
  end
42
49
 
43
50
  # Public: Encode the string
44
51
  #
45
52
  # Returns the encoded string using URL escape formatting
46
53
  def self.encode(string)
47
- URI.encode(string).gsub('+', '%2B').gsub('?', '%3F')
54
+ ERB::Util.url_encode(string)
48
55
  end
49
56
 
50
57
  private
@@ -55,16 +62,17 @@ module Ngzip
55
62
  #
56
63
  # Returns a common prefix
57
64
  def detect_common_prefix(list)
58
- if list.size == 1
59
- return File.dirname(list.first)
60
- end
61
- prefix = ''
62
- min, max = list.sort.values_at(0, -1)
65
+ return File.dirname(list.first) if list.size == 1
66
+
67
+ prefix = StringIO.new
68
+ excluding_file_names = list.map { |p| File.dirname p }
69
+ min, max = excluding_file_names.sort.values_at(0, -1)
63
70
  min.split(//).each_with_index do |c, i|
64
71
  break if c != max[i, 1]
72
+
65
73
  prefix << c
66
74
  end
67
- prefix
75
+ prefix.string
68
76
  end
69
77
 
70
78
  # Internal: Compute the file list by expanding directories
@@ -72,7 +80,9 @@ module Ngzip
72
80
  def file_list(files)
73
81
  Array(files).map do |e|
74
82
  if File.directory?(e)
75
- Dir.glob("#{e}/**/*").reject { |f| File.directory?(f) }
83
+ # `expand_path` removes any trailing slash from the path string
84
+ sanitized_path = File.expand_path(e)
85
+ Dir.glob("#{sanitized_path}/**/*").reject { |f| File.directory?(f) }
76
86
  else
77
87
  e
78
88
  end
@@ -80,7 +90,7 @@ module Ngzip
80
90
  end
81
91
 
82
92
  # Internal: Compute the CRC-32 checksum for a file unless the settings
83
- # disable the computation (:crc => false) and this method returns "-"
93
+ # disable the computation (crc: false) and this method returns "-"
84
94
  #
85
95
  # file - The full path to the file
86
96
  # settings - The settings hash
@@ -90,14 +100,12 @@ module Ngzip
90
100
  return '-' unless settings[:crc]
91
101
 
92
102
  # honor the cache
93
- if settings[:crc_cache] && settings[:crc_cache][file]
94
- return settings[:crc_cache][file]
95
- end
103
+ return settings[:crc_cache][file] if settings[:crc_cache] && settings[:crc_cache][file]
96
104
 
97
105
  # read using a buffer, we might operate on large files!
98
106
  crc32 = 0
99
- File.open(file,'rb') do |f|
100
- while buffer = f.read(BUFFER_SIZE) do
107
+ File.open(file, 'rb') do |f|
108
+ while (buffer = f.read(BUFFER_SIZE))
101
109
  crc32 = Zlib.crc32(buffer, crc32)
102
110
  end
103
111
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ngzip
2
- VERSION = '1.0.7'.freeze
4
+ VERSION = '1.1.0'
3
5
  end
@@ -1,24 +1,27 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'english'
4
6
  require 'ngzip/version'
5
7
 
6
8
  Gem::Specification.new do |spec|
7
- spec.name = "ngzip"
9
+ spec.name = 'ngzip'
8
10
  spec.version = Ngzip::VERSION
9
- spec.authors = ["dup2"]
10
- spec.email = ["zarkov@cargoserver.ch"]
11
- spec.description = %q{Provides a nginx mod_zip compatible file manifest for streaming support.
12
- See http://wiki.nginx.org/NginxNgxZip for the nginx module.}
13
- spec.summary = %q{Provides a nginx mod_zip compatible file manifest for streaming support}
14
- spec.homepage = "https://github.com/cargoserver/ngzip"
15
- spec.license = "MIT"
11
+ spec.authors = ['dup2']
12
+ spec.email = ['zarkov@cargoserver.ch']
13
+ spec.description = %(Provides a nginx mod_zip compatible file manifest for streaming support.
14
+ See http://wiki.nginx.org/NginxNgxZip for the nginx module.)
15
+ spec.summary = 'Provides a nginx mod_zip compatible file manifest for streaming support'
16
+ spec.homepage = 'https://github.com/cargoserver/ngzip'
17
+ spec.license = 'MIT'
16
18
 
17
- spec.files = `git ls-files`.split($/)
19
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
18
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
- spec.require_paths = ["lib"]
22
+ spec.require_paths = ['lib']
21
23
 
22
- spec.add_development_dependency "bundler", "~> 1.3"
23
- spec.add_development_dependency "rake"
24
+ spec.add_development_dependency 'bundler', '~> 1.3'
25
+ spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'rubocop'
24
27
  end
@@ -1,134 +1,154 @@
1
- require_relative "../../test_helper"
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../test_helper'
2
4
  require 'uri'
3
5
  require 'pathname'
4
6
 
5
7
  describe Ngzip do
6
-
7
8
  it 'must support the static method :build' do
8
- Ngzip.respond_to?(:build).must_equal true
9
+ expect(Ngzip.respond_to?(:build)).must_equal true
9
10
  end
10
-
11
11
  end
12
12
 
13
13
  describe Ngzip::Builder do
14
+ def encode_file_path(path)
15
+ ERB::Util.url_encode path
16
+ end
14
17
 
15
- let(:builder) {Ngzip::Builder.new()}
16
- let(:lorem) {File.expand_path('../../../data/a/lorem.txt', __FILE__)}
17
- let(:ipsum) {File.expand_path('../../../data/a/ipsum.txt', __FILE__)}
18
- let(:without_dot) {File.expand_path('../../../data/a/filename-without-a-dot', __FILE__)}
19
- let(:my_file) {File.expand_path('../../../data/a/d/my_file.txt', __FILE__)}
20
- let(:whitespaced) {File.expand_path('../../../data/a/A filename with whitespace.txt', __FILE__)}
21
- let(:plused) {File.expand_path('../../../data/c/A filename with space and + in it.txt', __FILE__)}
22
- let(:cargo) {File.expand_path('../../../data/b/Cargo.png', __FILE__)}
23
- let(:sit) {File.expand_path('../../../data/sit.txt', __FILE__)}
24
- let(:a) {File.expand_path('../../../data/a', __FILE__)}
25
- let(:questions) { File.expand_path('../../../data/c/questions?', __FILE__) }
18
+ let(:builder) { Ngzip::Builder.new }
19
+ let(:lorem) { File.expand_path('../../data/a/lorem.txt', __dir__) }
20
+ let(:ipsum) { File.expand_path('../../data/a/ipsum.txt', __dir__) }
21
+ let(:without_dot) { File.expand_path('../../data/a/filename-without-a-dot', __dir__) }
22
+ let(:my_file) { File.expand_path('../../data/a/d/my_file.txt', __dir__) }
23
+ let(:whitespaced) { File.expand_path('../../data/a/A filename with whitespace.txt', __dir__) }
24
+ let(:plused) { File.expand_path('../../data/c/A filename with space and + in it.txt', __dir__) }
25
+ let(:cargo) { File.expand_path('../../data/b/Cargo.png', __dir__) }
26
+ let(:sit) { File.expand_path('../../data/sit.txt', __dir__) }
27
+ let(:a) { File.expand_path('../../data/a', __dir__) }
28
+ let(:questions) { File.expand_path('../../data/c/questions?', __dir__) }
26
29
 
27
30
  it 'must be defined' do
28
- Ngzip::Builder.wont_be_nil
31
+ expect(Ngzip::Builder).wont_be_nil
29
32
  end
30
33
 
31
34
  it 'must be a class we can call :new on' do
32
- Ngzip::Builder.new().wont_be_nil
35
+ expect(Ngzip::Builder.new).wont_be_nil
33
36
  end
34
37
 
35
38
  it 'must respond to :build' do
36
- builder.respond_to?(:build).must_equal true
39
+ expect(builder.respond_to?(:build)).must_equal true
37
40
  end
38
41
 
39
- describe "with CRC-32 checksums disabled" do
40
- let(:options) { {:crc => false}}
42
+ describe 'with CRC-32 checksums disabled' do
43
+ let(:options) { { crc: false } }
41
44
 
42
45
  it 'must return a correct list for one file' do
43
- expected = "- 446 #{lorem} lorem.txt"
44
- builder.build(lorem, options).must_equal expected
46
+ expected = "- 446 #{encode_file_path(lorem)} lorem.txt"
47
+ expect(builder.build(lorem, options)).must_equal expected
45
48
  end
46
49
  end
47
50
 
48
- describe "with CRC-32 checksums enabled" do
49
- let(:options) { {:crc => true}}
51
+ describe 'with CRC-32 checksums enabled' do
52
+ let(:options) { { crc: true } }
50
53
 
51
54
  it 'must return a correct list for one file with a checksum' do
52
- expected = "8f92322f 446 #{lorem} lorem.txt"
53
- builder.build(lorem, options).must_equal expected
55
+ expected = "8f92322f 446 #{encode_file_path(lorem)} lorem.txt"
56
+ expect(builder.build(lorem, options)).must_equal expected
54
57
  end
55
58
 
56
59
  it 'must return a correct list for one binary file with a checksum' do
57
- expected = "b2f4655b 11550 #{cargo} Cargo.png"
58
- builder.build(cargo, options).must_equal expected
60
+ expected = "b2f4655b 11550 #{encode_file_path(cargo)} Cargo.png"
61
+ expect(builder.build(cargo, options)).must_equal expected
59
62
  end
60
63
 
61
64
  it 'must escape the path name' do
62
- expected = "8f92322f 446 #{URI.escape(whitespaced)} A filename with whitespace.txt"
63
- builder.build(whitespaced, options).must_equal expected
65
+ expected = "8f92322f 446 #{encode_file_path(whitespaced)} A filename with whitespace.txt"
66
+ expect(builder.build(whitespaced, options)).must_equal expected
64
67
  end
65
68
 
66
69
  it 'must return a correct list for all files in a directory' do
67
- expected = "8f92322f 446 #{URI.escape(whitespaced)} A filename with whitespace.txt"
68
- expected << "\n8f92322f 446 #{my_file} d/my_file.txt"
69
- expected << "\n8f92322f 446 #{without_dot} filename-without-a-dot"
70
- expected << "\n8f92322f 446 #{ipsum} ipsum.txt"
71
- expected << "\n8f92322f 446 #{lorem} lorem.txt"
72
- builder.build(a,options).must_equal expected
70
+ expected = StringIO.new
71
+ expected << "8f92322f 446 #{encode_file_path(whitespaced)} A filename with whitespace.txt"
72
+ expected << "\n8f92322f 446 #{encode_file_path(without_dot)} filename-without-a-dot"
73
+ expected << "\n8f92322f 446 #{encode_file_path(ipsum)} ipsum.txt"
74
+ expected << "\n8f92322f 446 #{encode_file_path(lorem)} lorem.txt"
75
+ expected << "\n8f92322f 446 #{encode_file_path(my_file)} d/my_file.txt"
76
+ expect(builder.build(a, options)).must_equal expected.string
73
77
  end
74
78
 
75
79
  it 'must allow to mix files and directories' do
76
- expected = "8f92322f 446 #{URI.escape(whitespaced)} a/A filename with whitespace.txt"
77
- expected << "\n8f92322f 446 #{my_file} a/d/my_file.txt"
78
- expected << "\n8f92322f 446 #{without_dot} a/filename-without-a-dot"
79
- expected << "\n8f92322f 446 #{ipsum} a/ipsum.txt"
80
- expected << "\n8f92322f 446 #{lorem} a/lorem.txt"
81
- expected << "\nf7c0867d 1342 #{sit} sit.txt"
82
- builder.build([a,sit], options).must_equal expected
80
+ expected = StringIO.new
81
+ expected << "8f92322f 446 #{encode_file_path(whitespaced)} a/A filename with whitespace.txt"
82
+ expected << "\n8f92322f 446 #{encode_file_path(without_dot)} a/filename-without-a-dot"
83
+ expected << "\n8f92322f 446 #{encode_file_path(ipsum)} a/ipsum.txt"
84
+ expected << "\n8f92322f 446 #{encode_file_path(lorem)} a/lorem.txt"
85
+ expected << "\n8f92322f 446 #{encode_file_path(my_file)} a/d/my_file.txt"
86
+ expected << "\nf7c0867d 1342 #{encode_file_path(sit)} sit.txt"
87
+ expect(builder.build([a, sit], options)).must_equal expected.string
83
88
  end
84
89
 
85
90
  it 'must preserve directory names' do
86
91
  expected = [
87
- "8f92322f 446 #{lorem} a/lorem.txt",
88
- "8f92322f 446 #{ipsum} a/ipsum.txt",
89
- "b2f4655b 11550 #{cargo} b/Cargo.png"
90
- ].join("\n")
91
- builder.build([lorem,ipsum,cargo], options).must_equal expected
92
+ "8f92322f 446 #{encode_file_path(lorem)} a/lorem.txt",
93
+ "8f92322f 446 #{encode_file_path(ipsum)} a/ipsum.txt",
94
+ "b2f4655b 11550 #{encode_file_path(cargo)} b/Cargo.png"
95
+ ].join("\n")
96
+ expect(builder.build([lorem, ipsum, cargo], options)).must_equal expected
92
97
  end
93
98
 
94
99
  it 'must honor the CRC cache' do
95
- invalid_but_cached = "781aaabcc124"
96
- expected = "#{invalid_but_cached} 446 #{lorem} lorem.txt"
97
- builder.build(lorem, options.merge(:crc_cache => {lorem => invalid_but_cached})).must_equal expected
100
+ invalid_but_cached = '781aaabcc124'
101
+ expected = "#{invalid_but_cached} 446 #{encode_file_path(lorem)} lorem.txt"
102
+ expect(builder.build(lorem, options.merge(crc_cache: { lorem => invalid_but_cached }))).must_equal expected
98
103
  end
99
104
 
100
105
  it 'must remove common directories by default' do
101
- pathes = builder.build([lorem, ipsum]).split("\n").map{|line| line.split.last}
102
- expected = ["lorem.txt", "ipsum.txt"]
103
- pathes.must_equal expected
106
+ pathes = builder.build([lorem, ipsum]).split("\n").map { |line| line.split.last }
107
+ expected = ['lorem.txt', 'ipsum.txt']
108
+ expect(pathes).must_equal expected
109
+ end
110
+
111
+ describe 'when building the manifest from a directory path parameter' do
112
+ it 'removes trailing slash from builder file path' do
113
+ dir_path = File.join(File.dirname(lorem), '/')
114
+ result = builder.build(dir_path)
115
+ encoded_host_path = ERB::Util.url_encode(File.join(File.expand_path('../data', File.dirname(__dir__)), '/'))
116
+ manifest = <<~MANIFEST.chomp
117
+ 8f92322f 446 #{encoded_host_path}a%2FA%20filename%20with%20whitespace.txt A filename with whitespace.txt
118
+ 8f92322f 446 #{encoded_host_path}a%2Ffilename-without-a-dot filename-without-a-dot
119
+ 8f92322f 446 #{encoded_host_path}a%2Fipsum.txt ipsum.txt
120
+ 8f92322f 446 #{encoded_host_path}a%2Florem.txt lorem.txt
121
+ 8f92322f 446 #{encoded_host_path}a%2Fd%2Fmy_file.txt d/my_file.txt
122
+ MANIFEST
123
+ expect(result).must_equal manifest
124
+ end
104
125
  end
105
126
 
106
127
  it 'must keep common directories if :base_dir is provided' do
107
- options = {:base_dir => Pathname.new(lorem).parent.parent.to_s}
108
- pathes = builder.build([lorem, ipsum], options).split("\n").map{|line| line.split.last}
109
- expected = ["a/lorem.txt", "a/ipsum.txt"]
110
- pathes.must_equal expected
128
+ options = { base_dir: Pathname.new(lorem).parent.parent.to_s }
129
+ pathes = builder.build([lorem, ipsum], options).split("\n").map { |line| line.split.last }
130
+ expected = ['a/lorem.txt', 'a/ipsum.txt']
131
+ expect(pathes).must_equal expected
111
132
  end
112
133
 
113
134
  it 'must cope with a trailing / in the :base_dir' do
114
- options = {:base_dir => Pathname.new(lorem).parent.parent.to_s + '/'}
115
- pathes = builder.build([lorem, ipsum], options).split("\n").map{|line| line.split.last}
116
- expected = ["a/lorem.txt", "a/ipsum.txt"]
117
- pathes.must_equal expected
135
+ options = { base_dir: "#{Pathname.new(lorem).parent.parent}/" }
136
+ pathes = builder.build([lorem, ipsum], options).split("\n").map { |line| line.split.last }
137
+ expected = ['a/lorem.txt', 'a/ipsum.txt']
138
+ expect(pathes).must_equal expected
118
139
  end
119
140
 
120
141
  it 'must correctly encode filenames with a "+"' do
121
142
  options = {}
122
- name = File.join(Pathname.new(plused).parent.to_s, 'A%20filename%20with%20space%20and%20%2B%20in%20it.txt')
123
- expected = "8f92322f 446 #{name} A filename with space and + in it.txt"
124
- builder.build([plused], options).must_equal expected
143
+ name = File.join(Pathname.new(plused).parent.to_s, 'A filename with space and + in it.txt')
144
+ expected = "8f92322f 446 #{encode_file_path(name)} A filename with space and + in it.txt"
145
+ expect(builder.build([plused], options)).must_equal expected
125
146
  end
126
147
 
127
148
  it 'must correctly encode the "?" character' do
128
- name = File.join(Pathname.new(questions).parent.to_s, 'questions%3F/test.txt')
129
- expected = "f03102f5 13 #{name} test.txt"
130
-
131
- builder.build([File.join(questions, 'test.txt')]).must_equal expected
149
+ name = File.join(Pathname.new(questions).parent.to_s, 'questions?/test.txt')
150
+ expected = "f03102f5 13 #{encode_file_path(name)} test.txt"
151
+ expect(builder.build([File.join(questions, 'test.txt')])).must_equal expected
132
152
  end
133
153
  end
134
154
  end
@@ -1,9 +1,9 @@
1
- require_relative "../../test_helper"
1
+ # frozen_string_literal: true
2
2
 
3
- describe Ngzip do
3
+ require_relative '../../test_helper'
4
4
 
5
- it "must define a version" do
6
- Ngzip::VERSION.wont_be_nil
5
+ describe Ngzip do
6
+ it 'must define a version' do
7
+ expect(Ngzip::VERSION).wont_be_nil
7
8
  end
8
-
9
- end
9
+ end
@@ -1,4 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'minitest/autorun'
2
4
  require 'minitest/pride'
3
- require File.expand_path('../../lib/ngzip.rb', __FILE__)
4
-
5
+ require 'minitest/reporters'
6
+ require 'pry'
7
+ Minitest::Reporters.use!
8
+ require File.expand_path('../lib/ngzip.rb', __dir__)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ngzip
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - dup2
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-20 00:00:00.000000000 Z
11
+ date: 2020-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: |-
42
56
  Provides a nginx mod_zip compatible file manifest for streaming support.
43
57
  See http://wiki.nginx.org/NginxNgxZip for the nginx module.
@@ -74,7 +88,7 @@ homepage: https://github.com/cargoserver/ngzip
74
88
  licenses:
75
89
  - MIT
76
90
  metadata: {}
77
- post_install_message:
91
+ post_install_message:
78
92
  rdoc_options: []
79
93
  require_paths:
80
94
  - lib
@@ -89,9 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
103
  - !ruby/object:Gem::Version
90
104
  version: '0'
91
105
  requirements: []
92
- rubyforge_project:
93
- rubygems_version: 2.6.13
94
- signing_key:
106
+ rubygems_version: 3.0.8
107
+ signing_key:
95
108
  specification_version: 4
96
109
  summary: Provides a nginx mod_zip compatible file manifest for streaming support
97
110
  test_files: