lib/r509/io_helpers.rb in r509-0.9.2 vs lib/r509/io_helpers.rb in r509-0.10.0
- old
+ new
@@ -1,46 +1,51 @@
module R509
# helper methods for I/O
+ # @private
module IOHelpers
# Writes data into an IO or file
# @param [String, #write] filename_or_io Either a string of the path for
# the file that you'd like to write, or an IO-like object.
# @param [String] data The data that we want to write
- def self.write_data(filename_or_io, data)
+ # @param [String] mode The write mode
+ def self.write_data(filename_or_io, data, mode='wb:ascii-8bit')
if filename_or_io.respond_to?(:write)
+ if filename_or_io.kind_of?(StringIO) and mode != "a:ascii-8bit"
+ # Writing to a StringIO in a non-append mode. This requires
+ # us to rewind and truncate it first.
+ filename_or_io.rewind()
+ filename_or_io.truncate(0)
+ end
filename_or_io.write(data)
else
- begin
- file = File.open(filename_or_io, 'wb:ascii-8bit')
- return file.write(data)
- ensure
- file.close()
+ return File.open(filename_or_io, mode) do |f|
+ f.write(data)
end
end
end
# Reads data from an IO or file
# @param [String, #read] filename_or_io Either a string of the path for
# the file that you'd like to read, or an IO-like object.
def self.read_data(filename_or_io)
if filename_or_io.respond_to?(:read)
+ if filename_or_io.kind_of?(StringIO)
+ filename_or_io.rewind()
+ end
filename_or_io.read()
else
- begin
- file = File.open(filename_or_io, 'rb:ascii-8bit')
- return file.read()
- ensure
- file.close() unless file.nil?
+ return File.open(filename_or_io, 'rb:ascii-8bit') do |f|
+ f.read
end
end
end
# Writes data into an IO or file
# @param [String, #write] filename_or_io Either a string of the path for
# the file that you'd like to write, or an IO-like object.
# @param [String] data The data that we want to write
- def write_data(filename_or_io, data)
- IOHelpers.write_data(filename_or_io, data)
+ def write_data(filename_or_io, data, mode='wb:ascii-8bit')
+ IOHelpers.write_data(filename_or_io, data, mode)
end
# Reads data from an IO or file
# @param [String, #read] filename_or_io Either a string of the path for
# the file that you'd like to read, or an IO-like object.