REPL in a browser.

Hi! I am a computer science student and I have a problem I just can't seem to find an answer to. I would like to embed a read-eval-print- loop in a website. Essentially, I'd like a window that mimics a console: the user types in some random text, it is processed, a value is returned and displayed, and then it waits for the user's input again*. Exactly like a console.

I am new to Ruby and I have only just begun looking at Rails. In fact, I have absolutely no experience in web programming whatever. So even if someone could just point me in the right direction, I'd appreciate it.

* FYI, I am trying to create an online version of my research project: an interpreter and interactive environment for a small functional language.

I can't imagine Rails offering any aid in this endeavour; if you're just taking user input to pass to a custom language interpreter, a basic CGI script will do quite nicely (or maybe if you absolutely want to get the lightweight stuff out of the way a much smaller framework like Camping or Sinatra). Let me ask, do you already have your language written? If so, I presume you used something other than Ruby, so I'd probably be easiest to just write the web REPL in the used language and pass the user's input as a string to to your interpreters routines. Otherwise, using Ruby to call your language's interpreter executable safely may prove difficult, as the easiest way to capture output of an external command (backticks ` or %x{}) could make it extremely difficult to sanitize input, and I know of no way to redirect the output of the multi-argument version of Kernel#system (which bypasses shell escaping). Eitherway, if anything malicious *is* possible with your language, you'll first need to create a sandboxed version of your interpreter before even considering building a web frontend.

For just learning how to write a CGI script with Ruby though, the standard documentation itself is quite explanatory (http://www.ruby- doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html), and most frameworks come with fantatsic documentation as well (hell, the text on www.sinatrarb.com home page really is all you need for a working Sinatra app).

You may want to take a look at the resurrected TryRuby repo - that tool was essentially exactly what you've described.

http://github.com/whymirror/TryRuby/tree/master

--Matt Jones

If just want to process some basic commands in a web environment you could create a form which simply re-displays itself.

Setup a class variable (or simply use the flash notification) to hold the result of whatever you want to do and instead of redirecting to show or index, redirect to new. Then display it in your view. You can assign a blank value for the first run. A simple model could hold the previous entries and you could iterate over this in the view if you wanted to show history.

One word of caution though, make sure you have a good grasp on the security implications before you expose your computer in this fashion. One bad file i/o call can ruin what might have been a good day.