opal

CoffeeScript was so cool

npm install opal
42 downloads in the last week
72 downloads in the last month

Opal for Node.js

Build Status

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


Use Node.js FOR SPEED

@RoflscaleTips


@hipsterhacker I approve of your choices of roflscale technologies, particularly Node. Your roflmillions of users will appreciate it.

@RoflscaleTips


mongodb should be ported to nodejs for improved scalability

@RoflscaleTips

Usage

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

Installing

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"]]
end

This is the original Node.js example:

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

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(' ') );
        })
      }`
      server.listen(port)
      server
    end
  end
end

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
end.listen 3000

Developing

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

coffee -cwo lib/ lib/*.coffee

Running in development

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

Testing

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...

License

This project rocks and uses MIT-LICENSE.

npm loves you