event_stream_parser 0.3.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 830b3472c8f361af6b3e3fe2b3d405be779a188dfad03689d742e1c7432c9d9a
4
- data.tar.gz: 136a34302cc7b8ac6de60307960258fac2618035ad66394867417481f8c76437
3
+ metadata.gz: 06cff98dad06559a4b803723dd45890af9e995a20d9075482028dddb415d5618
4
+ data.tar.gz: 251f89c451dbee9fb3914afa46dedc86697955bf02b342016baa5654f26563c7
5
5
  SHA512:
6
- metadata.gz: 1834aa3df2243b44538415a4e05b4cc4cf2a86132a48ad32b70c12994205866fa3f80a530e75573b204d1d3cfc2719928f92fa13ddd9db868d6fbdee5f9d241e
7
- data.tar.gz: 3b6b3bc90c9353988bc906b6fdec21e54d6bd3762f5f386d7cbfff4688fb7df0a626e5f3d8f054d8957f1c170d2bdb98295815887d278b84d0b82907b47ed96f
6
+ metadata.gz: f179630a15295755bab456c47c81a0c013305d3f6a21b42f4ffa3e2208203f29958643d2fc7c21c5cc7be09ed8ec36494a674047f4ddd3deaa7f6d58a0444db4
7
+ data.tar.gz: 8d8b918bd1eafc6c06dcbfc788b1610c89fffa2358d2eaf3b6b84767fbe1632fa4e970f584dedbc48352e53b10cb5300a08c2d9797474d7e197d79b9ee513a0d
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # event_stream_parser
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/event_stream_parser.svg)](https://badge.fury.io/rb/event_stream_parser)
3
+ [![Gem (including prereleases)](https://img.shields.io/gem/v/event_stream_parser?1.0.0)](https://rubygems.org/gems/event_stream_parser)
4
4
  [![CI](https://github.com/Shopify/event_stream_parser/actions/workflows/ci.yml/badge.svg)](https://github.com/Shopify/event_stream_parser/actions/workflows/ci.yml)
5
5
 
6
6
  A lightweight, fully spec-compliant parser for the
@@ -38,23 +38,23 @@ gem install event_stream_parser
38
38
 
39
39
  ## Usage
40
40
 
41
- Create a new Parser and give it a block to receive events:
41
+ Create a new Parser:
42
42
 
43
43
  ```rb
44
44
  parser = EventStreamParser::Parser.new
45
-
46
- parser.feed do |type, data, id, reconnection_time|
47
- puts "Event type: #{type}"
48
- puts "Event data: #{data}"
49
- puts "Event id: #{id}"
50
- puts "Reconnection time: #{reconnection_time}"
51
- end
52
45
  ```
53
46
 
54
47
  Then, feed it chunks as they come in:
55
48
 
56
49
  ```rb
57
- do_something_that_yields_chunks do { |chunk| parser.feed(chunk) }
50
+ do_something_that_yields_chunks do |chunk|
51
+ parser.feed(chunk) do |type, data, id, reconnection_time|
52
+ puts "Event type: #{type}"
53
+ puts "Event data: #{data}"
54
+ puts "Event id: #{id}"
55
+ puts "Reconnection time: #{reconnection_time}"
56
+ end
57
+ end
58
58
  ```
59
59
 
60
60
  Or use the `stream` method to generate a proc that you can pass to a chunk
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EventStreamParser
4
- VERSION = '0.3.0'
4
+ VERSION = '1.0.1'
5
5
  end
@@ -24,6 +24,7 @@ module EventStreamParser
24
24
 
25
25
  @reconnection_time = nil
26
26
  @buffer = +''
27
+ @buffer_scanned = true
27
28
  @last_delimiter = nil
28
29
  end
29
30
 
@@ -40,11 +41,21 @@ module EventStreamParser
40
41
  #
41
42
  @buffer.delete_prefix!("\n") if @last_delimiter == "\r"
42
43
 
44
+ # Only skip the search after the previous call drained complete lines.
45
+ buffer_scanned = @buffer_scanned
46
+ @buffer_scanned = false
47
+ if buffer_scanned && !/[\r\n]/.match?(chunk.dup.force_encoding(@buffer.encoding))
48
+ @buffer_scanned = true
49
+ return
50
+ end
51
+
43
52
  while (line = @buffer.slice!(/.*?(?<delim>\r\n|\r|\n)/))
44
53
  line.chomp!
45
54
  @last_delimiter = $~[:delim]
46
55
  process_line(line, &proc)
47
56
  end
57
+ @buffer_scanned = true
58
+ nil
48
59
  ##
49
60
  # Once the end of the file is reached, any pending data must be discarded.
50
61
  # (If the file ends in the middle of an event, before the final empty line,
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: event_stream_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ates Goral
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-16 00:00:00.000000000 Z
11
+ date: 2026-11-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description:
13
+ description:
14
14
  email:
15
15
  - ates.goral@shopify.com
16
16
  executables: []
@@ -31,7 +31,7 @@ metadata:
31
31
  source_code_uri: https://github.com/Shopify/event_stream_parser
32
32
  allowed_push_host: https://rubygems.org
33
33
  rubygems_mfa_required: 'true'
34
- post_install_message:
34
+ post_install_message:
35
35
  rdoc_options: []
36
36
  require_paths:
37
37
  - lib
@@ -46,8 +46,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.3.7
48
48
  requirements: []
49
- rubygems_version: 3.4.20
50
- signing_key:
49
+ rubygems_version: 3.5.22
50
+ signing_key:
51
51
  specification_version: 4
52
52
  summary: A spec-compliant event stream parser
53
53
  test_files: []