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.