Opal is a Ruby to JavaScript source-to-source compiler.
It comes packed with the Ruby corelib you know and love.
It is both fast as a runtime and small in its footprint.
Getting Started Rack tutorial Rails tutorial CLI tutorial Awesome Opal
class User
attr_accessor :name
def initialize(name)
@name = name
end
def admin?
@name == 'Admin'
end
end
user = User.new('Bob')
# the output will go to your browser's console
puts user
puts user.admin?
Add rack & opal-sprockets to your Gemfile.
gem 'rack'
gem 'opal-sprockets'
Setup the Opal rack-app in your config.ru as follows:
require 'opal-sprockets'
run Opal::Server.new { |server|
# the name of the ruby file to load. To use more files they must be required from here (see app)
server.main = 'application'
# the directory where the code is (add to opal load path )
server.append_path 'app'
}
Add a file named hello_world.js.rb to app/ with your hello world:
require 'opal'
require 'native'
$$.alert 'Hello World from Opal!'
Then start the server with bundle exec rackup and visit http://localhost:9292.
Learn more about Opal Sprockets
Add opal-rails to your Gemfile or build your Rails app with Opal support: rails new -j opal
gem 'opal-rails'
Rename app/assets/javascripts/application.js to app/assets/javascripts/application.js.rb and replace its contents with this code:
require 'opal'
require 'opal_ujs'
require 'turbolinks'
require_tree '.'
Create a "Hello World" controller:
bin/rails generate controller HelloWorld index
Replace the contents of app/assets/javascripts/hello_world.js.rb with:
Document.ready? do
Element.find('body').html = '<h1>Hello World from Opal!</h1>'
end
Start the server with bin/rails server and visit: http://localhost:3000/hello_world/index.
Install opal from Rubygems:
gem install opal
Write this code to hello_world.js.rb:
require 'ostruct'
greeting = OpenStruct.new(type: :Hello, target: :World, source: :Opal)
puts "#{greeting.type} #{greeting.target} from #{greeting.source}!"
Run it with Node.js (assuming it's installed):
opal hello_world.js.rb
# => Hello World from Opal!
Compile it to a JavaScript file:
opal -c hello_world.js.rb > hello_world.js
node hello_world.js
# => Hello World from Opal!
For a full list of supported options see:
opal --help
Opal is hosted on GitHub .
You can join the community by chatting on Gitter at opal/opal or on Freenode IRC (channel: #opal).
Ask questions on stackoverflow by using the #opalrb tag.
Discuss on the mailing list or on Twitter @opalrb.
Stay updated on the latest Opal news from around the web with the Opalist newsletter .