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.



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

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



239
240
241
242
243
# File 'lib/dommy/streams.rb', line 239

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

#__internal_close__Object



233
234
235
236
237
# File 'lib/dommy/streams.rb', line 233

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

#__internal_write__(chunk) ⇒ Object



228
229
230
231
# File 'lib/dommy/streams.rb', line 228

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

#__js_call__(method, args) ⇒ Object



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

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



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

def __js_get__(key)
  case key
  when "locked"
    locked
  else
    Bridge::ABSENT
  end
end

#get_writerObject Also known as: getWriter

Raises:



216
217
218
219
220
# File 'lib/dommy/streams.rb', line 216

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

  @writer = WritableStreamDefaultWriter.new(self)
end

#lockedObject



224
225
226
# File 'lib/dommy/streams.rb', line 224

def locked
  !@writer.nil?
end