[ANN] RubyJS - Convert Ruby to Javascript

Hi all,

Long time since I announced my last project....

With RubyJS you can transform a subset of Ruby into Javascript code.

What works?

  * Classes, modules, inheritance
  * Instance methods, class methods
  * Exceptions (rescue/ensure)
  * Meta-programming stuff like 'attr_reader'
    (any meta-programming stuff works that does not appear inside methods)
  * Iterators, yield
  * "require" (with platform-specific extension ala Google Webtoolkit)
  * Inline Javascript code
  * Some kind of compile-time method lookup :wink:
  * Numbers, String, Array, Hash, Proc (a lot of functionallity is missing!)
  * Testing with Rhino-JS
  * A lot more :slight_smile:

There is a lots of room for optimizations and improvement :slight_smile:

Best take a look at sample/demo.rb or test/*.rb.

DOWNLOAD

···

=========

It's available from here:

http://ntecs.de/hg-projects/rubyjs/

Best use Mercurial (www.selenic.com/mercurial) to check it out:

  hg clone static-http://ntecs.de/hg-projects/rubyjs/

Requires ParseTree 1.6.3 as rubygem.

Have fun with it!

Regards,

  Michael

Is there a way to download it without installing Mercurial? I looked around the website given but didn't see anything. I am interested in seeing the code it produces.

Thanks,
Dan

Michael Neumann wrote:

···

Hi all,

Long time since I announced my last project....

With RubyJS you can transform a subset of Ruby into Javascript code.

What works?

  * Classes, modules, inheritance
  * Instance methods, class methods
  * Exceptions (rescue/ensure)
  * Meta-programming stuff like 'attr_reader' (any meta-programming stuff works that does not appear inside methods)
  * Iterators, yield
  * "require" (with platform-specific extension ala Google Webtoolkit)
  * Inline Javascript code
  * Some kind of compile-time method lookup :wink:
  * Numbers, String, Array, Hash, Proc (a lot of functionallity is missing!)
  * Testing with Rhino-JS
  * A lot more :slight_smile:

There is a lots of room for optimizations and improvement :slight_smile:

Best take a look at sample/demo.rb or test/*.rb.

DOWNLOAD

It's available from here:

http://ntecs.de/hg-projects/rubyjs/

Best use Mercurial (www.selenic.com/mercurial) to check it out:

  hg clone static-http://ntecs.de/hg-projects/rubyjs/

Requires ParseTree 1.6.3 as rubygem.

Have fun with it!

Regards,

  Michael

yes but how to interact with the browser window, for example, say i have
a :

<pre id="STDOUT"></pre> in the html document and i want to redefine ruby
puts like this :

def puts(str)
  document.getElementById('STDOUT')['inneHTML'] += str + "\n"
end

if i do that into your HelloWorld class i get errors :

method_generator.rb:1040:in `method_missing': Not implemented
(RuntimeError)
[...]

is their a way to let RubyJS knows that "document.getElementById..." is
allready JS ???

···

Michael Neumann <mneumann@ntecs.de> wrote:

With RubyJS you can transform a subset of Ruby into Javascript code.

--
Artaban de Médée

Yeah could you please post a tarball somewhere? I don't have mercurial but I am interested in playing with this project.

Thanks

-- Ezra Zygmuntowicz-- Lead Rails Evangelist
-- ez@engineyard.com
-- Engine Yard, Serious Rails Hosting
-- (866) 518-YARD (9273)

···

On Jan 13, 2007, at 5:22 PM, Daniel Finnie wrote:

Is there a way to download it without installing Mercurial? I looked around the website given but didn't see anything. I am interested in seeing the code it produces.

Thanks,
Dan

Is there a way to download it without installing Mercurial? I looked
around the website given but didn't see anything. I am interested in
seeing the code it produces.

Uploaded a temporary tarball here: http://ntecs.de/hg-projects/rubyjs.tar.gz

You can also see a sample of the produced code here:
http://ntecs.de/hg-projects/rubyjs/sample/demo.js

or try the demo:

···

Am Sonntag, 14. Januar 2007 02:22 schrieb Daniel Finnie:

Thanks,
Dan

Michael Neumann wrote:
> Hi all,
>
> Long time since I announced my last project....
>
> With RubyJS you can transform a subset of Ruby into Javascript code.
>
> What works?
>
> * Classes, modules, inheritance
> * Instance methods, class methods
> * Exceptions (rescue/ensure)
> * Meta-programming stuff like 'attr_reader'
> (any meta-programming stuff works that does not appear inside
> methods) * Iterators, yield
> * "require" (with platform-specific extension ala Google Webtoolkit)
> * Inline Javascript code
> * Some kind of compile-time method lookup :wink:
> * Numbers, String, Array, Hash, Proc (a lot of functionallity is
> missing!) * Testing with Rhino-JS
> * A lot more :slight_smile:
>
> There is a lots of room for optimizations and improvement :slight_smile:
>
> Best take a look at sample/demo.rb or test/*.rb.
>
> DOWNLOAD
> =========
>
> It's available from here:
>
> http://ntecs.de/hg-projects/rubyjs/
>
> Best use Mercurial (www.selenic.com/mercurial) to check it out:
>
> hg clone static-http://ntecs.de/hg-projects/rubyjs/
>
> Requires ParseTree 1.6.3 as rubygem.
>
> Have fun with it!
>
> Regards,
>
> Michael

> With RubyJS you can transform a subset of Ruby into Javascript code.

yes but how to interact with the browser window, for example, say i have
a :

<pre id="STDOUT"></pre> in the html document and i want to redefine ruby
puts like this :

def puts(str)
  document.getElementById('STDOUT')['inneHTML'] += str + "\n"
end

if i do that into your HelloWorld class i get errors :

Well, does it work in Ruby? NO! So it doesn't work in RubyJS as well :slight_smile:
It's a bit more advanced than converting "document" from Ruby plainly
into "document" in Javascript.

If you want to insert Javascript code directly into your Ruby code, use
backticks:

  def puts(str)
    `document.getElemementById('STDOUT')['innerHTML'] += str + "\n"`
  end

In the next step, I've planned to port Google's Webtoolkit (or Python Pyjamas)
to RubyJS.

method_generator.rb:1040:in `method_missing': Not implemented
(RuntimeError)
[...]

is their a way to let RubyJS knows that "document.getElementById..." is
allready JS ???

See above :slight_smile:

Regards,

  Michael

···

Am Sonntag, 14. Januar 2007 09:05 schrieb Une Bévue:

Michael Neumann <mneumann@ntecs.de> wrote:

Michael Neumann wrote:

> With RubyJS you can transform a subset of Ruby into Javascript code.

yes but how to interact with the browser window, for example, say i have
a :

<pre id="STDOUT"></pre> in the html document and i want to redefine ruby
puts like this :

def puts(str)
  document.getElementById('STDOUT')['inneHTML'] += str + "\n"
end

if i do that into your HelloWorld class i get errors :

Well, does it work in Ruby? NO! So it doesn't work in RubyJS as well :slight_smile:
It's a bit more advanced than converting "document" from Ruby plainly
into "document" in Javascript.

If you want to insert Javascript code directly into your Ruby code, use
backticks:

  def puts(str)
    `document.getElemementById('STDOUT')['innerHTML'] += str + "\n"`
  end

Sorry! Actually it should be:

   def puts(str)
     `document.getElemementById('STDOUT')['innerHTML'] += #<str> + "\n"`
   end

Notice the #<str>, which correctly converts variable names.

Regards,

  Michael

···

Am Sonntag, 14. Januar 2007 09:05 schrieb Une Bévue:

Michael Neumann <mneumann@ntecs.de> wrote:

fine thanks a lot, same syntax as using command line shell tools...

great job !

···

Michael Neumann <mneumann@ntecs.de> wrote:

If you want to insert Javascript code directly into your Ruby code, use
backticks:

  def puts(str)
    `document.getElemementById('STDOUT')['innerHTML'] += str + "\n"`
  end

In the next step, I've planned to port Google's Webtoolkit (or Python Pyjamas)
to RubyJS.

--
Artaban de Médée

Very cool! I'm played with Google Web Toolkit and really like it ... except for the part where you have to code in Java to use it. A Ruby equivalent would be wonderful!

···

On Jan 14, 2007, at 4:59 AM, Michael Neumann wrote:

In the next step, I've planned to port Google's Webtoolkit (or Python Pyjamas)
to RubyJS.

I got the same error with that writing :
../bin/../lib/rubyjs/method_generator.rb:1040:in `method_missing': Not
implemented (RuntimeError)
[...]
from ../bin/rubyjs_gen:82

···

Michael Neumann <mneumann@ntecs.de> wrote:

If you want to insert Javascript code directly into your Ruby code, use
backticks:

  def puts(str)
    `document.getElemementById('STDOUT')['innerHTML'] += str + "\n"`
  end

--
Artaban de Médée