Class: ActionController::Live::Buffer
- Inherits:
 - 
      ActionDispatch::Response::Buffer
      
        
- Object
 - ActionDispatch::Response::Buffer
 - ActionController::Live::Buffer
 
 
- Includes:
 - MonitorMixin
 
- Defined in:
 - lib/action_controller/metal/live.rb
 
Overview
:nodoc:
Class Attribute Summary collapse
- 
  
    
      .queue_size  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    
Returns the value of attribute queue_size.
 
Instance Attribute Summary collapse
- 
  
    
      #ignore_disconnect  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    
Ignore that the client has disconnected.
 
Instance Method Summary collapse
- 
  
    
      #abort  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Inform the producer/writing thread that the client has disconnected; the reading thread is no longer interested in anything that’s being written.
 - #call_on_error ⇒ Object
 - 
  
    
      #close  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Write a ‘close’ event to the buffer; the producer/writing thread uses this to notify us that it’s finished supplying content.
 - 
  
    
      #connected?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Is the client still connected and waiting for content?.
 - 
  
    
      #initialize(response)  ⇒ Buffer 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of Buffer.
 - #on_error(&block) ⇒ Object
 - #write(string) ⇒ Object
 - 
  
    
      #writeln(string)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Same as
writebut automatically include a newline at the end of the string. 
Methods inherited from ActionDispatch::Response::Buffer
#body, #closed?, #each, #to_ary
Constructor Details
#initialize(response) ⇒ Buffer
Returns a new instance of Buffer.
      162 163 164 165 166 167 168  | 
    
      # File 'lib/action_controller/metal/live.rb', line 162 def initialize(response) super(response, build_queue(self.class.queue_size)) @error_callback = lambda { true } @cv = new_cond @aborted = false @ignore_disconnect = false end  | 
  
Class Attribute Details
.queue_size ⇒ Object
Returns the value of attribute queue_size.
      150 151 152  | 
    
      # File 'lib/action_controller/metal/live.rb', line 150 def queue_size @queue_size end  | 
  
Instance Attribute Details
#ignore_disconnect ⇒ Object
Ignore that the client has disconnected.
If this value is ‘true`, calling `write` after the client disconnects will result in the written content being silently discarded. If this value is `false` (the default), a ClientDisconnected exception will be raised.
      160 161 162  | 
    
      # File 'lib/action_controller/metal/live.rb', line 160 def ignore_disconnect @ignore_disconnect end  | 
  
Instance Method Details
#abort ⇒ Object
Inform the producer/writing thread that the client has disconnected; the reading thread is no longer interested in anything that’s being written.
See also #close.
      217 218 219 220 221 222  | 
    
      # File 'lib/action_controller/metal/live.rb', line 217 def abort synchronize do @aborted = true @buf.clear end end  | 
  
#call_on_error ⇒ Object
      236 237 238  | 
    
      # File 'lib/action_controller/metal/live.rb', line 236 def call_on_error @error_callback.call end  | 
  
#close ⇒ Object
Write a ‘close’ event to the buffer; the producer/writing thread uses this to notify us that it’s finished supplying content.
See also #abort.
      204 205 206 207 208 209 210  | 
    
      # File 'lib/action_controller/metal/live.rb', line 204 def close synchronize do super @buf.push nil @cv.broadcast end end  | 
  
#connected? ⇒ Boolean
Is the client still connected and waiting for content?
The result of calling ‘write` when this is `false` is determined by `ignore_disconnect`.
      228 229 230  | 
    
      # File 'lib/action_controller/metal/live.rb', line 228 def connected? !@aborted end  | 
  
#on_error(&block) ⇒ Object
      232 233 234  | 
    
      # File 'lib/action_controller/metal/live.rb', line 232 def on_error(&block) @error_callback = block end  | 
  
#write(string) ⇒ Object
      175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193  | 
    
      # File 'lib/action_controller/metal/live.rb', line 175 def write(string) unless @response.committed? @response.headers["Cache-Control"] ||= "no-cache" @response.delete_header "Content-Length" end super unless connected? @buf.clear unless @ignore_disconnect # Raise ClientDisconnected, which is a RuntimeError (not an # IOError), because that's more appropriate for something beyond # the developer's control. raise ClientDisconnected, "client disconnected" end end end  | 
  
#writeln(string) ⇒ Object
Same as write but automatically include a newline at the end of the string.
      196 197 198  | 
    
      # File 'lib/action_controller/metal/live.rb', line 196 def writeln(string) write string.end_with?("\n") ? string : "#{string}\n" end  |