class Celluloid::EventSource::EventParser
Constants
- MessageEvent
Public Class Methods
new(lines, chunked, on_retry)
click to toggle source
# File lib/celluloid/eventsource/event_parser.rb, line 6 def initialize(lines, chunked, on_retry) @lines = lines @chunked = chunked clear_buffers! @on_retry = on_retry end
Public Instance Methods
each() { |event| ... }
click to toggle source
# File lib/celluloid/eventsource/event_parser.rb, line 13 def each @lines.each do |line| if line.strip.empty? begin event = create_event yield event unless event.nil? ensure clear_buffers! end else parse_line(line) end end end
Private Instance Methods
clear_buffers!()
click to toggle source
# File lib/celluloid/eventsource/event_parser.rb, line 32 def clear_buffers! @id_buffer = '' @data_buffer = '' @type_buffer = '' end
create_event()
click to toggle source
# File lib/celluloid/eventsource/event_parser.rb, line 51 def create_event return nil if @data_buffer.empty? @data_buffer.chomp!("\n") if @data_buffer.end_with?("\n") event = MessageEvent.new(:message, @data_buffer, @id_buffer) event.type = @type_buffer.to_sym unless @type_buffer.empty? event end
parse_line(line)
click to toggle source
# File lib/celluloid/eventsource/event_parser.rb, line 38 def parse_line(line) case line when /^:.*$/ when /^(\w+): ?(.*)$/ process_field($1, $2) else if @chunked && !@data_buffer.empty? @data_buffer.rstrip! process_field("data", line.rstrip) end end end
process_field(field_name, field_value)
click to toggle source
# File lib/celluloid/eventsource/event_parser.rb, line 60 def process_field(field_name, field_value) case field_name when "event" @type_buffer = field_value when "data" @data_buffer << field_value.concat("\n") when "id" @id_buffer = field_value when "retry" if /^(?<num>\d+)$/ =~ field_value @on_retry.call(num.to_i) end end end