rubyzip 1.1.7 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +137 -54
  3. data/Rakefile +6 -4
  4. data/lib/zip/central_directory.rb +17 -13
  5. data/lib/zip/compressor.rb +1 -2
  6. data/lib/zip/constants.rb +57 -5
  7. data/lib/zip/crypto/decrypted_io.rb +40 -0
  8. data/lib/zip/crypto/null_encryption.rb +4 -6
  9. data/lib/zip/crypto/traditional_encryption.rb +14 -14
  10. data/lib/zip/decompressor.rb +22 -4
  11. data/lib/zip/deflater.rb +8 -6
  12. data/lib/zip/dos_time.rb +17 -13
  13. data/lib/zip/entry.rb +171 -148
  14. data/lib/zip/entry_set.rb +16 -14
  15. data/lib/zip/errors.rb +3 -0
  16. data/lib/zip/extra_field/generic.rb +14 -13
  17. data/lib/zip/extra_field/ntfs.rb +18 -16
  18. data/lib/zip/extra_field/old_unix.rb +12 -11
  19. data/lib/zip/extra_field/universal_time.rb +46 -16
  20. data/lib/zip/extra_field/unix.rb +10 -9
  21. data/lib/zip/extra_field/zip64.rb +15 -12
  22. data/lib/zip/extra_field/zip64_placeholder.rb +1 -2
  23. data/lib/zip/extra_field.rb +18 -16
  24. data/lib/zip/file.rb +147 -115
  25. data/lib/zip/filesystem.rb +289 -272
  26. data/lib/zip/inflater.rb +24 -36
  27. data/lib/zip/input_stream.rb +44 -28
  28. data/lib/zip/ioextras/abstract_input_stream.rb +24 -17
  29. data/lib/zip/ioextras/abstract_output_stream.rb +4 -6
  30. data/lib/zip/ioextras.rb +2 -4
  31. data/lib/zip/null_compressor.rb +2 -2
  32. data/lib/zip/null_decompressor.rb +3 -11
  33. data/lib/zip/null_input_stream.rb +0 -0
  34. data/lib/zip/output_stream.rb +25 -17
  35. data/lib/zip/pass_thru_compressor.rb +6 -6
  36. data/lib/zip/pass_thru_decompressor.rb +14 -24
  37. data/lib/zip/streamable_directory.rb +3 -3
  38. data/lib/zip/streamable_stream.rb +7 -11
  39. data/lib/zip/version.rb +1 -1
  40. data/lib/zip.rb +15 -6
  41. data/samples/example.rb +29 -39
  42. data/samples/example_filesystem.rb +16 -18
  43. data/samples/example_recursive.rb +31 -25
  44. data/samples/gtk_ruby_zip.rb +84 -0
  45. data/samples/qtzip.rb +23 -32
  46. data/samples/write_simple.rb +10 -13
  47. data/samples/zipfind.rb +33 -40
  48. metadata +50 -141
  49. data/samples/gtkRubyzip.rb +0 -86
  50. data/test/basic_zip_file_test.rb +0 -64
  51. data/test/central_directory_entry_test.rb +0 -73
  52. data/test/central_directory_test.rb +0 -104
  53. data/test/crypto/null_encryption_test.rb +0 -53
  54. data/test/crypto/traditional_encryption_test.rb +0 -80
  55. data/test/data/WarnInvalidDate.zip +0 -0
  56. data/test/data/file1.txt +0 -46
  57. data/test/data/file1.txt.deflatedData +0 -0
  58. data/test/data/file2.txt +0 -1504
  59. data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  60. data/test/data/globTest/foo.txt +0 -0
  61. data/test/data/globTest/food.txt +0 -0
  62. data/test/data/globTest.zip +0 -0
  63. data/test/data/mimetype +0 -1
  64. data/test/data/notzippedruby.rb +0 -7
  65. data/test/data/ntfs.zip +0 -0
  66. data/test/data/rubycode.zip +0 -0
  67. data/test/data/rubycode2.zip +0 -0
  68. data/test/data/testDirectory.bin +0 -0
  69. data/test/data/zip64-sample.zip +0 -0
  70. data/test/data/zipWithDirs.zip +0 -0
  71. data/test/data/zipWithEncryption.zip +0 -0
  72. data/test/deflater_test.rb +0 -67
  73. data/test/encryption_test.rb +0 -42
  74. data/test/entry_set_test.rb +0 -138
  75. data/test/entry_test.rb +0 -165
  76. data/test/errors_test.rb +0 -36
  77. data/test/extra_field_test.rb +0 -78
  78. data/test/file_extract_directory_test.rb +0 -56
  79. data/test/file_extract_test.rb +0 -90
  80. data/test/file_split_test.rb +0 -60
  81. data/test/file_test.rb +0 -559
  82. data/test/filesystem/dir_iterator_test.rb +0 -62
  83. data/test/filesystem/directory_test.rb +0 -131
  84. data/test/filesystem/file_mutating_test.rb +0 -100
  85. data/test/filesystem/file_nonmutating_test.rb +0 -514
  86. data/test/filesystem/file_stat_test.rb +0 -66
  87. data/test/gentestfiles.rb +0 -134
  88. data/test/inflater_test.rb +0 -14
  89. data/test/input_stream_test.rb +0 -170
  90. data/test/ioextras/abstract_input_stream_test.rb +0 -103
  91. data/test/ioextras/abstract_output_stream_test.rb +0 -106
  92. data/test/ioextras/fake_io_test.rb +0 -18
  93. data/test/local_entry_test.rb +0 -156
  94. data/test/output_stream_test.rb +0 -129
  95. data/test/pass_thru_compressor_test.rb +0 -31
  96. data/test/pass_thru_decompressor_test.rb +0 -15
  97. data/test/settings_test.rb +0 -92
  98. data/test/test_helper.rb +0 -228
  99. data/test/unicode_file_names_and_comments_test.rb +0 -52
  100. data/test/zip64_full_test.rb +0 -53
  101. data/test/zip64_support_test.rb +0 -15
