pru 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/pru/version.rb +1 -1
- data/lib/pru.rb +5 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 961b8237fdd8df6997a638772e53738c59fc54f9b97a2efadc7dbadfcef1b3ad
|
|
4
|
+
data.tar.gz: 86c46e1f076aa6ca356f5aaf3eb3f82ef4fcd93c3d7024b6a6272b77c46c837d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 904862648cf48f128faae4dce1eac1c303d561186871a2cc6010bc240667bf164834ca032a3db6f31fd52fa1990e5b7a44485169216aed60dec520770640f6a8
|
|
7
|
+
data.tar.gz: cf75b53f2907123af09e5f0ec319e2ea96031abee09f4c475ba034c0977ea99d545a80624b200ded261f92be529d0d2ced7402d17072eed147521e6d4d40f9db
|
data/lib/pru/version.rb
CHANGED
data/lib/pru.rb
CHANGED
|
@@ -24,12 +24,16 @@ module Pru
|
|
|
24
24
|
# An enumerable of JSON values parsed from a stream (newline-delimited or multiline),
|
|
25
25
|
# parsed lazily so we process as input arrives, by accumulating lines until the buffer
|
|
26
26
|
# forms a complete value.
|
|
27
|
-
# TODO: this is not very efficient, but keeping track of opening/closing braces might be ugly too
|
|
28
27
|
def each_json(io)
|
|
29
28
|
Enumerator.new do |yielder|
|
|
30
29
|
buffer = +""
|
|
31
30
|
io.each_line do |line|
|
|
32
31
|
buffer << line
|
|
32
|
+
# Only attempt a parse when the buffer could actually be complete: a JSON value's
|
|
33
|
+
# last significant character is always '}', ']', '"', a digit, or 'e'/'l'
|
|
34
|
+
# (true/false/null). Skipping impossible parses keeps a multi-line value O(n)
|
|
35
|
+
# instead of re-parsing the whole growing buffer on every line.
|
|
36
|
+
next unless /[}\]"\del]\z/.match?(buffer.rstrip)
|
|
33
37
|
begin
|
|
34
38
|
item = JSON.parse(buffer)
|
|
35
39
|
rescue JSON::ParserError
|