Skip to content

Commit eab2bd9

Browse files
committed
feat: Process.run out: err: option can be an Array
1 parent 3877b7f commit eab2bd9

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

lib/rb/process.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ def self.run(*args, out: $stdout, err: $stderr, exception: false, **options)
4343

4444
out_strio = StringIO.new
4545
err_strio = StringIO.new
46-
out_multiwriter = IO::MultiWriter.new(out, out_strio)
47-
err_multiwriter = IO::MultiWriter.new(err, err_strio)
46+
out_multiwriter = out.is_a?(Array) ? IO::MultiWriter.new(*out, out_strio) : IO::MultiWriter.new(out, out_strio)
47+
err_multiwriter = err.is_a?(Array) ? IO::MultiWriter.new(*err, err_strio) : IO::MultiWriter.new(err, err_strio)
4848

4949
if block_given?
5050
stdin_reader, stdin_writer = IO.pipe

spec/rb/process_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,22 @@
7777
tempfile.delete
7878
end
7979

80+
it "write to multi IO" do
81+
tempfile1 = Tempfile.new(["test_", ".log"])
82+
tempfile2 = Tempfile.new(["test_", ".log"])
83+
84+
File.open(tempfile1.path, "w") do |io1|
85+
File.open(tempfile2.path, "w") do |io2|
86+
expect(Process.run("uname", out: [io1, io2]).each_line.to_a).to eq ["Linux\n"]
87+
end
88+
end
89+
90+
expect(tempfile1.readlines).to eq ["Linux\n"]
91+
expect(tempfile2.readlines).to eq ["Linux\n"]
92+
tempfile1.delete
93+
tempfile2.delete
94+
end
95+
8096
# https://devdocs.io/ruby~3.4/io#class-IO-label-Reading
8197
it "responds to methods" do
8298
Process.run("bash", out: File.open(File::NULL, "r+")) do |pipe|

0 commit comments

Comments
 (0)