@@ -1,21 +1,20 @@
1
1
  require 'zip'
2
2
 
3
3
  module Zip
4
-
5
- # The ZipFileSystem API provides an API for accessing entries in
6
- # a zip archive that is similar to ruby's builtin File and Dir
4
+ # The ZipFileSystem API provides an API for accessing entries in
5
+ # a zip archive that is similar to ruby's builtin File and Dir
7
6
  # classes.
8
7
  #
9
8
  # Requiring 'zip/filesystem' includes this module in Zip::File
10
9
  # making the methods in this module available on Zip::File objects.
11
10
  #
12
- # Using this API the following example creates a new zip file
11
+ # Using this API the following example creates a new zip file
13
12
  # <code>my.zip</code> containing a normal entry with the name
14
13
  # <code>first.txt</code>, a directory entry named <code>mydir</code>
15
14
  # and finally another normal entry named <code>second.txt</code>
16
15
  #
17
16
  # require 'zip/filesystem'
18
- #
17
+ #
19
18
  # Zip::File.open("my.zip", Zip::File::CREATE) {
20
19
  # |zipfile|
21
20
  # zipfile.file.open("first.txt", "w") { |f| f.puts "Hello world" }
@@ -23,39 +22,38 @@ module Zip
23
22
  # zipfile.file.open("mydir/second.txt", "w") { |f| f.puts "Hello again" }
24
23
  # }
25
24
  #
26
- # Reading is as easy as writing, as the following example shows. The
25
+ # Reading is as easy as writing, as the following example shows. The
27
26
  # example writes the contents of <code>first.txt</code> from zip archive
28
27
  # <code>my.zip</code> to standard out.
29
28
  #
30
29
  # require 'zip/filesystem'
31
- #
30
+ #
32
31
  # Zip::File.open("my.zip") {
33
32
  # |zipfile|
34
33
  # puts zipfile.file.read("first.txt")
35
34
  # }
36
35
 
37
36
  module FileSystem
38
-
39
37
  def initialize # :nodoc:
40
- mappedZip = ZipFileNameMapper.new(self)
41
- @zipFsDir = ZipFsDir.new(mappedZip)
42
- @zipFsFile = ZipFsFile.new(mappedZip)
43
- @zipFsDir.file = @zipFsFile
44
- @zipFsFile.dir = @zipFsDir
38
+ mapped_zip = ZipFileNameMapper.new(self)
39
+ @zip_fs_dir = ZipFsDir.new(mapped_zip)
40
+ @zip_fs_file = ZipFsFile.new(mapped_zip)
41
+ @zip_fs_dir.file = @zip_fs_file
42
+ @zip_fs_file.dir = @zip_fs_dir
45
43
  end
46
44
 
47
45
  # Returns a ZipFsDir which is much like ruby's builtin Dir (class)
48
46
  # object, except it works on the Zip::File on which this method is
49
47
  # invoked
50
48
  def dir
51
- @zipFsDir
49
+ @zip_fs_dir
52
50
  end
53
51
 
54
52
  # Returns a ZipFsFile which is much like ruby's builtin File (class)
55
53
  # object, except it works on the Zip::File on which this method is
56
54
  # invoked
57
55
  def file
58
- @zipFsFile
56
+ @zip_fs_file
59
57
  end
60
58
 
61
59
  # Instances of this class are normally accessed via the accessor
@@ -65,51 +63,49 @@ module Zip
65
63
  # The individual methods are not documented due to their
66
64
  # similarity with the methods in File
67
65
  class ZipFsFile
68
-
69
66
  attr_writer :dir
70
- # protected :dir
67
+ # protected :dir
71
68
 
72
69
  class ZipFsStat
73
-
74
70
  class << self
75
-
76
71
  def delegate_to_fs_file(*methods)
77
72
  methods.each do |method|
