Sha256: 0023bb0ca8f4fcd534c47670f497ea2c3e4bb9619309d250ee9982c5d036b2d5

Contents?: true

Size: 703 Bytes

Versions: 6

Compression:

Stored size: 703 Bytes

Contents

# frozen_string_literal: true

require "refinements/shared/ios/reread"

module Refinements
  # Provides additional enhancements to the IO primitive.
  module IO
    refine ::IO.singleton_class do
      def void
        new(sysopen("/dev/null", "w+")).then do |io|
          return io unless block_given?

          yield io
          io.tap(&:close)
        end
      end
    end

    refine ::IO do
      import_methods Shared::IOs::Reread

      def redirect other
        return self unless block_given?

        backup = dup
        reopen other
        yield self
        reopen backup
      end

      def squelch(&block) = self.class.void.then { |void| redirect(void, &block) }
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
refinements-12.6.0 lib/refinements/io.rb
refinements-12.5.0 lib/refinements/io.rb
refinements-12.4.0 lib/refinements/io.rb
refinements-12.3.0 lib/refinements/io.rb
refinements-12.2.0 lib/refinements/io.rb
refinements-12.1.0 lib/refinements/io.rb