class Wright::Util::FilePermissions

Helper class to manage file permissions.

Constants

VALID_FILETYPES

Attributes

filename[RW]

@return [String] the filename

filetype[R]
gid[RW]

@return [Integer] the file's intended gid

mode[R]

@return [Integer] the file's intended mode

uid[RW]

@return [Integer] the file's intended uid

Public Class Methods

create_from_resource(resource, filetype) click to toggle source

Creates a FilePermissions object from a {Wright::Resource::File} or {Wright::Resource::Directory}.

@param resource [Wright::Resource::File,

Wright::Resource::Directory] the resource object

@param filetype [Symbol] the file's type (:file or :directory)

@return [Wright::Util::FilePermissions] the FilePermissions

object

@raise [ArgumentError] if the user or group are invalid

# File lib/wright/util/file_permissions.rb, line 18
def self.create_from_resource(resource, filetype)
  filepath = ::File.expand_path(resource.name)
  p = Wright::Util::FilePermissions.new(filepath, filetype)
  p.uid = Wright::Util::User.user_to_uid(resource.owner)
  p.gid = Wright::Util::User.group_to_gid(resource.group)
  p.mode = resource.mode
  p
end
new(filename, filetype) click to toggle source

Initializes a FilePermissions object.

@param filename [String] the file's name @param filetype [Symbol] the file's type (:file or :directory)

# File lib/wright/util/file_permissions.rb, line 46
def initialize(filename, filetype)
  unless VALID_FILETYPES.include?(filetype)
    fail ArgumentError, "Invalid filetype '#{filetype}'"
  end
  @filename = filename
  @filetype = filetype
end

Public Instance Methods

current_gid() click to toggle source

@return [Integer] the file's current group's gid

# File lib/wright/util/file_permissions.rb, line 99
def current_gid
  Wright::Util::File.file_group(filename)
end
current_mode() click to toggle source

@return [Integer] the file's current mode

# File lib/wright/util/file_permissions.rb, line 89
def current_mode
  Wright::Util::File.file_mode(filename)
end
current_uid() click to toggle source

@return [Integer] the file's current owner's uid

# File lib/wright/util/file_permissions.rb, line 94
def current_uid
  Wright::Util::File.file_owner(filename)
end
mode=(mode) click to toggle source

@return [Integer] the file's target mode

# File lib/wright/util/file_permissions.rb, line 55
def mode=(mode)
  if mode.nil?
    @mode = nil
    return
  end

  mode_i = File.numeric_mode_to_i(mode)
  unless mode_i
    base_mode_i = ::File.exist?(filename) ? current_mode : default_mode
    mode_i = File.symbolic_mode_to_i(mode, base_mode_i, filetype)
  end
  @mode = mode_i
end
update() click to toggle source

Updates the file's uid, gid and mode.

@return [void]

# File lib/wright/util/file_permissions.rb, line 83
def update
  ::File.chmod(mode, filename) if mode
  ::File.chown(uid, gid, filename) if uid || gid
end
uptodate?() click to toggle source

Checks if the file's uid, gid and mode are up-to-date @return [Bool] true if the file is up to date, false

otherwise
# File lib/wright/util/file_permissions.rb, line 72
def uptodate?
  if ::File.exist?(filename)
    uid_uptodate? && gid_uptodate? && mode_uptodate?
  else
    false
  end
end

Private Instance Methods

default_mode() click to toggle source
# File lib/wright/util/file_permissions.rb, line 119
def default_mode
  case filetype
  when :file
    ~::File.umask & 0666
  when :directory
    ~::File.umask & 0777
  end
end
gid_uptodate?() click to toggle source
# File lib/wright/util/file_permissions.rb, line 111
def gid_uptodate?
  gid.nil? || current_gid == gid
end
mode_uptodate?() click to toggle source
# File lib/wright/util/file_permissions.rb, line 115
def mode_uptodate?
  mode.nil? || current_mode == mode
end
uid_uptodate?() click to toggle source
# File lib/wright/util/file_permissions.rb, line 107
def uid_uptodate?
  uid.nil? || current_uid == uid
end