Class: EStream::Generic
- Inherits:
-
Object
- Object
- EStream::Generic
- Defined in:
- lib/e-core/instance/stream.rb
Overview
kindly borrowed from Sinatra
Class Method Summary collapse
Instance Method Summary collapse
- #<<(data) ⇒ Object
- #callback(&block) ⇒ Object (also: #errback)
- #close ⇒ Object
- #closed? ⇒ Boolean
- #each(&front) ⇒ Object
-
#initialize(scheduler = self.class, keep_open = false, &back) ⇒ Generic
constructor
A new instance of Generic.
Constructor Details
#initialize(scheduler = self.class, keep_open = false, &back) ⇒ Generic
Returns a new instance of Generic.
63 64 65 66 |
# File 'lib/e-core/instance/stream.rb', line 63 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
61 |
# File 'lib/e-core/instance/stream.rb', line 61 def self.defer(*) yield end |
.schedule ⇒ Object
60 |
# File 'lib/e-core/instance/stream.rb', line 60 def self.schedule(*) yield end |
Instance Method Details
#<<(data) ⇒ Object
86 87 88 89 |
# File 'lib/e-core/instance/stream.rb', line 86 def <<(data) @scheduler.schedule { @front.call(data.to_s) } self end |
#callback(&block) ⇒ Object Also known as: errback
91 92 93 94 |
# File 'lib/e-core/instance/stream.rb', line 91 def callback(&block) return yield if @closed @callbacks << block end |
#close ⇒ Object
68 69 70 71 72 |
# File 'lib/e-core/instance/stream.rb', line 68 def close return if @closed @closed = true @scheduler.schedule { @callbacks.each { |c| c.call }} end |
#closed? ⇒ Boolean
98 99 100 |
# File 'lib/e-core/instance/stream.rb', line 98 def closed? @closed end |
#each(&front) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/e-core/instance/stream.rb', line 74 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 |