class FakeFS::Dir

Public Class Methods

[](*pattern) click to toggle source
# File lib/fakefs/dir.rb, line 66
def self.[](*pattern)
  glob pattern
end
_check_for_valid_file(path) click to toggle source
# File lib/fakefs/dir.rb, line 5
def self._check_for_valid_file(path)
  raise Errno::ENOENT, path unless FileSystem.find(path)
end
chdir(dir, &blk) click to toggle source
# File lib/fakefs/dir.rb, line 74
def self.chdir(dir, &blk)
  FileSystem.chdir(dir, &blk)
end
chroot(string) click to toggle source
# File lib/fakefs/dir.rb, line 78
def self.chroot(string)
  raise NotImplementedError
end
delete(string) click to toggle source
# File lib/fakefs/dir.rb, line 82
def self.delete(string)
  _check_for_valid_file(string)
  raise Errno::ENOTEMPTY, string unless FileSystem.find(string).empty?

  FileSystem.delete(string)
end
Also aliased as: rmdir, unlink
entries(dirname, opts = {}) click to toggle source
# File lib/fakefs/dir.rb, line 89
def self.entries(dirname, opts = {})
  _check_for_valid_file(dirname)

  Dir.new(dirname).map { |file| File.basename(file) }
end
exist?(path)
Alias for: exists?
exists?(path) click to toggle source
# File lib/fakefs/dir.rb, line 70
def self.exists?(path)
  File.exists?(path) && File.directory?(path)
end
Also aliased as: exist?
foreach(dirname) { |file| ... } click to toggle source
# File lib/fakefs/dir.rb, line 95
def self.foreach(dirname, &block)
  Dir.open(dirname) { |file| yield file }
end
getwd()
Alias for: pwd
glob(pattern, flags = 0, &block) click to toggle source
# File lib/fakefs/dir.rb, line 99
def self.glob(pattern, flags = 0, &block)
  matches_for_pattern = lambda do |matcher|
    [FileSystem.find(matcher) || []].flatten.map{|e|
      Dir.pwd.match(%r[\A/?\z]) || !e.to_s.match(%r[\A#{Dir.pwd}/?]) ? e.to_s : e.to_s.match(%r[\A#{Dir.pwd}/?]).post_match}.sort
  end

  if pattern.is_a? Array
    files = pattern.collect { |matcher| matches_for_pattern.call matcher }.flatten
  else
    files = matches_for_pattern.call pattern
  end
  return block_given? ? files.each { |file| block.call(file) } : files
end
home(user = nil) click to toggle source
# File lib/fakefs/dir.rb, line 114
def self.home(user = nil)
  RealDir.home(user)
end
mkdir(string, integer = 0) click to toggle source
# File lib/fakefs/dir.rb, line 119
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 140
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
    raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
  end

  t = Time.now.strftime("%Y%m%d")
  n = nil

  begin
    path = "#{tmpdir}/#{prefix}#{t}-#{$$}-#{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 9
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 123
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 135
def self.pwd
  FileSystem.current_dir.to_s
end
Also aliased as: getwd
rmdir(string)
Alias for: delete
tmpdir() click to toggle source
# File lib/fakefs/dir.rb, line 131
def self.tmpdir
  '/tmp'
end

Public Instance Methods

close() click to toggle source
# File lib/fakefs/dir.rb, line 18
def close
  @open = false
  @pointer = nil
  @contents = nil
  nil
end
each() { |f| ... } click to toggle source
# File lib/fakefs/dir.rb, line 25
def each(&block)
  while f = read
    yield f
  end
end
path() click to toggle source
# File lib/fakefs/dir.rb, line 31
def path
  @path
end
pos() click to toggle source
# File lib/fakefs/dir.rb, line 35
def pos
  @pointer
end
pos=(integer) click to toggle source
# File lib/fakefs/dir.rb, line 39
def pos=(integer)
  @pointer = integer
end
read() click to toggle source
# File lib/fakefs/dir.rb, line 43
def read
  raise IOError, "closed directory" if @pointer == nil
  n = @contents[@pointer]
  @pointer += 1
  if n
    if n.to_s[0, path.size+1] == path+'/'
      n.to_s[path.size+1..-1]
    else
      n.to_s
    end
  end
end
rewind() click to toggle source
# File lib/fakefs/dir.rb, line 56
def rewind
  @pointer = 0
end
seek(integer) click to toggle source
# File lib/fakefs/dir.rb, line 60
def seek(integer)
  raise IOError, "closed directory" if @pointer == nil
  @pointer = integer
  @contents[integer]
end