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