Class: AnswerLayer::SSEParser
- Inherits:
-
Object
- Object
- AnswerLayer::SSEParser
- Defined in:
- lib/answerlayer/responses/sse_parser.rb
Class Method Summary collapse
Class Method Details
.build_event(type, raw_data) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/answerlayer/responses/sse_parser.rb', line 35 def self.build_event(type, raw_data) data = JSON.parse(raw_data) event = StreamEvent.new(type: type, data: data, raw: raw_data) raise StreamError.new(data["message"] || data["error"] || "stream error", event: event) if event.error? event rescue JSON::ParserError StreamEvent.new(type: type, data: raw_data, raw: raw_data) end |
.parse(stream) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/answerlayer/responses/sse_parser.rb', line 7 def self.parse(stream) events = [] current_type = "message" data_lines = [] stream.each_line do |line| line = line.chomp if line.empty? events << build_event(current_type, data_lines.join("\n")) unless data_lines.empty? current_type = "message" data_lines = [] next end field, value = line.split(":", 2) value = value ? value.sub(/\A /, "") : "" case field when "event" current_type = value when "data" data_lines << value end end events << build_event(current_type, data_lines.join("\n")) unless data_lines.empty? events end |