class File

Constants

DUPLEX
SETENC_BY_BOM

Note: need to verify ::IO::SETENC_BY_BOM value before using:

TEXT

What is the flag value under Win32?

TTY
WSPLIT
WSPLIT_INITIALIZED

Public Class Methods

find_file_mimetype(the_file=nil) click to toggle source
# File lib/gxg/gxg_augmented.rb, line 847
def self.find_file_mimetype(the_file=nil)
  if the_file.is_a?(::String)
    if (/.*(?:\\|\/)(.+)$/.match(the_file.to_s) || the_file.to_s.split("/").size > 0 || the_file == "/")
      if ::File.directory?(the_file)
        raise ArgumentError, "You tried to look at a directory, not a File. (#{the_file.inspect})."
      else
        the_file = ::File.open(the_file, "r")
      end
    else
      raise ArgumentError, "You MUST provide a valid File path."
    end
  end
  if the_file.is_a?(::File)
    the_file.file_type()
  else
    raise ArgumentError, "You MUST provide a valid File object."
  end
end
gxg_permissions_to_mode(permissions={:owner => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }, :group => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }, :other => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }}, type = :file) click to toggle source
# File lib/gxg/gxg_augmented.rb, line 1120
def self.gxg_permissions_to_mode(permissions={:owner => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }, :group => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }, :other => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }}, type = :file)
  result = 0
  if permissions.is_a?(::Hash)
    octet = 0
    octet_string = "0"
    unix_permissions = ::File.gxg_permissions_to_unix(permissions,type)
    #
    unix_permissions.each_char_with_index do |character, index|
      #
      if (1..3).include?(index)
        case index
        when 1
          unless character == "-"
            octet += 4
          end
        when 2
          unless character == "-"
            octet += 2
          end
        when 3
          unless character == "-"
            octet += 1
          end
        end
        if index == 3
          octet_string << octet.to_s
          octet = 0
        end
      end
      #
      if (4..6).include?(index)
        case index
        when 4
          unless character == "-"
            octet += 4
          end
        when 5
          unless character == "-"
            octet += 2
          end
        when 6
          unless character == "-"
            octet += 1
          end
        end
        if index == 6
          octet_string << octet.to_s
          octet = 0
        end
      end
      #
      if (7..9).include?(index)
        case index
        when 7
          unless character == "-"
            octet += 4
          end
        when 8
          unless character == "-"
            octet += 2
          end
        when 9
          unless character == "-"
            octet += 1
          end
        end
        if index == 9
          octet_string << octet.to_s
          octet = 0
        end
      end
      #
      result = octet_string.to_i(base=8)
    end
    #
  else
    raise ArgumentError, "You MUST provide a Hash with :owner, :group, and :other permission sub-hashes of true/false flags"
  end
  result
end
gxg_permissions_to_unix(permissions={:owner => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }, :group => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }, :other => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }}, type = :file) click to toggle source
# File lib/gxg/gxg_augmented.rb, line 1027
def self.gxg_permissions_to_unix(permissions={:owner => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }, :group => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }, :other => { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }}, type = :file)
  result = "----------"
  if permissions.is_a?(::Hash)
    accumulator = ""
    raw_data = "----------"
    write_permissions = [:write, :create, :destroy, :rename, :move]
    case type
    when :directory
      accumulator << "d"
    when :symlink
      accumulator << "l"
    when :file
      accumulator << "-"
    else
      raise ArgumentError, "You MUST provide a valid file system entity type: :file, :directory or :symlink."
    end
    raw_data.each_char_with_index do |character, index|
      case index
      when 1
        if permissions[:owner][:read]
          accumulator << "r"
        else
          accumulator << character
        end
      when 2
        write_permissions.each do |the_perm|
          if permissions[:owner][(the_perm)]
            accumulator << "w"
            break
          end
        end
        if accumulator[-1] != "w"
          accumulator << character
        end
      when 3
        if permissions[:owner][:execute]
          accumulator << "x"
        else
          accumulator << character
        end
      when 4
        if permissions[:group][:read]
          accumulator << "r"
        else
          accumulator << character
        end
      when 5
        write_permissions.each do |the_perm|
          if permissions[:group][(the_perm)]
            accumulator << "w"
            break
          end
        end
        if accumulator[-1] != "w"
          accumulator << character
        end
      when 6
        if permissions[:group][:execute]
          accumulator << "x"
        else
          accumulator << character
        end
      when 7
        if permissions[:other][:read]
          accumulator << "r"
        else
          accumulator << character
        end
      when 8
        write_permissions.each do |the_perm|
          if permissions[:other][(the_perm)]
            accumulator << "w"
            break
          end
        end
        if accumulator[-1] != "w"
          accumulator << character
        end
      when 9
        if permissions[:other][:execute]
          accumulator << "x"
        else
          accumulator << character
        end
      end
    end
    result = accumulator
  else
    raise ArgumentError, "You MUST provide a Hash with :owner, :group, and :other permission sub-hashes of true/false flags"
  end
  result
