zip-container 3.0.2 → 4.0.1

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.
Files changed (47) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +1 -1
  3. data/Licence.rdoc +1 -1
  4. data/Rakefile +15 -12
  5. data/examples/create-zip-container +7 -8
  6. data/examples/zip-container-info +4 -4
  7. data/lib/zip-container/container.rb +5 -7
  8. data/lib/zip-container/dir.rb +8 -11
  9. data/lib/zip-container/entries/directory.rb +5 -5
  10. data/lib/zip-container/entries/entry.rb +19 -15
  11. data/lib/zip-container/entries/file.rb +10 -9
  12. data/lib/zip-container/entries/managed.rb +11 -11
  13. data/lib/zip-container/entries/reserved.rb +2 -2
  14. data/lib/zip-container/exceptions.rb +4 -2
  15. data/lib/zip-container/file.rb +16 -16
  16. data/lib/zip-container/util.rb +3 -3
  17. data/lib/zip-container/version.rb +4 -3
  18. data/version.yml +2 -2
  19. data/zip-container.gemspec +30 -27
  20. metadata +41 -83
  21. data/.gitignore +0 -9
  22. data/.ruby-env +0 -1
  23. data/.ruby-gemset +0 -1
  24. data/.ruby-version +0 -1
  25. data/.travis.yml +0 -19
  26. data/test/data/compressed_mimetype.container +0 -0
  27. data/test/data/dirs/dir-mimetype/mimetype/.gitkeep +0 -1
  28. data/test/data/dirs/empty/mimetype +0 -1
  29. data/test/data/dirs/managed/dir/.gitkeep +0 -0
  30. data/test/data/dirs/managed/greeting.txt +0 -1
  31. data/test/data/dirs/managed/mimetype +0 -1
  32. data/test/data/dirs/null/.gitkeep +0 -1
  33. data/test/data/empty.container +0 -0
  34. data/test/data/empty.zip +0 -0
  35. data/test/data/example.container +0 -0
  36. data/test/data/null.file +0 -0
  37. data/test/data/subclassed.container +0 -0
  38. data/test/helpers/entry_lists.rb +0 -35
  39. data/test/tc_create_dir.rb +0 -56
  40. data/test/tc_create_file.rb +0 -140
  41. data/test/tc_exceptions.rb +0 -105
  42. data/test/tc_managed_entries.rb +0 -446
  43. data/test/tc_read_dir.rb +0 -90
  44. data/test/tc_read_file.rb +0 -118
  45. data/test/tc_reserved_names.rb +0 -334
  46. data/test/tc_util.rb +0 -67
  47. data/test/ts_container.rb +0 -59
@@ -30,7 +30,7 @@
30
30
  #
31
31
  # Author: Robert Haines
32
32
 
33
- #
33
+ ##
34
34
  module ZipContainer
35
35
 
36
36
  # This module provides support for reserved names.
@@ -70,7 +70,7 @@ module ZipContainer
70
70
  # Zip::Entry object can be passed in here.
71
71
  def reserved_entry?(entry)
72
72
  name = entry_name(entry)
73
- reserved_names.map { |n| n.downcase }.include? name.downcase
73
+ reserved_names.map(&:downcase).include? name.downcase
74
74
  end
75
75
 
76
76
  protected
@@ -30,7 +30,7 @@
30
30
  #
31
31
  # Author: Robert Haines
32
32
 
33
- #
33
+ ##
34
34
  module ZipContainer
35
35
 
36
36
  # The base of all exceptions raised by this library.
@@ -43,6 +43,7 @@ module ZipContainer
43
43
 
44
44
  # This exception is raised when a bad Container is detected.
45
45
  class MalformedContainerError < RuntimeError
46
+
46
47
  include Error
47
48
 
48
49
  # :call-seq:
@@ -54,7 +55,7 @@ module ZipContainer
54
55
  # reasons for why the Container is malformed.
55
56
  def initialize(reason = nil)
56
57
  if reason.nil? || reason.empty?
57
- super("Malformed Container.")
58
+ super('Malformed Container.')
58
59
  elsif reason.is_a?(Array)