78
- self.class_eval <<-end_eval, __FILE__, __LINE__ + 1
73
+ class_eval <<-END_EVAL, __FILE__, __LINE__ + 1
79
74
  def #{method} # def file?
80
- @zipFsFile.#{method}(@entryName) # @zipFsFile.file?(@entryName)
75
+ @zip_fs_file.#{method}(@entry_name) # @zip_fs_file.file?(@entry_name)
81
76
  end # end
82
- end_eval
77
+ END_EVAL
83
78
  end
84
79
  end
85
-
86
80
  end
87
81
 
88
- def initialize(zipFsFile, entryName)
89
- @zipFsFile = zipFsFile
90
- @entryName = entryName
82
+ def initialize(zip_fs_file, entry_name)
83
+ @zip_fs_file = zip_fs_file
84
+ @entry_name = entry_name
91
85
  end
92
86
 
93
- def kind_of?(t)
94
- super || t == ::File::Stat
87
+ def kind_of?(type)
88
+ super || type == ::File::Stat
95
89
  end
96
90
 
97
91
  delegate_to_fs_file :file?, :directory?, :pipe?, :chardev?, :symlink?,
98
- :socket?, :blockdev?, :readable?, :readable_real?, :writable?, :ctime,
99
- :writable_real?, :executable?, :executable_real?, :sticky?, :owned?,
100
- :grpowned?, :setuid?, :setgid?, :zero?, :size, :size?, :mtime, :atime
92
+ :socket?, :blockdev?, :readable?, :readable_real?, :writable?, :ctime,
93
+ :writable_real?, :executable?, :executable_real?, :sticky?, :owned?,
94
+ :grpowned?, :setuid?, :setgid?, :zero?, :size, :size?, :mtime, :atime
101
95
 
102
- def blocks; nil; end
96
+ def blocks
97
+ nil
98
+ end
103
99
 
104
100
  def get_entry
105
- @zipFsFile.__send__(:get_entry, @entryName)
101
+ @zip_fs_file.__send__(:get_entry, @entry_name)
106
102
  end
107
103
  private :get_entry
108
104
 
109
105
  def gid
110
106
  e = get_entry
111
- if e.extra.member? "IUnix"
112
- e.extra["IUnix"].gid || 0
107
+ if e.extra.member? 'IUnix'
108
+ e.extra['IUnix'].gid || 0
113
109
  else
114
110
  0
115
111
  end
@@ -117,310 +113,316 @@ module Zip
117
113
 
118
114
  def uid
119
115
  e = get_entry
120
- if e.extra.member? "IUnix"
121
- e.extra["IUnix"].uid || 0
116
+ if e.extra.member? 'IUnix'
117
+ e.extra['IUnix'].uid || 0
122
118
  else
123
119
  0
124
120
  end
125
121
  end
126
122
 
127
- def ino; 0; end
123
+ def ino
124
+ 0
125
+ end
128
126
 
129
- def dev; 0; end
127
+ def dev
128
+ 0
129
+ end
130
130
 
131
- def rdev; 0; end
131
+ def rdev
132
+ 0
133
+ end
132
134
 
133
- def rdev_major; 0; end
135
+ def rdev_major
136
+ 0
137
+ end
134
138
 
135
- def rdev_minor; 0; end
139
+ def rdev_minor
140
+ 0
141
+ end
136
142
 
137
143
  def ftype
138
144
  if file?
139
- return "file"
145
+ 'file'
140
146
  elsif directory?
141
- return "directory"
147
+ 'directory'
142
148
  else
143
- raise StandardError, "Unknown file type"
149
+ raise StandardError, 'Unknown file type'
144
150
  end
145
151
  end
146
152
 
147
- def nlink; 1; end
153
+ def nlink
154
+ 1
155
+ end
148
156
 
149
- def blksize; nil; end
157
+ def blksize
158
+ nil
159
+ end
150
160
 
151
161
  def mode
152
162
  e = get_entry
153
163
  if e.fstype == 3
154
164
  e.external_file_attributes >> 16
155
165
  else
156
- 33206 # 33206 is equivalent to -rw-rw-rw-
166
+ 33_206 # 33206 is equivalent to -rw-rw-rw-
157
167
  end
158
168
  end
159
169
  end
160
170
 
161
- def initialize(mappedZip)
162
- @mappedZip = mappedZip
171
+ def initialize(mapped_zip)
172
+ @mapped_zip = mapped_zip
163
173
  end
164
174
 
165
- def get_entry(fileName)
166
- if ! exists?(fileName)
167
- raise Errno::ENOENT, "No such file or directory - #{fileName}"
175
+ def get_entry(filename)
176
+ unless exists?(filename)
177
+ raise Errno::ENOENT, "No such file or directory - #{filename}"
168
178
  end
169
- @mappedZip.find_entry(fileName)
179
+
180
+ @mapped_zip.find_entry(filename)
170
181
  end
171
182
  private :get_entry
