Class: SafeFile
- Inherits:
-
Object
- Object
- SafeFile
- Defined in:
- lib/ndr_support/safe_file.rb
Class Method Summary collapse
- .basename(file_name, suffix = :none) ⇒ Object
- .basename_file ⇒ Object
- .delete(*list) ⇒ Object
- .directory?(file_name) ⇒ Boolean
- .dirname(path) ⇒ Object
- .exist?(file_name) ⇒ Boolean
- .exists?(file_name) ⇒ Boolean
- .extname(file_name) ⇒ Object
- .file?(file_name) ⇒ Boolean
- .get_fname_mode_prms(*args) ⇒ Object
- .open(*args) {|f| ... } ⇒ Object
- .read(file_name) ⇒ Object
- .readlines(*args) ⇒ Object
- .safepath_to_string(fname) ⇒ Object
- .verify(file_names, prm = nil) ⇒ Object
- .verify_mode(file_name, mode) ⇒ Object
- .zero?(file_name) ⇒ Boolean
Instance Method Summary collapse
- #close ⇒ Object
- #each(*args, &block) ⇒ Object (also: #each_line)
-
#initialize(*args) ⇒ SafeFile
constructor
A new instance of SafeFile.
- #path ⇒ Object
- #read ⇒ Object
- #write(data) ⇒ Object
Constructor Details
#initialize(*args) ⇒ SafeFile
Returns a new instance of SafeFile.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/ndr_support/safe_file.rb', line 2 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 |
Class Method Details
.basename(file_name, suffix = :none) ⇒ Object
91 92 93 94 95 96 97 98 |
# File 'lib/ndr_support/safe_file.rb', line 91 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 ⇒ Object
105 106 107 108 |
# File 'lib/ndr_support/safe_file.rb', line 105 def self.basename_file # SECURE: 02-08-2012 TPG Can't assign to __FILE__ File.basename(__FILE__) end |
.delete(*list) ⇒ Object
117 118 119 120 121 122 123 |
# File 'lib/ndr_support/safe_file.rb', line 117 def self.delete(*list) verify list, 'w' list.each do |file| File.delete(file) if File.exist?(file) end.length end |
.directory?(file_name) ⇒ Boolean
67 68 69 70 |
# File 'lib/ndr_support/safe_file.rb', line 67 def self.directory?(file_name) verify file_name File.directory?(file_name) end |
.dirname(path) ⇒ Object
110 111 112 113 114 115 |
# File 'lib/ndr_support/safe_file.rb', line 110 def self.dirname(path) verify path res = path.clone res.path = File.dirname(path) res end |
.exist?(file_name) ⇒ Boolean
72 73 74 |
# File 'lib/ndr_support/safe_file.rb', line 72 def self.exist?(file_name) self.exists?(file_name) end |
.exists?(file_name) ⇒ Boolean
76 77 78 79 |
# File 'lib/ndr_support/safe_file.rb', line 76 def self.exists?(file_name) verify file_name File.exist?(file_name) end |
.extname(file_name) ⇒ Object
51 52 53 54 |
# File 'lib/ndr_support/safe_file.rb', line 51 def self.extname(file_name) verify file_name File.extname(file_name) end |
.file?(file_name) ⇒ Boolean
81 82 83 84 |
# File 'lib/ndr_support/safe_file.rb', line 81 def self.file?(file_name) verify file_name File.file?(file_name) end |
.get_fname_mode_prms(*args) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/ndr_support/safe_file.rb', line 155 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 if args[1].class != Fixnum and args[1].class != String if args[1].class == Fixnum 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 if args[1].class != String or args[2].class != Fixnum 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 |
.open(*args) {|f| ... } ⇒ Object
19 20 21 22 23 24 25 |
# File 'lib/ndr_support/safe_file.rb', line 19 def self.open(*args) return SafeFile.new(*args) unless block_given? f = SafeFile.new(*args) yield f f.close end |
.read(file_name) ⇒ Object
56 57 58 59 |
# File 'lib/ndr_support/safe_file.rb', line 56 def self.read(file_name) verify file_name, 'r' File.read(file_name) end |
.readlines(*args) ⇒ Object
61 62 63 64 65 |
# File 'lib/ndr_support/safe_file.rb', line 61 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) ⇒ Object
100 101 102 103 |
# File 'lib/ndr_support/safe_file.rb', line 100 def self.safepath_to_string(fname) verify fname fname.to_s end |
.verify(file_names, prm = nil) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/ndr_support/safe_file.rb', line 131 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.}" unless file_name..include?(p) end end end end |
.verify_mode(file_name, mode) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/ndr_support/safe_file.rb', line 143 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) ⇒ Boolean
86 87 88 89 |
# File 'lib/ndr_support/safe_file.rb', line 86 def self.zero?(file_name) verify file_name File.zero?(file_name) end |
Instance Method Details
#close ⇒ Object
27 28 29 |
# File 'lib/ndr_support/safe_file.rb', line 27 def close @file.close end |
#each(*args, &block) ⇒ Object Also known as: each_line
41 42 43 44 |
# File 'lib/ndr_support/safe_file.rb', line 41 def each(*args, &block) verify @file_name, 'r' @file.each(*args, &block) end |
#path ⇒ Object
47 48 49 |
# File 'lib/ndr_support/safe_file.rb', line 47 def path @file_name.clone end |
#read ⇒ Object
31 32 33 34 |
# File 'lib/ndr_support/safe_file.rb', line 31 def read verify @file_name, 'r' @file.read end |
#write(data) ⇒ Object
36 37 38 39 |
# File 'lib/ndr_support/safe_file.rb', line 36 def write(data) verify @file_name, 'w' @file.write(data) end |