end
mode_permission_to_gxg(the_mode=0) click to toggle source
# File lib/gxg/gxg_augmented.rb, line 866
def self.mode_permission_to_gxg(the_mode=0)
  result = {}
  if the_mode.is_a?(::Numeric)
    raw_mode = the_mode.to_s(base=8)
    set_user_id = false
    set_group_id = false
    set_sticky_bit = false
    while raw_mode.size < 4
      raw_mode = ("0" << raw_mode)
    end
    if raw_mode.size > 4
      raw_mode = raw_mode[((raw_mode.size - 4)..-1)].to_s
    end
    #
    if (raw_mode[0].to_i & 4) == 4
      set_user_id = true
    end
    if (raw_mode[0].to_i & 2) == 2
      set_group_id = true
    end
    if (raw_mode[0].to_i & 1) ==  1
      set_sticky_bit = true
    end
    raw_permission = { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }
    result = {:effective => nil, :owner => raw_permission.clone, :group => raw_permission.clone, :other => raw_permission.clone}
    #
    # puts "using: #{raw_mode.inspect}"
    # owner permissions
    if (raw_mode[1].to_i & 4) == 4
      result[:owner][:read] = true
    end
    if (raw_mode[1].to_i & 2) == 2
      result[:owner][:write] = true
      result[:owner][:rename] = true
      result[:owner][:move] = true
      result[:owner][:destroy] = true
      result[:owner][:create] = true
    end
    if (raw_mode[1].to_i & 1) == 1
      result[:owner][:execute] = true
    end
    # group permissions
    if (raw_mode[2].to_i & 4) == 4
      result[:group][:read] = true
    end
    if (raw_mode[2].to_i & 2) == 2
      result[:group][:write] = true
      result[:group][:rename] = true
      result[:group][:move] = true
      result[:group][:destroy] = true
      result[:group][:create] = true
    end
    if (raw_mode[2].to_i & 1) == 1
      result[:group][:execute] = true
    end
    # other permissions
    if (raw_mode[3].to_i & 4) == 4
      result[:other][:read] = true
    end
    if (raw_mode[3].to_i & 2) == 2
      result[:other][:write] = true
      result[:other][:rename] = true
      result[:other][:move] = true
      result[:other][:destroy] = true
      result[:other][:create] = true
    end
    if (raw_mode[3].to_i & 1) == 1
      result[:other][:execute] = true
    end
  else
    raise ArgumentError, "You MUST provide an Integer"
  end
  result
