class Wright::Util::FilePermissions
Helper class to manage file permissions.
Constants
- VALID_FILETYPES
Attributes
@return [String] the filename
@return [Integer] the file's intended gid
@return [Integer] the file's intended mode
@return [Integer] the file's intended uid
Public Class Methods
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
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
@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
@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
@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
@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
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
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
# 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
# File lib/wright/util/file_permissions.rb, line 111 def gid_uptodate? gid.nil? || current_gid == gid end
# File lib/wright/util/file_permissions.rb, line 115 def mode_uptodate? mode.nil? || current_mode == mode end
# File lib/wright/util/file_permissions.rb, line 107 def uid_uptodate? uid.nil? || current_uid == uid end