172
183
 
173
- def unix_mode_cmp(fileName, mode)
174
- begin
175
- e = get_entry(fileName)
176
- e.fstype == 3 && ((e.external_file_attributes >> 16) & mode ) != 0
177
- rescue Errno::ENOENT
178
- false
179
- end
184
+ def unix_mode_cmp(filename, mode)
185
+ e = get_entry(filename)
186
+ e.fstype == 3 && ((e.external_file_attributes >> 16) & mode) != 0
187
+ rescue Errno::ENOENT
188
+ false
180
189
  end
181
190
  private :unix_mode_cmp
182
191
 
183
- def exists?(fileName)
184
- expand_path(fileName) == "/" || @mappedZip.find_entry(fileName) != nil
192
+ def exists?(filename)
193
+ expand_path(filename) == '/' || !@mapped_zip.find_entry(filename).nil?
185
194
  end
186
- alias :exist? :exists?
195
+ alias exist? exists?
187
196
 
188
197
  # Permissions not implemented, so if the file exists it is accessible
189
- alias owned? exists?
190
- alias grpowned? exists?
198
+ alias owned? exists?
199
+ alias grpowned? exists?
191
200
 
192
- def readable?(fileName)
193
- unix_mode_cmp(fileName, 0444)
201
+ def readable?(filename)
202
+ unix_mode_cmp(filename, 0o444)
194
203
  end
195
- alias readable_real? readable?
204
+ alias readable_real? readable?
196
205
 
197
- def writable?(fileName)
198
- unix_mode_cmp(fileName, 0222)
206
+ def writable?(filename)
207
+ unix_mode_cmp(filename, 0o222)
199
208
  end
200
- alias writable_real? writable?
209
+ alias writable_real? writable?
201
210
 
202
- def executable?(fileName)
203
- unix_mode_cmp(fileName, 0111)
211
+ def executable?(filename)
212
+ unix_mode_cmp(filename, 0o111)
204
213
  end
205
214
  alias executable_real? executable?
206
215
 
207
- def setuid?(fileName)
208
- unix_mode_cmp(fileName, 04000)
216
+ def setuid?(filename)
217
+ unix_mode_cmp(filename, 0o4000)
209
218
  end
210
219
 
211
- def setgid?(fileName)
212
- unix_mode_cmp(fileName, 02000)
220
+ def setgid?(filename)
221
+ unix_mode_cmp(filename, 0o2000)
213
222
  end
214
223
 
215
- def sticky?(fileName)
216
- unix_mode_cmp(fileName, 01000)
224
+ def sticky?(filename)
225
+ unix_mode_cmp(filename, 0o1000)
217
226
  end
218
227
 
219
228
  def umask(*args)
220
229
  ::File.umask(*args)
221
230
  end
222
231
 
223
- def truncate(fileName, len)
224
- raise StandardError, "truncate not supported"
232
+ def truncate(_filename, _len)
233
+ raise StandardError, 'truncate not supported'
225
234
  end
226
235
 
227
- def directory?(fileName)
228
- entry = @mappedZip.find_entry(fileName)
229
- expand_path(fileName) == "/" || (entry != nil && entry.directory?)
236
+ def directory?(filename)
237
+ entry = @mapped_zip.find_entry(filename)
238
+ expand_path(filename) == '/' || (!entry.nil? && entry.directory?)
230
239
  end
231
240
 
232
- def open(fileName, openMode = "r", permissionInt = 0644, &block)
233
- openMode.gsub!("b", "") # ignore b option
234
- case openMode
235
- when "r"
236
- @mappedZip.get_input_stream(fileName, &block)
237
- when "w"
238
- @mappedZip.get_output_stream(fileName, permissionInt, &block)
239
- else
240
- raise StandardError, "openmode '#{openMode} not supported" unless openMode == "r"
241
+ def open(filename, mode = 'r', permissions = 0o644, &block)
242
+ mode.delete!('b') # ignore b option
243
+ case mode
244
+ when 'r'
245
+ @mapped_zip.get_input_stream(filename, &block)
246
+ when 'w'
247
+ @mapped_zip.get_output_stream(filename, permissions, &block)
248
+ else
249
+ raise StandardError, "openmode '#{mode} not supported" unless mode == 'r'
241
250
  end
242
251
  end
243
252
 
244
- def new(fileName, openMode = "r")
245
- open(fileName, openMode)
253
+ def new(filename, mode = 'r')
254
+ self.open(filename, mode)
246
255
  end
247
256
 
248
- def size(fileName)
249
- @mappedZip.get_entry(fileName).size
257
+ def size(filename)
258
+ @mapped_zip.get_entry(filename).size
250
259
  end
251
260
 
252
261
  # Returns nil for not found and nil for directories
253
- def size?(fileName)
254
- entry = @mappedZip.find_entry(fileName)
255
- return (entry == nil || entry.directory?) ? nil : entry.size
262
+ def size?(filename)
263
+ entry = @mapped_zip.find_entry(filename)
264
+ entry.nil? || entry.directory? ? nil : entry.size
256
265
  end
