Class: EStream::Generic

Inherits:
Object
  • Object
show all
Defined in:
lib/e-core/instance/stream.rb

Overview

kindly borrowed from Sinatra

Direct Known Subclasses

Chunked, Evented

Class Method Summary collapse

Instance Method Summary collapse

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

.deferObject



61
# File 'lib/e-core/instance/stream.rb', line 61

def self.defer(*)    yield end

.scheduleObject



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

#closeObject



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

Returns:

  • (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