dia nashorner
Embed the ~~Mozilla Rhino~~ Nashorn JavaScript interpreter into Ruby.
Nashorn JS engine is available with Java 8 installs (try jjs -v
).
Requirements
Java >= 8
jruby -S gem install dienashorner
# make sure you have JRuby >= 1.7.x
Features
- Evaluate JavaScript bits from the Ruby side
- Embed Ruby objects into the JavaScript world
require 'nashorn'
- evaluate some simple JavaScript
ruby Nashorn.eval 'true + 100' #=> 101 Nashorn.eval_js '"4" + 2' #=> "42"
include Nashorn
eval_js "'1' + '' * 2" #=> "10"
if you need more control, use a
Context
Nashorn::Context.open do |js| js['foo'] = "bar" js.eval('foo') # => "bar" end
evaluate a Ruby function from JavaScript
Nashorn::Context.open do |js| js['say'] = lambda { |word, times| word * times } js.eval("say('Szia', 3) + '!'") #=> SziaSziaSzia! end
embed a Ruby object into your JavaScript environment
class MyMath def plus(a, b); a + b + 1 end end
Nashorn::Context.open do |js| js["math"] = MyMath.new js.eval("math.plus(20, 21)") #=> 42 end
* make a Ruby object a JavaScript (global) environment
```ruby
math = MyMath.new
Nashorn::Context.open(:with => math) do |js|
js.eval("plus(20, 21)") #=> 42
end
Context Options
Mostly the same as with jjs
e.g. Nashorn::Context.open(:strict => true)
.
Loading .js
File.open('___.js') { |file| eval_js file }
Nashorn::Context.open { |js| js.load('___.js') }
Configurable Ruby access
Ported over from Rhino
Rhino Compatibility
Nashorn was inspired (and crafted) from Rhino a.k.a therubyrhino JRuby gem.
Far from being a drop-in replacement although there's require 'nashorn/rhino'
.
Less.rb
Less.rb seems to be working (with hacks),
for now you will need to :require 'nashorn/rhino/less'
before require 'less'
.
ExecJS
dienashorner gem ships with an ExecJS compatible runtime, its best to load it
(require 'nashorn/execjs/load'
) before ExecJS's auto-detection takes place :
gem 'execjs', require: false
gem 'dienashorner', platform: :jruby, require: [ 'nashorn/execjs/load', 'execjs' ]
Nashorn
Nashorn JavaScript runtime is part of OpenJDK (available since 8u40).
Copyright
Copyright (c) 2016 Karol Bucek. Apache License v2 (see LICENSE for details).