Class: Dommy::WritableStream

Inherits:
Object
  • Object
show all
Includes:
Bridge::Methods
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

Methods included from Bridge::Methods

included

Constructor Details

#initialize(window, underlying_sink = nil) ⇒ WritableStream

Returns a new instance of WritableStream.



206
207
208
209
210
211
212
# File 'lib/dommy/streams.rb', line 206

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

Instance Method Details

#__internal_abort__(reason) ⇒ Object



237
238
239
240
241
# File 'lib/dommy/streams.rb', line 237

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

#__internal_close__Object



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

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

#__internal_write__(chunk) ⇒ Object



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

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

#__js_call__(method, args) ⇒ Object



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

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

#__js_get__(key) ⇒ Object



243
244
245
246
247
248
# File 'lib/dommy/streams.rb', line 243

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

#get_writerObject Also known as: getWriter

Raises:



214
215
216
217
218
# File 'lib/dommy/streams.rb', line 214

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

  @writer = WritableStreamDefaultWriter.new(self)
end

#lockedObject



222
223
224
# File 'lib/dommy/streams.rb', line 222

def locked
  !@writer.nil?
end