module OnebusawaySDK::Internal::Util
def decode_lines(enum)
-
(Enumerable
-)
Parameters:
-
enum
(Enumerable
) --
Other tags:
- Api: - private
def decode_lines(enum) re = /(\r\n|\r|\n)/ buffer = String.new cr_seen = nil chain_fused(enum) do |y| enum.each do |row| offset = buffer.bytesize buffer << row while (match = re.match(buffer, cr_seen&.to_i || offset)) case [match.captures.first, cr_seen] in ["\r", nil] cr_seen = match.end(1) next in ["\r" | "\r\n", Integer] y << buffer.slice!(..(cr_seen.pred)) else y << buffer.slice!(..(match.end(1).pred)) end offset = 0 cr_seen = nil end end y << buffer.slice!(..(cr_seen.pred)) unless cr_seen.nil? y << buffer unless buffer.empty? end end