Skip to content

Commit 87d73c1

Browse files
authored
Merge pull request #714 from jonathanhefner/say_status-indent-multiline
Indent multiline messages in say_status
2 parents 013c915 + 3343846 commit 87d73c1

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

lib/thor/shell/basic.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,14 @@ def say_error(message = "", color = nil, force_new_line = (message.to_s !~ /( |\
128128
def say_status(status, message, log_status = true)
129129
return if quiet? || log_status == false
130130
spaces = " " * (padding + 1)
131-
color = log_status.is_a?(Symbol) ? log_status : :green
132-
133131
status = status.to_s.rjust(12)
132+
margin = " " * status.length + spaces
133+
134+
color = log_status.is_a?(Symbol) ? log_status : :green
134135
status = set_color status, color, true if color
135136

136-
buffer = "#{status}#{spaces}#{message}"
137-
buffer = "#{buffer}\n" unless buffer.end_with?("\n")
137+
message = message.to_s.chomp.gsub(/(?<!\A)^/, margin)
138+
buffer = "#{status}#{spaces}#{message}\n"
138139

139140
stdout.print(buffer)
140141
stdout.flush

spec/shell/basic_spec.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,20 @@ def shell
283283
shell.say_status(:create, "")
284284
end
285285

286+
it "indents a multiline message" do
287+
status = :foobar
288+
lines = ["first line", "second line", " third line", " fourth line"]
289+
290+
expect($stdout).to receive(:print) do |string|
291+
formatted_status = string[/^\s*#{status}\s*/]
292+
margin = " " * formatted_status.length
293+
294+
expect(string).to eq(formatted_status + lines.join("\n#{margin}") + "\n")
295+
end
296+
297+
shell.say_status(status, lines.join("\n") + "\n")
298+
end
299+
286300
it "does not print a message if base is muted" do
287301
expect(shell).to receive(:mute?).and_return(true)
288302
expect($stdout).not_to receive(:print)

0 commit comments

Comments
 (0)