end
mode_permission_to_unix(the_mode=0, type = :file) click to toggle source
# File lib/gxg/gxg_augmented.rb, line 941
def self.mode_permission_to_unix(the_mode=0, type = :file)
  result = "----------"
  if the_mode.is_a?(::Numeric)
    accumulator = ""
    raw_mode = the_mode.to_s(base=8)
    if raw_mode.size < 7
      raw_mode = ("0" << raw_mode)
    end
    set_user_id = false
    set_group_id = false
    set_sticky_bit = false
    if (raw_mode[3].to_i & 4) == 4
      set_user_id = true
    end
    if (raw_mode[3].to_i & 2) == 2
      set_group_id = true
    end
    if (raw_mode[3].to_i & 1) ==  1
      set_sticky_bit = true
    end
    #
    case type.to_s.to_sym
    when :directory
      accumulator << "d"
    when :symlink
      accumulator << "l"
    when :file
      accumulator << "-"
    else
      raise ArgumentError, "You MUST provide a valid file system entity type: :file, :directory or :symlink."
    end
    # owner permissions
    if (raw_mode[1].to_i & 4) == 4
      accumulator << "r"
    else
      accumulator << "-"
    end
    if (raw_mode[1].to_i & 2) == 2
      accumulator << "w"
    else
      accumulator << "-"
    end
    if (raw_mode[1].to_i & 1) == 1
      accumulator << "x"
    else
      accumulator << "-"
    end
    # group permissions
    if (raw_mode[2].to_i & 4) == 4
      accumulator << "r"
    else
      accumulator << "-"
    end
    if (raw_mode[2].to_i & 2) == 2
      accumulator << "w"
    else
      accumulator << "-"
    end
    if (raw_mode[2].to_i & 1) == 1
      accumulator << "x"
    else
      accumulator << "-"
    end
    # other permissions
    if (raw_mode[3].to_i & 4) == 4
      accumulator << "r"
    else
      accumulator << "-"
    end
    if (raw_mode[3].to_i & 2) == 2
      accumulator << "w"
    else
      accumulator << "-"
    end
    if (raw_mode[3].to_i & 1) == 1
      accumulator << "x"
    else
      accumulator << "-"
    end
    result = accumulator
  else
    raise ArgumentError, "You MUST provide an Integer"
  end
  result
end
unix_permissions_to_gxg(permission_string="") click to toggle source
# File lib/gxg/gxg_augmented.rb, line 1201
def self.unix_permissions_to_gxg(permission_string="")
  raw_permission = { :execute => false, :rename => false, :move => false, :destroy => false, :create => false, :write => false, :read => false }
  blank_permissions = {:effective => nil, :owner => raw_permission.clone, :group => raw_permission.clone, :other => raw_permission.clone}
  permission_record = blank_permissions.clone
  #
  if permission_string.is_a?(::String)
    permission_string.each_char_with_index do |character, index|
      #
      case index
      when 1
        if character == "r"
          permission_record[:owner][:read] = true
        end
      when 2
        if character == "w"
          permission_record[:owner][:write] = true
          permission_record[:owner][:rename] = true
          permission_record[:owner][:move] = true
          permission_record[:owner][:destroy] = true
          permission_record[:owner][:create] = true
        end
      when 3
        if character == "x"
          permission_record[:owner][:execute] = true
        end
      when 4
        if character == "r"
          permission_record[:group][:read] = true
        end
      when 5
        if character == "w"
          permission_record[:group][:write] = true
          permission_record[:group][:rename] = true
          permission_record[:group][:move] = true
          permission_record[:group][:destroy] = true
          permission_record[:group][:create] = true
        end
      when 6
        if character == "x"
          permission_record[:group][:execute] = true
        end
      when 7
        if character == "r"
          permission_record[:other][:read] = true
        end
      when 8
        if character == "w"
          permission_record[:other][:write] = true
          permission_record[:other][:rename] = true
          permission_record[:other][:move] = true
          permission_record[:other][:destroy] = true
          permission_record[:other][:create] = true
        end
      when 9
        if character == "x"
          permission_record[:other][:execute] = true
        end
      end
      # No way to calculate Effective Permissions - it will be nil consequently.
      #
    end
    result = permission_record
  else
    result = nil
    raise ArgumentError, "You MUST supply a valid unix permission String"
  end
  result
end

Public Instance Methods

file_type() click to toggle source
# File lib/gxg/gxg_augmented.rb, line 1270
def file_type()
  # TODO: return GxG-UFS value as well.
  type = ::MimeMagic.by_path(self.path)
  {:mime_type => type.type(), :subtype => type.subtype(), :mediatype => type.mediatype(), :extensions => type.extensions(), :comment => type.comment(), :ufs => nil}
end