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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pru/version.rb +1 -1
  3. data/lib/pru.rb +5 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f72e74d5784d176b7582189d4a7b805e62c12e574b6d778549c664ecb02fe0b1
4
- data.tar.gz: f5135f6bee632dfa47a596e5236ad503c71ce9d505f6daee242338ce05db3620
3
+ metadata.gz: 961b8237fdd8df6997a638772e53738c59fc54f9b97a2efadc7dbadfcef1b3ad
4
+ data.tar.gz: 86c46e1f076aa6ca356f5aaf3eb3f82ef4fcd93c3d7024b6a6272b77c46c837d
5
5
  SHA512:
6
- metadata.gz: f7f1f60fa40cc36551551f42d1c98c469aa33c4dbd1cc3e6c03a27d008e5ae323bb17e10bf1e5a91f42a3e8f9911ef6faec8508044ae403ac44f51c96574b489
7
- data.tar.gz: 456555cd258f16f86dcdc86392c1be6be9c536fa5f60792c6e3d9cd2fb98ecd28d3ecdc3657e333f2ed36b718a2097713059ffdda077afeee74985a09093e8ec
6
+ metadata.gz: 904862648cf48f128faae4dce1eac1c303d561186871a2cc6010bc240667bf164834ca032a3db6f31fd52fa1990e5b7a44485169216aed60dec520770640f6a8
7
+ data.tar.gz: cf75b53f2907123af09e5f0ec319e2ea96031abee09f4c475ba034c0977ea99d545a80624b200ded261f92be529d0d2ced7402d17072eed147521e6d4d40f9db
data/lib/pru/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pru
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pru
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser