Class: Angelo::Responder::Eventsource

Inherits:
Angelo::Responder show all
Defined in:
lib/angelo/responder/eventsource.rb

Instance Attribute Summary

Attributes inherited from Angelo::Responder

#base, #connection, #request

Instance Method Summary collapse

Methods inherited from Angelo::Responder

content_type, #content_type, #error_message, #handle_error, #headers, #on_close, #on_close=, #redirect, #reset!, #respond_with?, symhash, #transfer_encoding

Constructor Details

#initialize(_headers = nil, &block) ⇒ Eventsource

Returns a new instance of Eventsource.



5
6
7
8
# File 'lib/angelo/responder/eventsource.rb', line 5

def initialize _headers = nil, &block
  headers _headers if _headers
  super &block
end

Instance Method Details

#handle_requestObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/angelo/responder/eventsource.rb', line 15

def handle_request
  begin
    if @response_handler
      @base.filter :before
      @body = catch(:halt) { @base.eventsource &@response_handler.bind(@base) }
      if HALT_STRUCT === @body
        raise RequestError.new 'unknown sse error' unless @body.body == :sse
      end

      # TODO any real reason not to run afters with SSE?
      # @base.filter :after

      respond
    else
      raise NotImplementedError
    end
  rescue IOError => ioe
    warn "#{ioe.class} - #{ioe.message}"
  rescue RequestError => re
    headers SSE_HEADER
    handle_error re, re.type
  rescue => e
    handle_error e
  end
end

#request=(request) ⇒ Object



10
11
12
13
# File 'lib/angelo/responder/eventsource.rb', line 10

def request= request
  @params = nil
  @request = request
end

#respondObject



41
42
43
44
# File 'lib/angelo/responder/eventsource.rb', line 41

def respond
  Angelo.log @connection, @request, nil, :ok
  @request.respond 200, headers, nil
end