257
266
 
258
- def chown(ownerInt, groupInt, *filenames)
259
- filenames.each { |fileName|
260
- e = get_entry(fileName)
261
- unless e.extra.member?("IUnix")
262
- e.extra.create("IUnix")
263
- end
264
- e.extra["IUnix"].uid = ownerInt
265
- e.extra["IUnix"].gid = groupInt
266
- }
267
+ def chown(owner, group, *filenames)
268
+ filenames.each do |filename|
269
+ e = get_entry(filename)
270
+ e.extra.create('IUnix') unless e.extra.member?('IUnix')
271
+ e.extra['IUnix'].uid = owner
272
+ e.extra['IUnix'].gid = group
273
+ end
267
274
  filenames.size
268
275
  end
269
276
 
270
- def chmod (modeInt, *filenames)
271
- filenames.each { |fileName|
272
- e = get_entry(fileName)
277
+ def chmod(mode, *filenames)
278
+ filenames.each do |filename|
279
+ e = get_entry(filename)
273
280
  e.fstype = 3 # force convertion filesystem type to unix
274
- e.unix_perms = modeInt
275
- e.external_file_attributes = modeInt << 16
281
+ e.unix_perms = mode
282
+ e.external_file_attributes = mode << 16
276
283
  e.dirty = true
277
- }
284
+ end
278
285
  filenames.size
279
286
  end
280
287
 
281
- def zero?(fileName)
282
- sz = size(fileName)
283
- sz == nil || sz == 0
288
+ def zero?(filename)
289
+ sz = size(filename)
290
+ sz.nil? || sz == 0
284
291
  rescue Errno::ENOENT
285
292
  false
286
293
  end
287
294
 
288
- def file?(fileName)
289
- entry = @mappedZip.find_entry(fileName)
290
- entry != nil && entry.file?
291
- end
295
+ def file?(filename)
296
+ entry = @mapped_zip.find_entry(filename)
297
+ !entry.nil? && entry.file?
298
+ end
292
299
 
293
- def dirname(fileName)
294
- ::File.dirname(fileName)
300
+ def dirname(filename)
301
+ ::File.dirname(filename)
295
302
  end
296
303
 
297
- def basename(fileName)
298
- ::File.basename(fileName)
304
+ def basename(filename)
305
+ ::File.basename(filename)
299
306
  end
300
307
 
301
- def split(fileName)
302
- ::File.split(fileName)
308
+ def split(filename)
309
+ ::File.split(filename)
303
310
  end
304
311
 
305
312
  def join(*fragments)
306
313
  ::File.join(*fragments)
307
314
  end
308
315
 
309
- def utime(modifiedTime, *fileNames)
310
- fileNames.each { |fileName|
311
- get_entry(fileName).time = modifiedTime
312
- }
316
+ def utime(modified_time, *filenames)
317
+ filenames.each do |filename|
318
+ get_entry(filename).time = modified_time
319
+ end
313
320
  end
314
321
 
315
- def mtime(fileName)
316
- @mappedZip.get_entry(fileName).mtime
322
+ def mtime(filename)
323
+ @mapped_zip.get_entry(filename).mtime
317
324
  end
318
325
 
319
- def atime(fileName)
320
- e = get_entry(fileName)
321
- if e.extra.member? "UniversalTime"
322
- e.extra["UniversalTime"].atime
323
- elsif e.extra.member? "NTFS"
324
- e.extra["NTFS"].atime
325
- else
326
- nil
326
+ def atime(filename)
327
+ e = get_entry(filename)
328
+ if e.extra.member? 'UniversalTime'
329
+ e.extra['UniversalTime'].atime
330
+ elsif e.extra.member? 'NTFS'
331
+ e.extra['NTFS'].atime
327
332
  end
328
333
  end
329
334
 
330
- def ctime(fileName)
331
- e = get_entry(fileName)
332
- if e.extra.member? "UniversalTime"
333
- e.extra["UniversalTime"].ctime
334
- elsif e.extra.member? "NTFS"
335
- e.extra["NTFS"].ctime
336
- else
337
- nil
335
+ def ctime(filename)
336
+ e = get_entry(filename)
337
+ if e.extra.member? 'UniversalTime'
338
+ e.extra['UniversalTime'].ctime
339
+ elsif e.extra.member? 'NTFS'
340
+ e.extra['NTFS'].ctime
338
341
  end
339
342
  end
340
343
 
341
- def pipe?(filename)
344
+ def pipe?(_filename)
342
345
  false
343
346
  end
344
347
 
345
- def blockdev?(filename)
348
+ def blockdev?(_filename)
346
349
  false
347
350
  end
348
351
 
349
- def chardev?(filename)
352
+ def chardev?(_filename)
350
353
  false
351
354
  end
352
355
 
