Class: Native::Array

Inherits:
Object show all
Includes:
Enumerable, Wrapper
Defined in:
opal/stdlib/native.rb

Instance Method Summary collapse

Methods included from Enumerable

#each_async, #to_json, #to_set

Methods included from Wrapper

included, #to_n

Constructor Details

#initialize(native, options = {}, &block) ⇒ Array

Returns a new instance of Array.



367
368
369
370
371
372
373
374
375
376
377
378
379
# File 'opal/stdlib/native.rb', line 367

def initialize(native, options = {}, &block)
  super(native)

  @get    = options[:get] || options[:access]
  @named  = options[:named]
  @set    = options[:set] || options[:access]
  @length = options[:length] || :length
  @block  = block

  if `#{length} == null`
    raise ArgumentError, 'no length found on the array-like object'
  end
end

Instance Method Details

#[](index) ⇒ Object



393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
# File 'opal/stdlib/native.rb', line 393

def [](index)
  result = case index
           when String, Symbol
             @named ? `#{@native}[#{@named}](#{index})` : `#{@native}[#{index}]`
           when Integer
             @get ? `#{@native}[#{@get}](#{index})` : `#{@native}[#{index}]`
           end

  if result
    if @block
      @block.call(result)
    else
      Native(result)
    end
  end
end

#[]=(index, value) ⇒ Object



410
411
412
413
414
415
416
# File 'opal/stdlib/native.rb', line 410

def []=(index, value)
  if @set
    `#{@native}[#{@set}](#{index}, #{Native.convert(value)})`
  else
    `#{@native}[#{index}] = #{Native.convert(value)}`
  end
end

#each(&block) ⇒ Object



381
382
383
384
385
386
387
388
389
390
391
# File 'opal/stdlib/native.rb', line 381

def each(&block)
  return enum_for :each unless block

  %x{
    for (var i = 0, length = #{length}; i < length; i++) {
      Opal.yield1(block, #{self[`i`]});
    }
  }

  self
end

#inspectObject



440
441
442
# File 'opal/stdlib/native.rb', line 440

def inspect
  to_a.inspect
end

#last(count = nil) ⇒ Object



418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
# File 'opal/stdlib/native.rb', line 418

def last(count = nil)
  if count
    index  = length - 1
    result = []

    while index >= 0
      result << self[index]
      index  -= 1
    end

    result
  else
    self[length - 1]
  end
end

#lengthObject



434
435
436
# File 'opal/stdlib/native.rb', line 434

def length
  `#{@native}[#{@length}]`
end