Sha256: 01f70310e1f23ed6d3090015b2ee5b7d6acceef9095e297be97ba0ef2e9d1563
Contents?: true
Size: 1.31 KB
Versions: 1
Compression:
Stored size: 1.31 KB
Contents
# frozen_string_literal: true module FakeFS # Kernel Module module Kernel @captives = { original: {}, hijacked: {} } class << self attr_accessor :captives end 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! 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 # NOTE: maybe private def self.hijack(name, &block) captives[:original][name] = ::Kernel.method(name.to_sym) captives[:hijacked][name] = block || proc { |_args| } end hijack :open do |*args, &block| # This is a system command or we're inside IRB internals if args.first.start_with?('|') || self.class.to_s.start_with?("IRB::") ::FakeFS::Kernel.captives[:original][:open].call(*args, &block) else name = args.shift FakeFS::File.open(name, *args, &block) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
fakefs-3.0.0 | lib/fakefs/kernel.rb |