353
- def symlink?(fileName)
356
+ def symlink?(_filename)
354
357
  false
355
358
  end
356
359
 
357
- def socket?(fileName)
360
+ def socket?(_filename)
358
361
  false
359
362
  end
360
363
 
361
- def ftype(fileName)
362
- @mappedZip.get_entry(fileName).directory? ? "directory" : "file"
364
+ def ftype(filename)
365
+ @mapped_zip.get_entry(filename).directory? ? 'directory' : 'file'
363
366
  end
364
367
 
365
- def readlink(fileName)
366
- raise NotImplementedError, "The readlink() function is not implemented"
368
+ def readlink(_filename)
369
+ raise NotImplementedError, 'The readlink() function is not implemented'
367
370
  end
368
371
 
369
- def symlink(fileName, symlinkName)
370
- raise NotImplementedError, "The symlink() function is not implemented"
372
+ def symlink(_filename, _symlink_name)
373
+ raise NotImplementedError, 'The symlink() function is not implemented'
371
374
  end
372
375
 
373
- def link(fileName, symlinkName)
374
- raise NotImplementedError, "The link() function is not implemented"
376
+ def link(_filename, _symlink_name)
377
+ raise NotImplementedError, 'The link() function is not implemented'
375
378
  end
376
379
 
377
380
  def pipe
378
- raise NotImplementedError, "The pipe() function is not implemented"
381
+ raise NotImplementedError, 'The pipe() function is not implemented'
379
382
  end
380
383
 
381
- def stat(fileName)
382
- if ! exists?(fileName)
383
- raise Errno::ENOENT, fileName
384
- end
385
- ZipFsStat.new(self, fileName)
384
+ def stat(filename)
385
+ raise Errno::ENOENT, filename unless exists?(filename)
386
+
387
+ ZipFsStat.new(self, filename)
386
388
  end
387
389
 
388
390
  alias lstat stat
389
391
 
390
- def readlines(fileName)
391
- open(fileName) { |is| is.readlines }
392
+ def readlines(filename)
393
+ self.open(filename, &:readlines)
392
394
  end
393
395
 
394
- def read(fileName)
395
- @mappedZip.read(fileName)
396
+ def read(filename)
397
+ @mapped_zip.read(filename)
396
398
  end
397
399
 
398
- def popen(*args, &aProc)
399
- ::File.popen(*args, &aProc)
400
+ def popen(*args, &a_proc)
401
+ ::File.popen(*args, &a_proc)
400
402
  end
401
403
 
402
- def foreach(fileName, aSep = $/, &aProc)
403
- open(fileName) { |is| is.each_line(aSep, &aProc) }
404
+ def foreach(filename, sep = $INPUT_RECORD_SEPARATOR, &a_proc)
405
+ self.open(filename) { |is| is.each_line(sep, &a_proc) }
404
406
  end
405
407
 
406
408
  def delete(*args)
407
- args.each {
408
- |fileName|
409
- if directory?(fileName)
410
- raise Errno::EISDIR, "Is a directory - \"#{fileName}\""
409
+ args.each do |filename|
410
+ if directory?(filename)
411
+ raise Errno::EISDIR, "Is a directory - \"#{filename}\""
411
412
  end
412
- @mappedZip.remove(fileName)
413
- }
413
+
414
+ @mapped_zip.remove(filename)
415
+ end
414
416
  end
415
417
 
416
- def rename(fileToRename, newName)
417
- @mappedZip.rename(fileToRename, newName) { true }
418
+ def rename(file_to_rename, new_name)
419
+ @mapped_zip.rename(file_to_rename, new_name) { true }
418
420
  end
419
421
 
420
- alias :unlink :delete
422
+ alias unlink delete
421
423
 
422
- def expand_path(aPath)
423
- @mappedZip.expand_path(aPath)
424
+ def expand_path(path)
425
+ @mapped_zip.expand_path(path)
424
426
  end
425
427
  end
426
428
 
@@ -431,118 +433,125 @@ module Zip
431
433
  # The individual methods are not documented due to their
432
434
  # similarity with the methods in Dir
433
435
  class ZipFsDir
434
-
435
- def initialize(mappedZip)
436
- @mappedZip = mappedZip
436
+ def initialize(mapped_zip)
437
+ @mapped_zip = mapped_zip
437
438
  end
438
439
 
439
440
  attr_writer :file
440
441
 
441
- def new(aDirectoryName)
442
- ZipFsDirIterator.new(entries(aDirectoryName))
442
+ def new(directory_name)
443
+ ZipFsDirIterator.new(entries(directory_name))
443
444
  end
444
445
 
445
- def open(aDirectoryName)
446
- dirIt = new(aDirectoryName)
446
+ def open(directory_name)
447
+ dir_iter = new(directory_name)
447
448
  if block_given?
448
449
  begin
449
- yield(dirIt)
450
+ yield(dir_iter)
450
451
  return nil
451
452
  ensure
