module FakeFS::Kernel
def self.hijack(name, &block)
def self.hijack(name, &block) captives[:original][name] = ::Kernel.method(name.to_sym) captives[:hijacked][name] = block || proc { |_args| } end
def self.hijack!
def self.hijack! captives[:hijacked].each do |name, prc| ::Kernel.send(:remove_method, name.to_sym) ::Kernel.send(:define_method, name.to_sym, &prc) ::Kernel.send(:private, name.to_sym) end end
def self.unhijack!
def self.unhijack! captives[:original].each_key do |name| ::Kernel.send(:remove_method, name.to_sym) ::Kernel.send(:define_method, name.to_sym, proc do |*args, **kwargs, &block| ::FakeFS::Kernel.captives[:original][name].call(*args, **kwargs, &block) end) ::Kernel.send(:private, name.to_sym) end end