class Bluenode::NativeModule

Constants

FILES
NAMES
SOURCES

Attributes

exports[RW]
filename[RW]
id[RW]
loaded[RW]

Public Class Methods

cache() click to toggle source
# File lib/bluenode/native_module.rb, line 36
def cache
  @cache ||= {}
end
exist?(id) click to toggle source
# File lib/bluenode/native_module.rb, line 32
def exist?(id)
  SOURCES.key?(id)
end
new(context, id) click to toggle source
# File lib/bluenode/native_module.rb, line 49
def initialize(context, id)
  @context  = context
  @filename = id + '.js'
  @id       = id
  @exports  = context.new_object
  @loaded   = false
end
require(context, id) click to toggle source
# File lib/bluenode/native_module.rb, line 15
def require(context, id)
  return self if id == 'native_module'

  cached = cache[id]

  return cached.exports if cached

  raise LoadError, "no such native module #{id}" unless exist?(id)

  # process.moduleLoadList.push('NativeModule ' + id)

  native_module = new(context, id)
  native_module.compile
  native_module.cache
  native_module.exports
end
sources() click to toggle source
# File lib/bluenode/native_module.rb, line 40
def sources
  @sources ||= Hash.new do |hash, id|
    hash[id] = SOURCES[id].call
  end
end

Public Instance Methods

cache() click to toggle source
# File lib/bluenode/native_module.rb, line 66
def cache
  self.class.cache[id] = self
end
compile() click to toggle source
# File lib/bluenode/native_module.rb, line 57
def compile
  wrapped   = Module.wrap(self.class.sources[id])
  function  = @context.runtime.eval(wrapped, filename)

  function.call exports, @context.new_function(require_proc), self, filename

  @loaded = true
end

Private Instance Methods

require_proc() click to toggle source
# File lib/bluenode/native_module.rb, line 71
def require_proc
  @require_proc ||= lambda do |_, path|
    NativeModule.require @context, path
  end
end