452
- dirIt.close
453
+ dir_iter.close
453
454
  end
454
455
  end
455
- dirIt
456
+ dir_iter
456
457
  end
457
458
 
458
- def pwd; @mappedZip.pwd; end
459
+ def pwd
460
+ @mapped_zip.pwd
461
+ end
459
462
  alias getwd pwd
460
463
 
461
- def chdir(aDirectoryName)
462
- unless @file.stat(aDirectoryName).directory?
463
- raise Errno::EINVAL, "Invalid argument - #{aDirectoryName}"
464
+ def chdir(directory_name)
465
+ unless @file.stat(directory_name).directory?
466
+ raise Errno::EINVAL, "Invalid argument - #{directory_name}"
464
467
  end
465
- @mappedZip.pwd = @file.expand_path(aDirectoryName)
468
+
469
+ @mapped_zip.pwd = @file.expand_path(directory_name)
466
470
  end
467
471
 
468
- def entries(aDirectoryName)
472
+ def entries(directory_name)
469
473
  entries = []
470
- foreach(aDirectoryName) { |e| entries << e }
474
+ foreach(directory_name) { |e| entries << e }
471
475
  entries
472
476
  end
473
477
 
474
- def glob(*args,&block)
475
- @mappedZip.glob(*args,&block)
478
+ def glob(*args, &block)
479
+ @mapped_zip.glob(*args, &block)
476
480
  end
477
481
 
478
- def foreach(aDirectoryName)
479
- unless @file.stat(aDirectoryName).directory?
480
- raise Errno::ENOTDIR, aDirectoryName
482
+ def foreach(directory_name)
483
+ unless @file.stat(directory_name).directory?
484
+ raise Errno::ENOTDIR, directory_name
481
485
  end
482
- path = @file.expand_path(aDirectoryName)
486
+
487
+ path = @file.expand_path(directory_name)
483
488
  path << '/' unless path.end_with?('/')
484
489
  path = Regexp.escape(path)
485
- subDirEntriesRegex = Regexp.new("^#{path}([^/]+)$")
486
- @mappedZip.each {
487
- |fileName|
488
- match = subDirEntriesRegex.match(fileName)
489
- yield(match[1]) unless match == nil
490
- }
490
+ subdir_entry_regex = Regexp.new("^#{path}([^/]+)$")
491
+ @mapped_zip.each do |filename|
492
+ match = subdir_entry_regex.match(filename)
493
+ yield(match[1]) unless match.nil?
494
+ end
491
495
  end
492
496
 
493
- def delete(entryName)
494
- unless @file.stat(entryName).directory?
495
- raise Errno::EINVAL, "Invalid argument - #{entryName}"
497
+ def delete(entry_name)
498
+ unless @file.stat(entry_name).directory?
499
+ raise Errno::EINVAL, "Invalid argument - #{entry_name}"
496
500
  end
497
- @mappedZip.remove(entryName)
501
+
502
+ @mapped_zip.remove(entry_name)
498
503
  end
499
- alias rmdir delete
504
+ alias rmdir delete
500
505
  alias unlink delete
501
506
 
502
- def mkdir(entryName, permissionInt = 0755)
503
- @mappedZip.mkdir(entryName, permissionInt)
507
+ def mkdir(entry_name, permissions = 0o755)
508
+ @mapped_zip.mkdir(entry_name, permissions)
504
509
  end
505
510
 
506
- def chroot(*args)
507
- raise NotImplementedError, "The chroot() function is not implemented"
511
+ def chroot(*_args)
512
+ raise NotImplementedError, 'The chroot() function is not implemented'
508
513
  end
509
-
510
514
  end
511
515
 
512
516
  class ZipFsDirIterator # :nodoc:all
513
517
  include Enumerable
514
518
 
515
- def initialize(arrayOfFileNames)
516
- @fileNames = arrayOfFileNames
519
+ def initialize(filenames)
520
+ @filenames = filenames
517
521
  @index = 0
518
522
  end
519
523
 
520
524
  def close
521
- @fileNames = nil
525
+ @filenames = nil
522
526
  end
523
527
 
524
- def each(&aProc)
525
- raise IOError, "closed directory" if @fileNames == nil
526
- @fileNames.each(&aProc)
528
+ def each(&a_proc)
529
+ raise IOError, 'closed directory' if @filenames.nil?
530
+
531
+ @filenames.each(&a_proc)
527
532
  end
528
533
 
529
534
  def read
530
- raise IOError, "closed directory" if @fileNames == nil
531
- @fileNames[(@index+=1)-1]
535
+ raise IOError, 'closed directory' if @filenames.nil?
536
+
537
+ @filenames[(@index += 1) - 1]
532
538
  end
533
539
 
534
540
  def rewind
535
- raise IOError, "closed directory" if @fileNames == nil
541
+ raise IOError, 'closed directory' if @filenames.nil?
542
+
536
543
  @index = 0
537
544
  end
