Class: Dommy::WritableStream

Inherits:
Object
  • Object
show all
Defined in:
lib/dommy/streams.rb

Overview

‘WritableStream` — accepts chunks via a writer; persistence is up to the `underlyingSink`’s ‘write` callback.

Defined Under Namespace

Classes: Error

Instance Method Summary collapse

Constructor Details

#initialize(window, underlying_sink = nil) ⇒ WritableStream

Returns a new instance of WritableStream.



210
211
212
213
214
215
216
# File 'lib/dommy/streams.rb', line 210

def initialize(window, underlying_sink = nil)
  @window = window
  @writer = nil
  @state = :writable
  @sink = underlying_sink.is_a?(Hash) ? underlying_sink.transform_keys(&:to_s) : {}
  invoke(@sink["start"], [])
end

Instance Method Details

#__abort__(reason) ⇒ Object



241
242
243
244
245
# File 'lib/dommy/streams.rb', line 241

def __abort__(reason)
  @state = :errored
  invoke(@sink["abort"], [reason])
  PromiseValue.resolve(@window, nil)
end

#__close__Object



235
236
237
238
239
# File 'lib/dommy/streams.rb', line 235

def __close__
  @state = :closed
  invoke(@sink["close"], [])
  PromiseValue.resolve(@window, nil)
end

#__js_call__(method, args) ⇒ Object



254
255
256
257
258
259
260
261
262
263
# File 'lib/dommy/streams.rb', line 254

def __js_call__(method, args)
  case method
  when "getWriter"
    get_writer
  when "close"
    __close__
  when "abort"
    __abort__(args[0])
  end
end

#__js_get__(key) ⇒ Object



247
248
249
250
251
252
# File 'lib/dommy/streams.rb', line 247

def __js_get__(key)
  case key
  when "locked"
    locked
  end
end

#__write__(chunk) ⇒ Object



230
231
232
233
# File 'lib/dommy/streams.rb', line 230

def __write__(chunk)
  invoke(@sink["write"], [chunk])
  PromiseValue.resolve(@window, nil)
end

#get_writerObject Also known as: getWriter

Raises:



218
219
220
221
222
# File 'lib/dommy/streams.rb', line 218

def get_writer
  raise Error, "stream locked" if @writer

  @writer = WritableStreamDefaultWriter.new(self)
end

#lockedObject



226
227
228
# File 'lib/dommy/streams.rb', line 226

def locked
  !@writer.nil?
end