59
60
  reasons = reason.map { |r| " * #{r}\n" }
60
61
  super("Malformed Container:\n#{reasons}")
@@ -67,6 +68,7 @@ module ZipContainer
67
68
  # This exception is raised when a clash occurs with a reserved or managed
68
69
  # name.
69
70
  class ReservedNameClashError < RuntimeError
71
+
70
72
  include Error
71
73
 
72
74
  # :call-seq:
@@ -49,7 +49,7 @@ module ZipContainer
49
49
 
50
50
  extend Forwardable
51
51
  def_delegators :@container, :comment, :comment=, :commit_required?, :each,
52
- :entries, :extract, :get_input_stream, :name, :read, :size
52
+ :entries, :extract, :get_input_stream, :name, :read, :size
53
53
 
54
54
  private_class_method :new
55
55
 
@@ -74,7 +74,7 @@ module ZipContainer
74
74
  # File.create(filename, mimetype) {|container| ...}
75
75
  #
76
76
  # Create a new ZipContainer file on disk with the specified mimetype.
77
- def self.create(filename, mimetype, &block)
77
+ def self.create(filename, mimetype)
78
78
  ::Zip::OutputStream.open(filename) do |stream|
79
79
  stream.put_next_entry(MIMETYPE_FILE, nil, nil, ::Zip::Entry::STORED)
80
80
  stream.write mimetype
@@ -127,7 +127,7 @@ module ZipContainer
127
127
  # +continue_on_exists_proc+ parameter.
128
128
  def add(entry, src_path, &continue_on_exists_proc)
129
129
  if reserved_entry?(entry) || managed_directory?(entry)
130
- raise ReservedNameClashError.new(entry.to_s)
130
+ raise ReservedNameClashError, entry.to_s
131
131
  end
132
132
 
133
133
  @container.add(entry, src_path, &continue_on_exists_proc)
@@ -143,12 +143,10 @@ module ZipContainer
143
143
  def commit
144
144
  return false unless commit_required?
145
145
 
146
- if on_disk?
147
- @container.commit
148
- end
146
+ @container.commit if on_disk?
149
147
  end
150
148
 
151
- alias :close :commit
149
+ alias close commit
152
150
 
153
151
  # :call-seq:
154
152
  # dir -> Zip::ZipFsDir
@@ -182,7 +180,7 @@ module ZipContainer
182
180
  # can specify <tt>:include_hidden => true</tt> to include hidden entries
183
181
  # in the search.
184
182
  def find_entry(entry_name, options = {})
185
- options = {:include_hidden => false}.merge(options)
183
+ options = { include_hidden: false }.merge(options)
186
184
 
187
185
  unless options[:include_hidden]
188
186
  return if hidden_entry?(entry_name)
@@ -199,7 +197,7 @@ module ZipContainer
199
197
  # can specify <tt>:include_hidden => true</tt> to include hidden entries
200
198
  # in the search.
201
199
  def get_entry(entry, options = {})
202
- options = {:include_hidden => false}.merge(options)
200
+ options = { include_hidden: false }.merge(options)
203
201
 
204
202
  unless options[:include_hidden]
205
203
  raise Errno::ENOENT, entry if hidden_entry?(entry)
@@ -220,7 +218,7 @@ module ZipContainer
220
218
  # parameter.
221
219
  def get_output_stream(entry, permission = nil, &block)
222
220
  if reserved_entry?(entry) || managed_directory?(entry)
223
- raise ReservedNameClashError.new(entry.to_s)
221
+ raise ReservedNameClashError, entry.to_s
224
222
  end
225
223
 
226
224
  @container.get_output_stream(entry, permission, &block)
@@ -240,9 +238,9 @@ module ZipContainer
240
238
  # <tt>::File::FNM_PATHNAME | ::File::FNM_DOTMATCH</tt>
241
239
  # * +options+ - <tt>:include_hidden => true</tt> will include hidden
242
240
  # entries in the search.
