class GxG::IO::File
Public Class Methods
new(*args)
click to toggle source
As of Ruby 1.9.2: if a file is not set to :binary mode, it defaults to :text mode. See: www.tutorialspoint.com/ruby/ruby_input_output.htm <file>.stat table: (mode example : 0100664)
0700 rwx mask for owner 0400 r for owner 0200 w for owner 0100 x for owner 0070 rwx mask for group 0040 r for group 0020 w for group 0010 x for group 0007 rwx mask for other 0004 r for other 0002 w for other 0001 x for other 4000 Set user ID on execution 2000 Set group ID on execution 1000 Save swapped text, even after use
Calls superclass method
GxG::IO::IO::new
# File lib/gxg/gxg_io.rb, line 2577 def initialize(*args) if args[0].is_a?(String) the_path = args[0] the_mode = (args[1] || "r") the_permissions = args[2] the_options = args[3] else raise ArgumentError, "filename or path must be passed as a String" end # if the_options params = self.process_parameters(0,the_mode,the_options) else params = self.process_parameters(0,the_mode) end # mode_flags = {:binary => ::File::BINARY, :text => ::File::TEXT, :read => ::File::RDONLY, :write => ::File::WRONLY, :readwrite => ::File::RDWR, :create => ::File::CREAT, :overwrite => ::File::TRUNC, :append => ::File::APPEND} modes = GxG::IO::IO::valid_mode_set({:type => :file, :read => true, :write => true, :text => true, :binary => true}) the_mode_used = nil mode_string = "" mode_numeric = 0 # if params[:mode] if params[:mode].index(:binary) if params[:mode].index(:read) if params[:mode].index(:write) mode_string = "binary_readwrite" mode_numeric = (mode_numeric | mode_flags[:binary] | mode_flags[:readwrite]) else mode_string = "binary_read" mode_numeric = (mode_numeric | mode_flags[:binary] | mode_flags[:read]) end else if params[:mode].index(:write) mode_string = "binary_write" mode_numeric = (mode_numeric | mode_flags[:binary] | mode_flags[:write]) end end else if params[:mode].index(:read) if params[:mode].index(:write) mode_string = "text_readwrite" mode_numeric = (mode_numeric | mode_flags[:text] | mode_flags[:readwrite]) else mode_string = "text_read" mode_numeric = (mode_numeric | mode_flags[:text] | mode_flags[:read]) end else if params[:mode].index(:write) mode_string = "text_write" mode_numeric = (mode_numeric | mode_flags[:text] | mode_flags[:write]) end end end if (params[:mode].index(:overwrite) || params[:mode].index(:truncate) ) mode_string << "_overwrite" mode_numeric = (mode_numeric | mode_flags[:overwrite]) else if params[:mode].index(:append) mode_string << "_append" mode_numeric = (mode_numeric | mode_flags[:append]) end end # [:read, :write, :readwrite, :overwrite, :truncate:, :append, :text, :binary] modes.to_enum.each do |mode_entry| if (mode_entry[:synonyms].include?(mode_string.to_sym) && mode_entry[:synonyms].include?(mode_numeric)) the_mode_used = mode_entry break end # end if (the_mode_used) options = {} the_mode = nil if params[:external_encoding] options[:external_encoding] = params.delete(:external_encoding) end if params[:internal_encoding] #If the value is nil no conversion occurs. if params[:internal_encoding] == params[:external_encoding] options[:internal_encoding] = nil else options[:internal_encoding] = params.delete(:internal_encoding) end end if params[:autoclose] options[:autoclose] = params.delete(:autoclose) end if ::File::exist?(the_path) the_mode = the_mode_used[:if_exist].to_i else if the_mode_used[:if_create] the_mode = the_mode_used[:if_create].to_i else raise ArgumentError, "you cannot operate upon a non-existent file in read-only mode" end end if the_mode file_descriptor = GxG::IO::IO::sysopen(the_path,the_mode) else file_descriptor = nil end # if file_descriptor # if ::File::directory?(the_path) raise ArgumentError, "you cannot operate upon a directory as if it were a file" else if the_permissions super(file_descriptor, the_mode, the_permissions, options) else super(file_descriptor, the_mode, nil, options) end end # else raise Exception, "unable to create a valid file descriptor with: #{args.inspect}" end # else modes_list = [] modes.to_enum.each do |item| modes_list << item[:synonyms] end raise ArgumentError, "#{params[:mode].inspect} is an invalid :mode, use one of the following: #{modes_list.inspect}" end end # @path = the_path self end
Public Instance Methods
to_path()
click to toggle source
# File lib/gxg/gxg_io.rb, line 2709 def to_path() @path.dup end