@@ -43,7 +43,7 @@ module Zip
43
43
# interface for accessing the filesystem, ie. the File and Dir classes.
44
44
45
45
class File < CentralDirectory
46
- CREATE = 1
46
+ CREATE = true
47
47
SPLIT_SIGNATURE = 0x08074b50
48
48
ZIP64_EOCD_SIGNATURE = 0x06064b50
49
49
MAX_SEGMENT_SIZE = 3_221_225_472
@@ -64,20 +64,19 @@ class File < CentralDirectory
64
64
65
65
# Opens a zip archive. Pass true as the second parameter to create
66
66
# a new archive if it doesn't exist already.
67
- def initialize ( file_name , create = nil , buffer = false , options = { } )
67
+ def initialize ( file_name , create = false , buffer = false , options = { } )
68
68
super ( )
69
69
@name = file_name
70
70
@comment = ''
71
- @create = create
71
+ @create = create ? true : false # allow any truthy value to mean true
72
72
case
73
73
when !buffer && ::File . size? ( file_name )
74
- @create = nil
74
+ @create = false
75
75
@file_permissions = ::File . stat ( file_name ) . mode
76
76
::File . open ( name , 'rb' ) do |f |
77
77
read_from_stream ( f )
78
78
end
79
- when create
80
- @file_permissions = create_file_permissions
79
+ when @create
81
80
@entry_set = EntrySet . new
82
81
when ::File . zero? ( file_name )
83
82
raise Error , "File #{ file_name } has zero size. Did you mean to pass the create flag?"
@@ -95,7 +94,7 @@ class << self
95
94
# Same as #new. If a block is passed the ZipFile object is passed
96
95
# to the block and is automatically closed afterwards just as with
97
96
# ruby's builtin File.open method.
98
- def open ( file_name , create = nil )
97
+ def open ( file_name , create = false )
99
98
zf = ::Zip ::File . new ( file_name , create )
100
99
return zf unless block_given?
101
100
begin
@@ -340,7 +339,7 @@ def commit_required?
340
339
@entry_set . each do |e |
341
340
return true if e . dirty
342
341
end
343
- @comment != @stored_comment || @entry_set != @stored_entries || @create == :: Zip :: File :: CREATE
342
+ @comment != @stored_comment || @entry_set != @stored_entries || @create
344
343
end
345
344
346
345
# Searches for entry with the specified name. Returns nil if
@@ -403,27 +402,18 @@ def check_file(path)
403
402
end
404
403
405
404
def on_success_replace
406
- tmp_filename = create_tmpname
407
- if yield tmp_filename
408
- ::File . rename ( tmp_filename , name )
409
- ::File . chmod ( @file_permissions , name ) if defined? ( @file_permissions )
410
- end
411
- ensure
412
- ::File . unlink ( tmp_filename ) if ::File . exist? ( tmp_filename )
413
- end
414
-
415
- def create_tmpname
416
405
dirname , basename = ::File . split ( name )
417
- ::Dir ::Tmpname . create ( basename , dirname ) do |tmpname |
418
- opts = { perm : 0600 , mode : ::File ::CREAT | ::File ::WRONLY | ::File ::EXCL }
419
- f = File . open ( tmpname , opts )
420
- f . close
406
+ ::Dir ::Tmpname . create ( basename , dirname ) do |tmp_filename |
407
+ begin
408
+ if yield tmp_filename
409
+ ::File . rename ( tmp_filename , name )
410
+ ::File . chmod ( @file_permissions , name ) unless @create
411
+ end
412
+ ensure
413
+ ::File . unlink ( tmp_filename ) if ::File . exist? ( tmp_filename )
414
+ end
421
415
end
422
416
end
423
-
424
- def create_file_permissions
425
- ::Zip ::RUNNING_ON_WINDOWS ? 0644 : 0666 - ::File . umask
426
- end
427
417
end
428
418
end
429
419
0 commit comments