Class: Sinatra::Helpers::Stream
- Inherits:
-
Object
- Object
- Sinatra::Helpers::Stream
- Defined in:
- lib/sinatra/base.rb
Overview
Class of the response body in case you use #stream.
Three things really matter: The front and back block (back being the blog generating content, front the one sending it to the client) and the scheduler, integrating with whatever concurrency feature the Rack handler is using.
Scheduler has to respond to defer and schedule.
Class Method Summary collapse
Instance Method Summary collapse
- #<<(data) ⇒ Object
- #callback(&block) ⇒ Object (also: #errback)
- #close ⇒ Object
- #each(&front) ⇒ Object
-
#initialize(scheduler = self.class, keep_open = false, &back) ⇒ Stream
constructor
A new instance of Stream.
Constructor Details
#initialize(scheduler = self.class, keep_open = false, &back) ⇒ Stream
Returns a new instance of Stream.
249 250 251 252 |
# File 'lib/sinatra/base.rb', line 249 def initialize(scheduler = self.class, keep_open = false, &back) @back, @scheduler, @keep_open = back.to_proc, scheduler, keep_open @callbacks, @closed = [], false end |
Class Method Details
.defer ⇒ Object
247 |
# File 'lib/sinatra/base.rb', line 247 def self.defer(*) yield end |
.schedule ⇒ Object
246 |
# File 'lib/sinatra/base.rb', line 246 def self.schedule(*) yield end |
Instance Method Details
#<<(data) ⇒ Object
272 273 274 275 |
# File 'lib/sinatra/base.rb', line 272 def <<(data) @scheduler.schedule { @front.call(data.to_s) } self end |
#callback(&block) ⇒ Object Also known as: errback
277 278 279 |
# File 'lib/sinatra/base.rb', line 277 def callback(&block) @callbacks << block end |
#close ⇒ Object
254 255 256 257 258 |
# File 'lib/sinatra/base.rb', line 254 def close return if @closed @closed = true @scheduler.schedule { @callbacks.each { |c| c.call }} end |
#each(&front) ⇒ Object
260 261 262 263 264 265 266 267 268 269 270 |
# File 'lib/sinatra/base.rb', line 260 def each(&front) @front = front @scheduler.defer do begin @back.call(self) rescue Exception => e @scheduler.schedule { raise e } end close unless @keep_open end end |