Class: SockJS::DelayedResponseBody

Inherits:
Object
  • Object
show all
Includes:
EventMachine::Deferrable
Defined in:
lib/sockjs/delayed-response-body.rb

Direct Known Subclasses

DelayedResponseChunkedBody

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDelayedResponseBody

Returns a new instance of DelayedResponseBody.



11
12
13
# File 'lib/sockjs/delayed-response-body.rb', line 11

def initialize
  @status = :created
end

Instance Attribute Details

#sessionObject

Returns the value of attribute session.



9
10
11
# File 'lib/sockjs/delayed-response-body.rb', line 9

def session
  @session
end

Instance Method Details

#call(body) ⇒ Object



15
16
17
18
19
# File 'lib/sockjs/delayed-response-body.rb', line 15

def call(body)
  body.each do |chunk|
    self.write(chunk)
  end
end

#closed?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/sockjs/delayed-response-body.rb', line 61

def closed?
  @status == :closed
end

#each(&block) ⇒ Object



35
36
37
38
39
# File 'lib/sockjs/delayed-response-body.rb', line 35

def each(&block)
  SockJS.debug "Opening the response."
  @status = :open
  @body_callback = block
end

#finish(data = nil) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/sockjs/delayed-response-body.rb', line 51

def finish(data = nil)
  if @status == :closed
    raise "Body is already closed!"
  end

  self.write(data) if data

  self.succeed(true)
end

#succeed(from_server = true) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/sockjs/delayed-response-body.rb', line 41

def succeed(from_server = true)
  SockJS.debug "Closing the response."
  if $DEBUG and false
    SockJS.debug caller[0..-8].map { |item| item.sub(Dir.pwd + "/lib/", "") }.inspect
  end

  @status = :closed
  super
end

#write(chunk) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/sockjs/delayed-response-body.rb', line 21

def write(chunk)
  unless @status == :open
    raise "Body isn't open (status: #{@status}, trying to write #{chunk.inspect})"
  end

  unless chunk.respond_to?(:bytesize)
    raise "Chunk is supposed to respond to #bytesize, but it doesn't.\nChunk: #{chunk.inspect} (#{chunk.class})"
  end

  SockJS.debug "body#write #{chunk.inspect}"

  self.write_chunk(chunk)
end