Parsing Ruby from JavaScript with opal-parser

Generally is best to precompile Ruby source files to JavaScript server-side but sometimes may become useful to be able to compile Ruby to JavaScript directly from JS.

Opal is able to compile its – pure Ruby – compiler to JavaScript (how cool is that!). The whole compiler chain is available in the stdlib as opal-parser.

require 'opal-parser'

Note: For the best performance and application load times, it is strongly recommended to design your application so that it won't need the parser. A lot of methods described in this document are more fun hacks than robust solutions. But if you really want or need to use them, for example so that you can implement a Ruby REPL or an interactive Ruby playground - we have you covered, but for all other cases, we strongly discourage you to take an advice from this guide.

Features

Kernel#eval

opal-parser provides a partial implementation of Kernel#eval.

Example:

require 'opal-parser'
eval "puts 'hello world!'"

Kernel#require_remote

Will fetch a remote URL (by means of a sync XMLHttpRequest) and evaluate its contents as Ruby code.

Example:

require 'opal-parser'
require_remote 'http://pastie.org/pastes/10444960/text'
HelloWorld.new.say_hello!

Opal.compile() and Opal.eval() (JavaScript)

After requiring opal-parser both Opal.compile() and Opal.eval() functions are added to the JavaScript API.

Opal.compile(string, options) (JavaScript) will forward the call to Opal.compile (Ruby) converting options from a plain JS object to a Ruby Hash. Opal.eval(string) will compile the given code to JavaScript and then pass it to the native eval() function.

Support for <script type="text/ruby">

When opal-parser is required it will search the page for any <script> tag with type text/ruby. If an src attribute is present will fetch and eval the file with Kernel#require_remote otherwise it will get the script tags contents and eval them with Kernel#eval.