Skip to content

Commit 0edda3c

Browse files
authored
🔀 Merge pull request #422 from ruby/refactor-get_response
♻️ Refactor `Net::IMAP#get_response` (internal)
2 parents a15054e + 02f1cfa commit 0edda3c

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

lib/net/imap.rb

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3433,22 +3433,27 @@ def get_tagged_response(tag, cmd, timeout = nil)
34333433

34343434
def get_response
34353435
buff = String.new
3436-
while true
3437-
s = @sock.gets(CRLF)
3438-
break unless s
3439-
buff.concat(s)
3440-
if /\{(\d+)\}\r\n/n =~ s
3441-
s = @sock.read($1.to_i)
3442-
buff.concat(s)
3443-
else
3444-
break
3436+
catch :eof do
3437+
while true
3438+
get_response_line(buff)
3439+
break unless /\{(\d+)\}\r\n\z/n =~ buff
3440+
get_response_literal(buff, $1.to_i)
34453441
end
34463442
end
34473443
return nil if buff.length == 0
3448-
if config.debug?
3449-
$stderr.print(buff.gsub(/^/n, "S: "))
3450-
end
3451-
return @parser.parse(buff)
3444+
$stderr.print(buff.gsub(/^/n, "S: ")) if config.debug?
3445+
@parser.parse(buff)
3446+
end
3447+
3448+
def get_response_line(buff)
3449+
line = @sock.gets(CRLF) or throw :eof
3450+
buff << line
3451+
end
3452+
3453+
def get_response_literal(buff, literal_size)
3454+
literal = String.new(capacity: literal_size)
3455+
@sock.read(literal_size, literal) or throw :eof
3456+
buff << literal
34523457
end
34533458

34543459
#############################

0 commit comments

Comments
 (0)