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:
Constant Summary
Constants inherited from ActionDispatch::Response::Buffer
ActionDispatch::Response::Buffer::BODY_METHODS
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 ‘write` but automatically include a newline at the end of the string.
Methods inherited from ActionDispatch::Response::Buffer
#body, #closed?, #each, #respond_to?, #to_ary
Constructor Details
#initialize(response) ⇒ Buffer
Returns a new instance of Buffer.
208 209 210 211 212 213 214 |
# File 'lib/action_controller/metal/live.rb', line 208 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.
197 198 199 |
# File 'lib/action_controller/metal/live.rb', line 197 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.
206 207 208 |
# File 'lib/action_controller/metal/live.rb', line 206 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.
256 257 258 259 260 261 |
# File 'lib/action_controller/metal/live.rb', line 256 def abort synchronize do @aborted = true @buf.clear end end |
#call_on_error ⇒ Object
275 276 277 |
# File 'lib/action_controller/metal/live.rb', line 275 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.
244 245 246 247 248 249 250 |
# File 'lib/action_controller/metal/live.rb', line 244 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`.
267 268 269 |
# File 'lib/action_controller/metal/live.rb', line 267 def connected? !@aborted end |
#on_error(&block) ⇒ Object
271 272 273 |
# File 'lib/action_controller/metal/live.rb', line 271 def on_error(&block) @error_callback = block end |
#write(string) ⇒ Object
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 |
# File 'lib/action_controller/metal/live.rb', line 216 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.
236 237 238 |
# File 'lib/action_controller/metal/live.rb', line 236 def writeln(string) write string.end_with?("\n") ? string : "#{string}\n" end |