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
Constructor Details
#initialize(response) ⇒ Buffer
Returns a new instance of Buffer.
143 144 145 146 147 148 149 |
# File 'lib/action_controller/metal/live.rb', line 143 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.
131 132 133 |
# File 'lib/action_controller/metal/live.rb', line 131 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.
141 142 143 |
# File 'lib/action_controller/metal/live.rb', line 141 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.
193 194 195 196 197 198 |
# File 'lib/action_controller/metal/live.rb', line 193 def abort synchronize do @aborted = true @buf.clear end end |
#call_on_error ⇒ Object
212 213 214 |
# File 'lib/action_controller/metal/live.rb', line 212 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.
180 181 182 183 184 185 186 |
# File 'lib/action_controller/metal/live.rb', line 180 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.
204 205 206 |
# File 'lib/action_controller/metal/live.rb', line 204 def connected? !@aborted end |
#on_error(&block) ⇒ Object
208 209 210 |
# File 'lib/action_controller/metal/live.rb', line 208 def on_error(&block) @error_callback = block end |
#write(string) ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/action_controller/metal/live.rb', line 151 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.
172 173 174 |
# File 'lib/action_controller/metal/live.rb', line 172 def writeln(string) write string.end_with?("\n") ? string : "#{string}\n" end |