Skip to content

Commit b909e0f

Browse files
committed
Simplify parser so we can reason about it more effectively
1 parent 0b1d63e commit b909e0f

1 file changed

Lines changed: 16 additions & 16 deletions

File tree

lib/json_sequence/parser.rb

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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
6161
end

0 commit comments

Comments
 (0)