243
- def glob(pattern, *params, &block)
241
+ def glob(pattern, *params)
244
242
  flags = ::File::FNM_PATHNAME | ::File::FNM_DOTMATCH
245
- options = { :include_hidden => false }
243
+ options = { include_hidden: false }
246
244
 
247
245
  params.each do |param|
248
246
  case param
@@ -256,6 +254,7 @@ module ZipContainer
256
254
  entries.map do |entry|
257
255
  next if !options[:include_hidden] && hidden_entry?(entry)
258
256
  next unless ::File.fnmatch(pattern, entry.name.chomp('/'), flags)
257
+
259
258
  yield(entry) if block_given?
260
259
  entry
261
260
  end.compact
@@ -279,9 +278,9 @@ module ZipContainer
279
278
  # The new directory will be created with the supplied unix-style
280
279
  # permissions. The default (+0755+) is owner read, write and list; group
281
280
  # read and list; and world read and list.
282
- def mkdir(name, permission = 0755)
281
+ def mkdir(name, permission = 0o0755)
283
282
  if reserved_entry?(name) || managed_file?(name)
284
- raise ReservedNameClashError.new(name)
283
+ raise ReservedNameClashError, name
285
284
  end
286
285
 
287
286
  @container.mkdir(name, permission)
@@ -303,6 +302,7 @@ module ZipContainer
303
302
  # method will do nothing.
304
303
  def remove(entry)
305
304
  return if reserved_entry?(entry)
305
+
306
306
  @container.remove(entry)
307
307
  end
308
308
 
@@ -318,7 +318,7 @@ module ZipContainer
318
318
  # +continue_on_exists_proc+ parameter.
319
319
  def rename(entry, new_name, &continue_on_exists_proc)
320
320
  return if reserved_entry?(entry)
321
- raise ReservedNameClashError.new(new_name) if reserved_entry?(new_name)
321
+ raise ReservedNameClashError, new_name if reserved_entry?(new_name)
322
322
 
323
323
  @container.rename(entry, new_name, &continue_on_exists_proc)
324
324
  end
@@ -332,6 +332,7 @@ module ZipContainer
332
332
  # nothing.
333
333
  def replace(entry, src_path)
334
334
  return if reserved_entry?(entry)
335
+
335
336
  @container.replace(entry, src_path)
336
337
  end
337
338
 
@@ -479,6 +480,5 @@ module ZipContainer
479
480
  # size -> int
480
481
  #
481
482
  # Returns the number of entries in the ZipContainer file.
482
-
483
483
  end
484
484
  end
@@ -30,7 +30,7 @@
30
30
  #
31
31
  # Author: Robert Haines
32
32
 
33
- #
33
+ ##
34
34
  module ZipContainer
35
35
 
36
36
  # Utility methods useful throughout the rest of the ZipContainer library.
@@ -46,10 +46,10 @@ module ZipContainer
46
46
  # In common with rubyzip this method also removes a trailing slash (/)
47
47
  # from a name if it can.
48
48
  def entry_name(entry)
49
- name = entry.kind_of?(::Zip::Entry) ? entry.name : entry
49
+ name = entry.is_a?(::Zip::Entry) ? entry.name : entry
50
50
 
51
51
  if name.respond_to?(:end_with?) && name.respond_to?(:chop!)
52
- name.chop! if name.end_with?("/")
52
+ name.chop! if name.end_with?('/')
53
53
  end
54
54
 
55
55
  name
@@ -37,10 +37,11 @@ module ZipContainer
37
37
  # Library version information.
38
38
  module Version
39
39
  # Version information in a Hash
40
- INFO = YAML.load_file(File.join(File.dirname(__FILE__), "..", "..",
41
- "version.yml"))
40
+ INFO = YAML.load_file(
41
+ File.join(File.dirname(__FILE__), '..', '..', 'version.yml')
42
+ )
42
43
 
43
44
  # Version number as a String
44
- STRING = [:major, :minor, :patch].map {|d| INFO[d]}.compact.join('.')
45
+ STRING = %i[major minor patch].map { |d| INFO[d] }.compact.join('.')
45
46
  end
