timimahoney / decaf

Ruby in the browser.
http://trydecaf.org
470 stars 8 forks source link

Include useful standard libraries (JSON, Set, Observable, etc.) #14

Open collin opened 11 years ago

collin commented 11 years ago
require 'set'
>>> "NoMethodError: undefined method `require' for #<Window:0x007f9ff2c33108>"
Kernel.require 'set'
>>> "LoadError: cannot load such file -- set"
Kernel.require 'observable'
>>> "LoadError: cannot load such file -- observable"

I get something like net/http not being available, as the DOM provides interfaces. But things like Set and Observable ought to be available, no?

timimahoney commented 11 years ago

Good point. It would be nice to have modules like Set, Observable, and JSON. The problem is figuring out where to load them from. Either the files can be distributed in the application bundle and loaded from there, or they can be compiled and linked statically with the project. I believe I'd like to link them statically, since then we can ensure that everything works. Then, the problem is deciding which libraries to include. Any thoughts?

By the way, this brings up a security issue. I thought I had undefined require along with methods like exit!, but apparently not all the way. This commit should take care of that.

collin commented 11 years ago

Taking a quick peek at lib/ from ruby...

Probably others but that's what jumped out the most in quick look at 'lib/'. Probably okay to miss things as long as a clear way to include stdlib code is introduced so missing bits can be added later, right?

collin commented 11 years ago

Also, to go off topic on this ticket. Absolutely loving being able to play around with the DOM in Ruby. Match made in heaven.

timimahoney commented 11 years ago

I'll look into including some or all of these libraries soon. I never knew about OpenStruct, and that might be a nice format to convert JSON to.

Anyway, I'm glad you like it! Making anything cool?

collin commented 11 years ago

I'm playing with porting concepts I use in a personal js app framework to ruby https://github.com/collin/AlphaSimprini.rb/blob/master/app/assets/javascripts/alpha_simprini/core/view.rb

So far it's a dream.

timimahoney commented 11 years ago

Nice! I agree that it's kind of a dream to use Ruby in the browser.

Back to the topic, I'm putting out a new binary soon, but it doesn't have the standard libraries. I'll work on adding these libraries for the next major update.

senthilnayagam commented 11 years ago

I would love if you could include/load Math library by default, there is no pure ruby version Math library available

timimahoney commented 11 years ago

@senthilnayagam Do you mean this Math library? If so, it's already in there. Try Math.cos(Math::PI).

senthilnayagam commented 11 years ago

Thanks you saved my day :)

senthilnayagam commented 11 years ago

is there a way to load a local ruby script in the web pages context.

this way I can include my favourite scripts to automate testing, or crawling the pages, there are some javascript based tools like phantomjs which does this with javascript, but a ruby option would be awesome

senthilnayagam commented 11 years ago

also some way to remotely connect to decaf instance like how pry-remote does with DRB, this way we can script it from a normal ruby script

timimahoney commented 11 years ago

I'm not quite sure what you're looking for in the past two comments. Could you elaborate?