Class: Wands::JavaScript::ArrayBuffer

Inherits:
Object
  • Object
show all
Defined in:
lib/wands/java_script/array_buffer.rb

Overview

A wrapper around JavaScript ArrayBuffer

Instance Method Summary collapse

Constructor Details

#initialize(js_array_buffer = nil) ⇒ ArrayBuffer

Returns a new instance of ArrayBuffer.

Raises:

  • (ArgumentError)


9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/wands/java_script/array_buffer.rb', line 9

def initialize(js_array_buffer = nil)
  @data = "".b

  return unless js_array_buffer
  raise ArgumentError, "Expected a JavaScript ArrayBuffer" unless JS.is_a?(js_array_buffer,
                                                                           JS.global[:ArrayBuffer])

  uint8_array = JS.global[:Uint8Array].new(js_array_buffer)

  (0...js_array_buffer[:byteLength].to_i).each do |index|
    @data << uint8_array[index].to_i.chr
  end
end

Instance Method Details

#readObject



39
40
41
# File 'lib/wands/java_script/array_buffer.rb', line 39

def read
  @data.dup
end

#sizeObject



43
44
45
# File 'lib/wands/java_script/array_buffer.rb', line 43

def size
  @data.bytesize
end

#to_js_array_bufferObject



29
30
31
32
33
34
35
36
37
# File 'lib/wands/java_script/array_buffer.rb', line 29

def to_js_array_buffer
  uint8_array = JS.global[:Uint8Array].new(@data.bytesize)

  @data.bytes.each_with_index do |byte, index|
    uint8_array[index] = byte
  end

  uint8_array[:buffer]
end

#write(binary_string) ⇒ Object

Raises:

  • (ArgumentError)


23
24
25
26
27
# File 'lib/wands/java_script/array_buffer.rb', line 23

def write(binary_string)
  raise ArgumentError, "must be ASCII-8BIT encoded" unless binary_string.encoding == Encoding::ASCII_8BIT

  @data << binary_string
end