46
47
  end
@@ -1,4 +1,4 @@
1
1
  ---
2
- :major: 3
2
+ :major: 4
3
3
  :minor: 0
4
- :patch: 2
4
+ :patch: 1
@@ -30,35 +30,38 @@
30
30
  #
31
31
  # Author: Robert Haines
32
32
 
33
- lib = File.expand_path('../lib', __FILE__)
33
+ lib = File.expand_path('lib', __dir__)
34
34
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
35
- require "zip-container/version"
35
+ require 'zip-container/version'
36
36
 
37
37
  Gem::Specification.new do |s|
38
- s.name = "zip-container"
38
+ s.name = 'zip-container'
39
39
  s.version = ZipContainer::Version::STRING
40
- s.authors = ["Robert Haines", "Finn Bacall"]
41
- s.email = ["support@mygrid.org.uk"]
42
- s.homepage = "http://mygrid.github.io/ruby-zip-container/"
43
- s.platform = Gem::Platform::RUBY
44
- s.summary = "A ZIP Container for use by OCF and UCF implementations"
45
- s.description = "A Ruby library for working with ZIP Container "\
46
- "Format files. See http://www.idpf.org/epub/30/spec/epub30-ocf.html for "\
47
- "the OCF specification and "\
48
- "https://learn.adobe.com/wiki/display/PDFNAV/Universal+Container+Format "\
49
- "for the UCF specification."
50
- s.license = "BSD"
51
- s.require_path = "lib"
52
- s.files = `git ls-files`.split($/)
53
- s.test_files = `git ls-files -- test/*`.split($/)
54
- s.has_rdoc = true
55
- s.extra_rdoc_files = [ "Changes.rdoc", "Licence.rdoc", "ReadMe.rdoc" ]
56
- s.rdoc_options = [ "-N", "--tab-width=2", "--main=ReadMe.rdoc" ]
57
- s.required_ruby_version = ">= 1.9.3"
58
- s.add_development_dependency "bundler", "~> 1.5"
59
- s.add_development_dependency "rake", "~> 10.1"
60
- s.add_development_dependency "rdoc", "~> 4.1"
61
- s.add_development_dependency "test-unit", "~> 3.0"
62
- s.add_development_dependency "coveralls"
63
- s.add_runtime_dependency "rubyzip", "~> 1.2.1"
40
+ s.authors = ['Robert Haines', 'Finn Bacall']
41
+ s.email = ['support@mygrid.org.uk']
42
+
43
+ s.homepage = 'http://mygrid.github.io/ruby-zip-container/'
44
+ s.summary = 'A ZIP Container for use by OCF and UCF implementations'
45
+ s.description = 'A Ruby library for working with ZIP Container '\
46
+ 'Format files. See http://www.idpf.org/epub/30/spec/epub30-ocf.html for '\
47
+ 'the OCF specification and '\
48
+ 'https://learn.adobe.com/wiki/display/PDFNAV/Universal+Container+Format '\
49
+ 'for the UCF specification.'
50
+ s.license = 'BSD'
51
+
52
+ s.require_path = 'lib'
53
+ s.files = `git ls-files -z`.split("\x0").reject do |f|
54
+ f.match(%r{^((test|spec|features)/|\.)})
55
+ end
56
+
57
+ s.required_ruby_version = '>= 2.2.0'
58
+
59
+ s.add_runtime_dependency 'rubyzip', '~> 1.3.0'
60
+
61
+ s.add_development_dependency 'bundler', '~> 1.16'
62
+ s.add_development_dependency 'coveralls', '~> 0.8'
63
+ s.add_development_dependency 'rake', '~> 10.1'
64
+ s.add_development_dependency 'rdoc', '~> 4.1'
65
+ s.add_development_dependency 'rubocop', '~> 0.59'
66
+ s.add_development_dependency 'test-unit', '~> 3.0'
64
67
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zip-container
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Haines
@@ -9,92 +9,106 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-01-19 00:00:00.000000000 Z
12
+ date: 2019-11-29 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rubyzip
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 1.3.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 1.3.0
14
28
  - !ruby/object:Gem::Dependency