538
545
 
539
- def seek(anIntegerPosition)
540
- raise IOError, "closed directory" if @fileNames == nil
541
- @index = anIntegerPosition
546
+ def seek(position)
547
+ raise IOError, 'closed directory' if @filenames.nil?
548
+
549
+ @index = position
542
550
  end
543
551
 
544
552
  def tell
545
- raise IOError, "closed directory" if @fileNames == nil
553
+ raise IOError, 'closed directory' if @filenames.nil?
554
+
546
555
  @index
547
556
  end
548
557
  end
@@ -552,66 +561,74 @@ module Zip
552
561
  class ZipFileNameMapper # :nodoc:all
553
562
  include Enumerable
554
563
 
555
- def initialize(zipFile)
556
- @zipFile = zipFile
557
- @pwd = "/"
564
+ def initialize(zip_file)
565
+ @zip_file = zip_file
566
+ @pwd = '/'
558
567
  end
559
568
 
560
569
  attr_accessor :pwd
561
570
 
562
- def find_entry(fileName)
563
- @zipFile.find_entry(expand_to_entry(fileName))
571
+ def find_entry(filename)
572
+ @zip_file.find_entry(expand_to_entry(filename))
564
573
  end
565
574
 
566
- def get_entry(fileName)
567
- @zipFile.get_entry(expand_to_entry(fileName))
575
+ def get_entry(filename)
576
+ @zip_file.get_entry(expand_to_entry(filename))
568
577
  end
569
578
 
570
- def get_input_stream(fileName, &aProc)
571
- @zipFile.get_input_stream(expand_to_entry(fileName), &aProc)
579
+ def get_input_stream(filename, &a_proc)
580
+ @zip_file.get_input_stream(expand_to_entry(filename), &a_proc)
572
581
  end
573
582
 
574
- def get_output_stream(fileName, permissionInt = nil, &aProc)
575
- @zipFile.get_output_stream(expand_to_entry(fileName), permissionInt, &aProc)
583
+ def get_output_stream(filename, permissions = nil, &a_proc)
584
+ @zip_file.get_output_stream(
585
+ expand_to_entry(filename), permissions, &a_proc
586
+ )
576
587
  end
577
588
 
578
- def read(fileName)
579
- @zipFile.read(expand_to_entry(fileName))
589
+ def glob(pattern, *flags, &block)
590
+ @zip_file.glob(expand_to_entry(pattern), *flags, &block)
580
591
  end
581
592
 
582
- def remove(fileName)
583
- @zipFile.remove(expand_to_entry(fileName))
593
+ def read(filename)
594
+ @zip_file.read(expand_to_entry(filename))
584
595
  end
585
596
 
586
- def rename(fileName, newName, &continueOnExistsProc)
587
- @zipFile.rename(expand_to_entry(fileName), expand_to_entry(newName),
588
- &continueOnExistsProc)
597
+ def remove(filename)
598
+ @zip_file.remove(expand_to_entry(filename))
589
599
  end
590
600
 
591
- def mkdir(fileName, permissionInt = 0755)
592
- @zipFile.mkdir(expand_to_entry(fileName), permissionInt)
601
+ def rename(filename, new_name, &continue_on_exists_proc)
602
+ @zip_file.rename(
603
+ expand_to_entry(filename),
604
+ expand_to_entry(new_name),
605
+ &continue_on_exists_proc
606
+ )
607
+ end
608
+
609
+ def mkdir(filename, permissions = 0o755)
610
+ @zip_file.mkdir(expand_to_entry(filename), permissions)
593
611
  end
594
612
 
595
613
  # Turns entries into strings and adds leading /
596
614
  # and removes trailing slash on directories
597
615
  def each
598
- @zipFile.each {
599
- |e|
600
- yield("/"+e.to_s.chomp("/"))
601
- }
616
+ @zip_file.each do |e|
617
+ yield('/' + e.to_s.chomp('/'))
618
+ end
602
619
  end
603
620
 
604
- def expand_path(aPath)
605
- expanded = aPath.start_with?("/") ? aPath : ::File.join(@pwd, aPath)
606
- expanded.gsub!(/\/\.(\/|$)/, "")
607
- expanded.gsub!(/[^\/]+\/\.\.(\/|$)/, "")
608
- expanded.empty? ? "/" : expanded
621
+ def expand_path(path)
622
+ expanded = path.start_with?('/') ? path : ::File.join(@pwd, path)
623
+ expanded.gsub!(/\/\.(\/|$)/, '')
624
+ expanded.gsub!(/[^\/]+\/\.\.(\/|$)/, '')
625
+ expanded.empty? ? '/' : expanded
609
626
  end
610
627
 
611
628
  private
612
629
 
613
- def expand_to_entry(aPath)
614
- expand_path(aPath)[1..-1]
630
+ def expand_to_entry(path)
631
+ expand_path(path)[1..-1]
615
632
  end
616
633
  end
617
634
  end