class RSpec::Core::Bisect::Channel

Wraps a pipe to support sending objects between a child and parent process. Where supported, encoding is explicitly set to ensure binary data is able to pass from child to parent. @private

Constants

MARSHAL_DUMP_ENCODING

Public Class Methods

# File rspec-core/lib/rspec/core/bisect/utilities.rb, line 41
def initialize
  @read_io, @write_io = IO.pipe

  if defined?(MARSHAL_DUMP_ENCODING) && IO.method_defined?(:set_encoding)
    # Ensure the pipe can send any content produced by Marshal.dump
    @write_io.set_encoding MARSHAL_DUMP_ENCODING
  end
end

Public Instance Methods

rubocop:enable Security/MarshalLoad

# File rspec-core/lib/rspec/core/bisect/utilities.rb, line 62
def close
  @read_io.close
  @write_io.close
end

rubocop:disable Security/MarshalLoad

# File rspec-core/lib/rspec/core/bisect/utilities.rb, line 56
def receive
  packet_size = Integer(@read_io.gets)
  Marshal.load(@read_io.read(packet_size))
end
# File rspec-core/lib/rspec/core/bisect/utilities.rb, line 50
def send(message)
  packet = Marshal.dump(message)
  @write_io.write("#{packet.bytesize}\n#{packet}")
end