Module: RSpecTracer::Tracker::IOHooks::FileReads Private

Defined in:
lib/rspec_tracer/tracker/io_hooks/file.rb

Overview

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

Prepended onto File.singleton_class. Each method records the path (IOHooks.record fast-rejects outside a bucketed example and swallows any error) then forwards every argument + block to super via ‘(…)`.

The ‘if Thread.current` guard is the hot-path cut: FileReads sits in every File.singleton_class read on the entire process for the life of the run, even between examples and during boot. Without the guard each File.read paid 2 method-dispatch frames + IOHooks._record’s ‘@root_prefix` nil-check before the inner bucket check could bail. With the guard, the bucket check happens at FileReads so the reject path skips IOHooks.record entirely. Cuts the M2 Max reject overhead from ~530 ns/call to ~300 ns/call.

Instance Method Summary collapse

Instance Method Details

#binread(path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Internal method on the tracer pipeline.



34
35
36
37
# File 'lib/rspec_tracer/tracker/io_hooks/file.rb', line 34

def binread(path, ...)
  IOHooks.record(path) if Thread.current[BUCKET_KEY]
  super
end

#open(path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Internal method on the tracer pipeline.



48
49
50
51
# File 'lib/rspec_tracer/tracker/io_hooks/file.rb', line 48

def open(path, ...)
  IOHooks.record(path) if Thread.current[BUCKET_KEY]
  super
end

#read(path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Internal method on the tracer pipeline.



27
28
29
30
# File 'lib/rspec_tracer/tracker/io_hooks/file.rb', line 27

def read(path, ...)
  IOHooks.record(path) if Thread.current[BUCKET_KEY]
  super
end

#readlines(path) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Internal method on the tracer pipeline.



41
42
43
44
# File 'lib/rspec_tracer/tracker/io_hooks/file.rb', line 41

def readlines(path, ...)
  IOHooks.record(path) if Thread.current[BUCKET_KEY]
  super
end