Forum: Ruby RubyJS - Convert Ruby to Javascript

Baf83fa62a7481a08c40353795e11f44?d=identicon&s=25 Michael Neumann (Guest)
on 2007-01-19 16:31
(Received via mailing list)
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 ;-)
  * Numbers, String, Array, Hash, Proc (a lot of functionallity is
missing!)
  * Testing with Rhino-JS
  * A lot more :)

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

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
672d693d2b8d408648f664b93d84e8e9?d=identicon&s=25 Une Bévue (Guest)
on 2007-09-25 22:30
(Received via mailing list)
Michael Neumann <mneumann@ntecs.de> 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 :

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

is their a way to let RubyJS knows that "document.getElementById..." is
allready JS ???
Baf83fa62a7481a08c40353795e11f44?d=identicon&s=25 Michael Neumann (Guest)
on 2007-09-25 22:31
(Received via mailing list)
Am Sonntag, 14. Januar 2007 09:05 schrieb Une Bévue:
>   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 :)
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 :)

Regards,

  Michael
672d693d2b8d408648f664b93d84e8e9?d=identicon&s=25 Une Bévue (Guest)
on 2007-09-25 22:38
(Received via mailing list)
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

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
52a177e9dbd3e614825aabc4e45f8cd6?d=identicon&s=25 Mark Volkmann (Guest)
on 2007-09-25 22:38
(Received via mailing list)
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.

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!
Baf83fa62a7481a08c40353795e11f44?d=identicon&s=25 Michael Neumann (Guest)
on 2007-09-25 22:40
(Received via mailing list)
Am Sonntag, 14. Januar 2007 02:22 schrieb Daniel Finnie:
> 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:
6076c22b65b36f5d75c30bdcfb2fda85?d=identicon&s=25 Ezra Zygmuntowicz (Guest)
on 2007-09-25 22:42
(Received via mailing list)
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

  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)
672d693d2b8d408648f664b93d84e8e9?d=identicon&s=25 Une Bévue (Guest)
on 2007-09-25 22:48
(Received via mailing list)
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.

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

great job !
Cd3312ac93f768b1b449af457c0fca06?d=identicon&s=25 Daniel Finnie (Guest)
on 2007-09-25 22:49
(Received via mailing list)
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
Baf83fa62a7481a08c40353795e11f44?d=identicon&s=25 Michael Neumann (Guest)
on 2007-09-25 22:52
(Received via mailing list)
Michael Neumann wrote:

>> def puts(str)
> 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
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.