Module: NodeModule

Defined in:
lib/node_module.rb,
lib/node_module/version.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

VERSION =
"0.1.2"

Class Method Summary collapse

Class Method Details

.call_javascript_function(name, args = []) ⇒ Object



23
24
25
# File 'lib/node_module.rb', line 23

def self.call_javascript_function(name, args = [])
  NodeModule.js_context.eval "Opal.Object['$#{name}'].apply(this, #{args.to_json})"
end

.convert_method_to_javascript(fn) ⇒ Object



19
20
21
# File 'lib/node_module.rb', line 19

def self.convert_method_to_javascript(fn)
  NodeModule.js_context.eval Opal.parse(fn)
end

.execute_following_methods_as_javascript!(receiver) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'lib/node_module.rb', line 50

def self.execute_following_methods_as_javascript!(receiver)
  active = nil
  receiver.define_singleton_method(:method_added) do |meth_name|
    return if active
    active = true
    receiver.node_module(meth_name)
    active = false
  end
end

.execute_methods_as_javascript!(methods, receiver) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/node_module.rb', line 39

def self.execute_methods_as_javascript!(methods, receiver)
  methods.each do |name|
    meth = receiver.instance_method(name).to_ruby
    NodeModule.convert_method_to_javascript(meth)

    receiver.send :define_method, name do |*args|
      NodeModule.call_javascript_function(__method__, args)
    end
  end
end

.included(base) ⇒ Object



9
10
11
# File 'lib/node_module.rb', line 9

def self.included(base)
  base.extend ClassMethods
end

.js_contextObject



13
14
15
16
17
# File 'lib/node_module.rb', line 13

def self.js_context
  @ctx ||= V8::Context.new do |ctx|
    ctx.eval Opal::Builder.build('opal')
  end
end