@@ -25,37 +25,37 @@ def do_parse(buffer)
2525 # sequence elements between them and can be ignored.
2626 next if record == ''
2727
28+ is_last_record = i == records . size - 1
29+
2830 # Try to decode the record
2931 begin
3032 value = MultiJson . load ( record )
31- result , remaining = handle_parsed ( record , value , is_last_record : i == records . size - 1 )
33+ if truncated? ( record , value )
34+ return record if is_last_record
35+
36+ yield JsonSequence ::Result ::MaybeTruncated . new ( value )
37+ else
38+ yield JsonSequence ::Result ::Json . new ( value )
39+ end
3240 rescue MultiJson ::ParseError => err
33- result , remaining = handle_err ( record , err , is_last_record : i == records . size - 1 )
34- end
41+ return record if is_last_record
3542
36- return remaining if result . nil?
37- yield result
43+ yield JsonSequence :: Result :: ParseError . new ( record , err )
44+ end
3845 end
3946
4047 ''
4148 end
4249
43- def handle_parsed ( record , value , is_last_record : )
50+ def truncated? ( record , value )
4451 case value
4552 when Numeric , TrueClass , FalseClass , NilClass
4653 # Check for truncation, if record was parsed but doesn't end in
4754 # whitespace it may be truncated
48- if record !~ /\s $/
49- return is_last_record ? [ nil , record ] : [ JsonSequence :: Result :: MaybeTruncated . new ( value ) , '' ]
50- end
55+ record !~ /\s $/
56+ else
57+ false
5158 end
52-
53- [ JsonSequence ::Result ::Json . new ( value ) , '' ]
54- end
55-
56- def handle_err ( record , err , is_last_record :)
57- # Last record, might be incomplete, stash for later
58- is_last_record ? [ nil , record ] : [ JsonSequence ::Result ::ParseError . new ( record , err ) , '' ]
5959 end
6060 end
6161end
0 commit comments