class SafeFile
Public Class Methods
basename(file_name, suffix = :none)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 93 def self.basename(file_name, suffix = :none) verify file_name if suffix == :none File.basename(file_name) else File.basename(file_name, suffix) end end
basename_file()
click to toggle source
# File lib/ndr_support/safe_file.rb, line 107 def self.basename_file # SECURE: 02-08-2012 TPG Can't assign to __FILE__ File.basename(__FILE__) end
delete(*list)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 119 def self.delete(*list) verify list, 'w' list.each do |file| File.delete(file) if File.exist?(file) end.length end
directory?(file_name)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 69 def self.directory?(file_name) verify file_name File.directory?(file_name) end
dirname(path)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 112 def self.dirname(path) verify path res = path.clone res.path = File.dirname(path) res end
exist?(file_name)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 74 def self.exist?(file_name) self.exists?(file_name) end
exists?(file_name)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 78 def self.exists?(file_name) verify file_name File.exist?(file_name) end
extname(file_name)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 53 def self.extname(file_name) verify file_name File.extname(file_name) end
file?(file_name)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 83 def self.file?(file_name) verify file_name File.file?(file_name) end
get_fname_mode_prms(*args)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 157 def self.get_fname_mode_prms(*args) case args.length when 1 verify_mode(args[0], 'r') fname = args[0] mode = 'r' prms = nil when 2 fail ArgumentError unless args[1].is_a?(Integer) || args[1].is_a?(String) if args[1].is_a?(Integer) verify_mode(args[0], 'r') mode = 'r' prms = args[1] else verify_mode(args[0], args[1]) mode = args[1] prms = nil end fname = args[0] when 3 fail ArgumentError unless args[1].is_a?(String) && args[2].is_a?(Integer) verify_mode(args[0], args[1]) fname = args[0] mode = args[1] prms = args[2] else fail ArgumentError, "Incorrect number of arguments #{args.length}" end [fname, mode, prms] end
new(*args)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 4 def initialize(*args) a = self.class.get_fname_mode_prms(*args) fname = a[0] mode = a[1] prms = a[2] if prms @file = File.new(fname, mode, prms) else @file = File.new(fname, mode) end # Just in case better clone the object # Ruby object are passed by reference @file_name = fname.clone end
open(*args) { |f| ... }
click to toggle source
# File lib/ndr_support/safe_file.rb, line 21 def self.open(*args) return SafeFile.new(*args) unless block_given? f = SafeFile.new(*args) yield f f.close end
read(file_name)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 58 def self.read(file_name) verify file_name, 'r' File.read(file_name) end
readlines(*args)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 63 def self.readlines(*args) fail ArgumentError, "Incorrect number of arguments - #{args.length}" if args.length > 2 or args.length == 0 verify args[0], 'r' File.readlines(*args) end
safepath_to_string(fname)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 102 def self.safepath_to_string(fname) verify fname fname.to_s end
verify(file_names, prm = nil)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 133 def self.verify(file_names, prm = nil) [file_names].flatten.each do |file_name| fail ArgumentError, "file_name should be of type SafePath, but it is #{file_name.class}" unless file_name.class == SafePath if prm [prm].flatten.each do |p| fail SecurityError, "Permissions denied. Cannot access the file #{file_name} with permissions #{prm}. The permissions are #{file_name.permissions}" unless file_name.permissions.include?(p) end end end end
verify_mode(file_name, mode)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 145 def self.verify_mode(file_name, mode) if mode.match(/\A(r\+)|(w\+)|(a\+)\Z/) verify file_name, ['w', 'r'] elsif mode.match(/\Aw|a\Z/) verify file_name, ['w'] elsif mode.match(/\Ar\Z/) verify file_name, ['r'] else fail ArgumentError, "Incorrect mode. It should be one of: 'r', 'w', 'r+', 'w+', 'a', 'a+'" end end
zero?(file_name)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 88 def self.zero?(file_name) verify file_name File.zero?(file_name) end
Public Instance Methods
close()
click to toggle source
# File lib/ndr_support/safe_file.rb, line 29 def close @file.close end
each(*args, &block)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 43 def each(*args, &block) verify @file_name, 'r' @file.each(*args, &block) end
Also aliased as: each_line
path()
click to toggle source
# File lib/ndr_support/safe_file.rb, line 49 def path @file_name.clone end
read()
click to toggle source
# File lib/ndr_support/safe_file.rb, line 33 def read verify @file_name, 'r' @file.read end
write(data)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 38 def write(data) verify @file_name, 'w' @file.write(data) end
Private Instance Methods
verify(file_names, prm = nil)
click to toggle source
# File lib/ndr_support/safe_file.rb, line 129 def verify(file_names, prm = nil) self.class.verify(file_names, prm) end