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)
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
rack)
Example (# app.rb HTTP::Server.start 3000 do [200, {'Content-Type' => 'text/plain'}, ["Hello World!\n"]]end
This is the original Node.js example:
// the original nodejs examplehttp = var port = processenvport || 1337;http;
Here's the (naïve) rack-like implementation of http/server.rb
# http/server.rb `_http = require('http')` < `_http.Server` alias_native :listen, :listen server = new `function(request, response) { request.on('end', function(chunk) { var rackResponse = ; response.writeHead(rackResponse[0], ); response.end( rackResponse[2].join(' ') ); }) }` server.listen(port) server end endend
express.js wrapper)
Example 2 (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!' endend.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.