15
29
  name: bundler
16
30
  requirement: !ruby/object:Gem::Requirement
17
31
  requirements:
18
32
  - - "~>"
19
33
  - !ruby/object:Gem::Version
20
- version: '1.5'
34
+ version: '1.16'
21
35
  type: :development
22
36
  prerelease: false
23
37
  version_requirements: !ruby/object:Gem::Requirement
24
38
  requirements:
25
39
  - - "~>"
26
40
  - !ruby/object:Gem::Version
27
- version: '1.5'
41
+ version: '1.16'
28
42
  - !ruby/object:Gem::Dependency
29
- name: rake
43
+ name: coveralls
30
44
  requirement: !ruby/object:Gem::Requirement
31
45
  requirements:
32
46
  - - "~>"
33
47
  - !ruby/object:Gem::Version
34
- version: '10.1'
48
+ version: '0.8'
35
49
  type: :development
36
50
  prerelease: false
37
51
  version_requirements: !ruby/object:Gem::Requirement
38
52
  requirements:
39
53
  - - "~>"
40
54
  - !ruby/object:Gem::Version
41
- version: '10.1'
55
+ version: '0.8'
42
56
  - !ruby/object:Gem::Dependency
43
- name: rdoc
57
+ name: rake
44
58
  requirement: !ruby/object:Gem::Requirement
45
59
  requirements:
46
60
  - - "~>"
47
61
  - !ruby/object:Gem::Version
48
- version: '4.1'
62
+ version: '10.1'
49
63
  type: :development
50
64
  prerelease: false
51
65
  version_requirements: !ruby/object:Gem::Requirement
52
66
  requirements:
53
67
  - - "~>"
54
68
  - !ruby/object:Gem::Version
55
- version: '4.1'
69
+ version: '10.1'
56
70
  - !ruby/object:Gem::Dependency
57
- name: test-unit
71
+ name: rdoc
58
72
  requirement: !ruby/object:Gem::Requirement
59
73
  requirements:
60
74
  - - "~>"
61
75
  - !ruby/object:Gem::Version
62
- version: '3.0'
76
+ version: '4.1'
63
77
  type: :development
64
78
  prerelease: false
65
79
  version_requirements: !ruby/object:Gem::Requirement
66
80
  requirements:
67
81
  - - "~>"
68
82
  - !ruby/object:Gem::Version
69
- version: '3.0'
83
+ version: '4.1'
70
84
  - !ruby/object:Gem::Dependency
71
- name: coveralls
85
+ name: rubocop
72
86
  requirement: !ruby/object:Gem::Requirement
73
87
  requirements:
74
- - - ">="
88
+ - - "~>"
75
89
  - !ruby/object:Gem::Version
76
- version: '0'
90
+ version: '0.59'
77
91
  type: :development
78
92
  prerelease: false
79
93
  version_requirements: !ruby/object:Gem::Requirement
80
94
  requirements:
81
- - - ">="
95
+ - - "~>"
82
96
  - !ruby/object:Gem::Version
83
- version: '0'
97
+ version: '0.59'
84
98
  - !ruby/object:Gem::Dependency
85
- name: rubyzip
99
+ name: test-unit
86
100
  requirement: !ruby/object:Gem::Requirement
87
101
  requirements:
88
102
  - - "~>"
89
103
  - !ruby/object:Gem::Version
90
- version: 1.2.1
91
- type: :runtime
104
+ version: '3.0'
105
+ type: :development
92
106
  prerelease: false
93
107
  version_requirements: !ruby/object:Gem::Requirement
94
108
  requirements:
95
109
  - - "~>"
96
110
  - !ruby/object:Gem::Version
97
- version: 1.2.1
111
+ version: '3.0'
98
112
  description: A Ruby library for working with ZIP Container Format files. See http://www.idpf.org/epub/30/spec/epub30-ocf.html
99
113
  for the OCF specification and https://learn.adobe.com/wiki/display/PDFNAV/Universal+Container+Format
100
114
  for the UCF specification.
