module VirtFS::Activation

Public Instance Methods

activate!(enable_require = false) click to toggle source

Overrides Ruby's native Dir, File, and IO classes with corresponding VirtFS classes

# File lib/virtfs/activation.rb, line 17
def activate!(enable_require = false)
  activate_mutex.synchronize do
    raise "VirtFS.activate! already activated" if @activated
    @activated = true

    Object.class_eval do
      remove_const(:Dir)
      remove_const(:File)
      remove_const(:IO)
      remove_const(:Pathname)

      const_set(:Dir,      VirtFS::VDir)
      const_set(:File,     VirtFS::VFile)
      const_set(:IO,       VirtFS::VIO)
      const_set(:Pathname, VirtFS::VPathname)
    end

    if enable_require
      VirtFS::Kernel.inject
      VirtFS::Kernel.enable
    end
  end
  true
end
activate_mutex() click to toggle source
# File lib/virtfs/activation.rb, line 3
def activate_mutex
  @activate_mutex ||= Mutex.new
end
activated?() click to toggle source

@return [Boolean] indicating if VirtFS is active

@see .activate! @see .deactivate!

# File lib/virtfs/activation.rb, line 11
def activated?
  @activated
end
deactivate!() click to toggle source

Restores Ruby's native Dir, File, and IO classes to their defaults

# File lib/virtfs/activation.rb, line 44
def deactivate!
  activate_mutex.synchronize do
    raise "VirtFS.deactivate! not activated" unless @activated
    @activated = false

    Object.class_eval do
      remove_const(:Dir)
      remove_const(:File)
      remove_const(:IO)
      remove_const(:Pathname)

      const_set(:Dir,      VfsRealDir)
      const_set(:File,     VfsRealFile)
      const_set(:IO,       VfsRealIO)
      const_set(:Pathname, VfsRealPathname)
    end
    VirtFS::Kernel.disable
  end
  true
end
with(enable_require = false) { || ... } click to toggle source

Invokes the given block in an activated context

@see .activate!

# File lib/virtfs/activation.rb, line 68
def with(enable_require = false)
  if activated?
    yield
  else
    begin
      activate!(enable_require)
      yield
    ensure
      deactivate!
    end
  end
end
without() { || ... } click to toggle source

Invokes the given block in a deactivated context

@see .deactivate!

# File lib/virtfs/activation.rb, line 84
def without
  if !activated?
    yield
  else
    begin
      deactivate!
      yield
    ensure
      activate!
    end
  end
end