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