lib/ruby_ami/lexer.rb in ruby_ami-2.4.0 vs lib/ruby_ami/lexer.rb in ruby_ami-3.0.0
- old
+ new
@@ -86,13 +86,13 @@
Response.from_immediate_response match[:immediate]
end
# Strip off the header line
raw.slice! HEADER_SLICE
- populate_message_body msg, raw
+ raw_index = populate_message_body msg, raw
- return msg if response_follows && !handle_response_follows(msg, raw)
+ return msg if response_follows && !handle_response_follows(msg, raw[raw_index..-1])
case msg
when Error
error_received msg
else
@@ -127,14 +127,18 @@
# @param [String] ignored_chunk The offending text which caused the syntax error.
def syntax_error_encountered(ignored_chunk)
@delegate.syntax_error_encountered ignored_chunk
end
+ # returns first char index after last match
def populate_message_body(obj, raw)
- while raw.slice! KEYVALUEPAIR
- obj[$1] = $2
+ headers = raw.scan(KEYVALUEPAIR)
+ if match = $~
+ obj.merge_headers!(Hash[headers])
+ match.end(match.size - 1) + 2
+ else
+ 0
end
- obj
end
def handle_response_follows(obj, raw)
obj.text_body ||= ''
obj.text_body << raw