Module: NodeModule
- Defined in:
- lib/node_module.rb,
lib/node_module/version.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- VERSION =
"0.1.1"
Class Method Summary collapse
- .eval_js(name, fn, args) ⇒ Object
- .execute_following_methods_as_javascript!(receiver) ⇒ Object
- .execute_methods_as_javascript!(methods, receiver) ⇒ Object
- .included(base) ⇒ Object
Class Method Details
.eval_js(name, fn, args) ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/node_module.rb', line 25 def self.eval_js(name, fn, args) @ctx ||= V8::Context.new do |ctx| ctx.eval Opal::Builder.build('opal') end @ctx.eval Opal.parse(fn) @ctx.eval "Opal.Object.$#{name}.apply(this, #{args.to_json})" end |
.execute_following_methods_as_javascript!(receiver) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/node_module.rb', line 44 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
34 35 36 37 38 39 40 41 42 |
# File 'lib/node_module.rb', line 34 def self.execute_methods_as_javascript!(methods, receiver) methods.each do |name| fn = receiver.instance_method(name).to_ruby receiver.send :define_method, name do |*args| NodeModule.eval_js(name, fn, 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 |