Sha256: 480b51949667e31fa34007967de2f72162eac87f4a85d15070292a529f2d822c

Contents?: true

Size: 912 Bytes

Versions: 4

Compression:

Stored size: 912 Bytes

Contents

require "tempfile"
module Kernel
  # From: 'activesupport-4.1.0/lib/active_support/core_ext/kernel/reporting.rb
  #
  # Captures the given stream and returns it:
  #
  #   stream = capture(:stdout) { puts 'notice' }
  #   stream # => "notice\n"
  #
  #   stream = capture(:stderr) { warn 'error' }
  #   stream # => "error\n"
  #
  # even for subprocesses:
  #
  #   stream = capture(:stdout) { system('echo notice') }
  #   stream # => "notice\n"
  #
  #   stream = capture(:stderr) { system('echo error 1>&2') }
  #   stream # => "error\n"
  def capture(stream)
    stream = stream.to_s
    captured_stream = Tempfile.new(stream)
    stream_io = eval("$#{stream}")
    origin_stream = stream_io.dup
    stream_io.reopen(captured_stream)

    yield

    stream_io.rewind
    return captured_stream.read
  ensure
    captured_stream.close
    captured_stream.unlink
    stream_io.reopen(origin_stream)
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
agile_utils-0.1.5 lib/agile_utils/core_ext/kernel/reporting.rb
agile_utils-0.1.4 lib/agile_utils/core_ext/kernel/reporting.rb
agile_utils-0.1.3 lib/agile_utils/core_ext/kernel/reporting.rb
agile_utils-0.1.2 lib/agile_utils/core_ext/kernel/reporting.rb