@@ -102,16 +116,8 @@ email:
102
116
  - support@mygrid.org.uk
103
117
  executables: []
104
118
  extensions: []
105
- extra_rdoc_files:
106
- - Changes.rdoc
107
- - Licence.rdoc
108
- - ReadMe.rdoc
119
+ extra_rdoc_files: []
109
120
  files:
110
- - ".gitignore"
111
- - ".ruby-env"
112
- - ".ruby-gemset"
113
- - ".ruby-version"
114
- - ".travis.yml"
115
121
  - Changes.rdoc
116
122
  - Gemfile
117
123
  - Licence.rdoc
@@ -132,28 +138,6 @@ files:
132
138
  - lib/zip-container/file.rb
133
139
  - lib/zip-container/util.rb
134
140
  - lib/zip-container/version.rb
135
- - test/data/compressed_mimetype.container
136
- - test/data/dirs/dir-mimetype/mimetype/.gitkeep
137
- - test/data/dirs/empty/mimetype
138
- - test/data/dirs/managed/dir/.gitkeep
139
- - test/data/dirs/managed/greeting.txt
140
- - test/data/dirs/managed/mimetype
141
- - test/data/dirs/null/.gitkeep
142
- - test/data/empty.container
143
- - test/data/empty.zip
144
- - test/data/example.container
145
- - test/data/null.file
146
- - test/data/subclassed.container
147
- - test/helpers/entry_lists.rb
148
- - test/tc_create_dir.rb
149
- - test/tc_create_file.rb
150
- - test/tc_exceptions.rb
151
- - test/tc_managed_entries.rb
152
- - test/tc_read_dir.rb
153
- - test/tc_read_file.rb
154
- - test/tc_reserved_names.rb
155
- - test/tc_util.rb
156
- - test/ts_container.rb
157
141
  - version.yml
158
142
  - zip-container.gemspec
159
143
  homepage: http://mygrid.github.io/ruby-zip-container/
@@ -161,48 +145,22 @@ licenses:
161
145
  - BSD
162
146
  metadata: {}
163
147
  post_install_message:
164
- rdoc_options:
165
- - "-N"
166
- - "--tab-width=2"
167
- - "--main=ReadMe.rdoc"
148
+ rdoc_options: []
168
149
  require_paths:
169
150
  - lib
170
151
  required_ruby_version: !ruby/object:Gem::Requirement
171
152
  requirements:
172
153
  - - ">="
173
154
  - !ruby/object:Gem::Version
174
- version: 1.9.3
155
+ version: 2.2.0
175
156
  required_rubygems_version: !ruby/object:Gem::Requirement
176
157
  requirements:
177
158
  - - ">="
178
159
  - !ruby/object:Gem::Version
179
160
  version: '0'
180
161
  requirements: []
181
- rubyforge_project:
182
- rubygems_version: 2.4.8
162
+ rubygems_version: 3.0.6
183
163
  signing_key:
184
164
  specification_version: 4
185
165
  summary: A ZIP Container for use by OCF and UCF implementations
186
- test_files:
187
- - test/data/compressed_mimetype.container
188
- - test/data/dirs/dir-mimetype/mimetype/.gitkeep
189
- - test/data/dirs/empty/mimetype
190
- - test/data/dirs/managed/dir/.gitkeep
191
- - test/data/dirs/managed/greeting.txt
192
- - test/data/dirs/managed/mimetype
193
- - test/data/dirs/null/.gitkeep
194
- - test/data/empty.container
195
- - test/data/empty.zip
196
- - test/data/example.container
197
- - test/data/null.file
198
- - test/data/subclassed.container
199
- - test/helpers/entry_lists.rb
200
- - test/tc_create_dir.rb
201
- - test/tc_create_file.rb
202
- - test/tc_exceptions.rb
203
- - test/tc_managed_entries.rb
204
- - test/tc_read_dir.rb
205
- - test/tc_read_file.rb
206
- - test/tc_reserved_names.rb
207
- - test/tc_util.rb
208
- - test/ts_container.rb
166
+ test_files: []