class FakeFS::Dir
FakeFs Dir class
Attributes
path[R]
Public Class Methods
[](*pattern)
click to toggle source
# File lib/fakefs/dir.rb, line 64 def self.[](*pattern) glob pattern end
_check_for_valid_file(path)
click to toggle source
# File lib/fakefs/dir.rb, line 7 def self._check_for_valid_file(path) fail Errno::ENOENT, path unless FileSystem.find(path) end
chdir(dir, &blk)
click to toggle source
# File lib/fakefs/dir.rb, line 72 def self.chdir(dir, &blk) FileSystem.chdir(dir, &blk) end
chroot(_string)
click to toggle source
# File lib/fakefs/dir.rb, line 76 def self.chroot(_string) fail NotImplementedError end
delete(string)
click to toggle source
# File lib/fakefs/dir.rb, line 80 def self.delete(string) _check_for_valid_file(string) fail Errno::ENOTEMPTY, string unless FileSystem.find(string).empty? FileSystem.delete(string) end
entries(dirname, _opts = {})
click to toggle source
# File lib/fakefs/dir.rb, line 87 def self.entries(dirname, _opts = {}) _check_for_valid_file(dirname) Dir.new(dirname).map { |file| File.basename(file) } end
exists?(path)
click to toggle source
# File lib/fakefs/dir.rb, line 68 def self.exists?(path) File.exist?(path) && File.directory?(path) end
Also aliased as: exist?
foreach(dirname) { |file| ... }
click to toggle source
# File lib/fakefs/dir.rb, line 93 def self.foreach(dirname, &_block) Dir.open(dirname) { |file| yield file } end
glob(pattern, _flags = 0, &block)
click to toggle source
# File lib/fakefs/dir.rb, line 97 def self.glob(pattern, _flags = 0, &block) matches_for_pattern = lambda do |matcher| [FileSystem.find(matcher) || []].flatten.map do |e| if Dir.pwd.match(/\A\/?\z/) || !e.to_s.match(/\A#{Dir.pwd}\/?/) e.to_s else e.to_s.match(/\A#{Dir.pwd}\/?/).post_match end end.sort end if pattern.is_a? Array files = pattern.map do |matcher| matches_for_pattern.call matcher end.flatten else files = matches_for_pattern.call pattern end block_given? ? files.each { |file| block.call(file) } : files end
home(user = nil)
click to toggle source
# File lib/fakefs/dir.rb, line 121 def self.home(user = nil) RealDir.home(user) end
mkdir(string, _integer = 0)
click to toggle source
# File lib/fakefs/dir.rb, line 126 def self.mkdir(string, _integer = 0) FileUtils.mkdir(string) end
mktmpdir(prefix_suffix = nil, tmpdir = nil) { |path| ... }
click to toggle source
This code has been borrowed from Rubinius
# File lib/fakefs/dir.rb, line 204 def self.mktmpdir(prefix_suffix = nil, tmpdir = nil) case prefix_suffix when nil prefix = 'd' suffix = '' when String prefix = prefix_suffix suffix = '' when Array prefix = prefix_suffix[0] suffix = prefix_suffix[1] else fail ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}" end t = Time.now.strftime('%Y%m%d') n = nil begin path = "#{tmpdir}/#{prefix}#{t}-#{$PID}-#{rand(0x100000000).to_s(36)}" path << "-#{n}" if n path << suffix mkdir(path, 0700) rescue Errno::EEXIST n ||= 0 n += 1 retry end if block_given? begin yield path ensure require 'fileutils' # This here was using FileUtils.remove_entry_secure instead of just # .rm_r. However, the security concerns that apply to # .rm_r/.remove_entry_secure shouldn't apply to a test fake # filesystem. :^) FileUtils.rm_r path end else path end end
new(string)
click to toggle source
# File lib/fakefs/dir.rb, line 11 def initialize(string) self.class._check_for_valid_file(string) @path = FileSystem.normalize_path(string) @open = true @pointer = 0 @contents = ['.', '..'] + FileSystem.find(@path).entries end
open(string) { |file| ... }
click to toggle source
# File lib/fakefs/dir.rb, line 130 def self.open(string, &_block) if block_given? Dir.new(string).each { |file| yield(file) } else Dir.new(string) end end
pwd()
click to toggle source
# File lib/fakefs/dir.rb, line 142 def self.pwd FileSystem.current_dir.to_s end
Also aliased as: getwd
tmpdir()
click to toggle source
# File lib/fakefs/dir.rb, line 138 def self.tmpdir '/tmp' end
Public Instance Methods
close()
click to toggle source
# File lib/fakefs/dir.rb, line 20 def close @open = false @pointer = nil @contents = nil nil end
each() { |f| ... }
click to toggle source
# File lib/fakefs/dir.rb, line 27 def each(&_block) while (f = read) yield f end end
pos()
click to toggle source
# File lib/fakefs/dir.rb, line 33 def pos @pointer end
pos=(integer)
click to toggle source
# File lib/fakefs/dir.rb, line 37 def pos=(integer) @pointer = integer end
read()
click to toggle source
# File lib/fakefs/dir.rb, line 41 def read fail IOError, 'closed directory' if @pointer.nil? n = @contents[@pointer] @pointer += 1 return unless n if n.to_s[0, path.size + 1] == path + '/' n.to_s[path.size + 1..-1] else n.to_s end end
rewind()
click to toggle source
# File lib/fakefs/dir.rb, line 54 def rewind @pointer = 0 end
seek(integer)
click to toggle source
# File lib/fakefs/dir.rb, line 58 def seek(integer) fail IOError, 'closed directory' if @pointer.nil? @pointer = integer @contents[integer] end