CoffeeScript was so cool

Opal for Node.js

Use Ruby on Node.js for REAL-WORLD rofl-SCALING

> Use Node.js FOR SPEED > > — [@RoflscaleTips](https://twitter.com/RoflscaleTips/status/57551756657303552)
> [@hipsterhacker](https://twitter.com/hipsterhacker) I approve of your choices of roflscale technologies, particularly Node. Your roflmillions of users will appreciate it. > > — [@RoflscaleTips](https://twitter.com/RoflscaleTips/status/50320781162446848)
> mongodb should be ported to nodejs for improved scalability > > — [@RoflscaleTips](https://twitter.com/RoflscaleTips/status/190291005138939904)

Run with opal-node app.rb or run the repl: opal-node-irb

Install with NPM: npm install -g opal or via RVM: rvm install opal

Example (rack)

# app.rb 
require 'http/server'
HTTP::Server.start 3000 do
  [200, {'Content-Type' => 'text/plain'}, ["Hello World!\n"]]

This is the original Node.js example:

// the original nodejs example 
http = require('http')
var port = process.env.port || 1337;
http.createServer(function(reqres) {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');

Here's the (naïve) rack-like implementation of http/server.rb

# http/server.rb 
module HTTP
  `_http = require('http')`
  class Server < `_http.Server`
    alias_native :listen, :listen
    def self.start port&block
      server = new `function(request, response) {
        request.on('end', function(chunk) {
          var rackResponse = #{ block.call(`request`, `response`) };
          response.writeHead(rackResponse[0], #{ `rackResponse[1]`.to_native });
          response.end( rackResponse[2].join(' ') );

Example 2 (express.js wrapper)

A simple Express.js wrapper example can be found in examples/express-wrapper.rb

Express.new do
  get '/' do |req, res|
    res.send 200, 'hulla!'
end.listen 3000

Start a coffee watcher to keep opal.js in sync with opal.coffee

coffee -cwo lib/ lib/*.coffee
NODE_PATH="$NODE_PATH:../lib/" node ./bin/opal-node
NODE_PATH="$NODE_PATH:../lib/" node ./bin/opal-node-irb

To keep the specs running while developing just install and use spectator that will compile opal.coffee to opal.js before every run of the spec.

$ gem install spectator
$ gem install notify # to get notification
$ spectator
--- Waiting for changes...

This project rocks and uses MIT-LICENSE.