Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Lyndon wraps JavaScript in a loving MacRuby embrace. A fun hack that is no longer maintained.

branch: master

output to STDOUT and exit successfully

MacRuby has a tendency to blurt out SIMBL-related errors (for example)
on STDERR, so outputting to STDOUT makes it easier to distinguish (as
well as to capture output). [mojodna]
latest commit a3fa1f6905
Chris Wanstrath authored September 12, 2009
Octocat-spinner-32 bin
Octocat-spinner-32 examples
Octocat-spinner-32 lib
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README.markdown
Octocat-spinner-32 Rakefile
README.markdown

Lyndon

Lyndon is like Johnson. But for MacRuby. And with JavaScriptCore.

Here It Goes

$ rip install git://github.com/defunkt/lyndon.git
Successfully installed lyndon (41548d2)
$ lyndon
js> 1 + 1
=> 2
js> function name() { return "lyndon!" }
=> undefined
js> name
=> function name() { return "lyndon!" }
js> name()
=> "lyndon!"
js> Ruby.puts('Ruby, I presume.')
Ruby, I presume.
=> undefined
js> Ruby.File_read('hi.js')
=> "// this is hi.js\n"

Stuff like that.

Oh, the DOM

$ lyndon test.html 
js> Lyndon.require('jquery.min.js')
=> true
js> jQuery('#hi').html()
=> "Hello."
js> jQuery('#hi').html('Hi.')
=> [object Object]
js> jQuery('#hi').html()
=> "Hi."
=> "[object HTMLBodyElement]"
js> document.body.innerHTML
=> "\n    <h1 id=\"hi\">Hi.</h1>\n  \n\n"

HTML with JavaScript

$ cat examples/index.html | lyndon
<html><head>
<title>It worked!</title>
 </head><body>
<div id="content">
<div id="hi">Hello world!</div></div>
</body></html>

Note that the <div id="hi">Hello world!</div></div> does not exist in examples/index.html - it's added at runtime by JavaScript. JavaScript that strips itself out and changes the <title>.

Seriously.

With Ruby

If you want:

$ macirb
>> require 'lyndon'
=> true
>> Lyndon.eval('1 + 1')
=> 2
>> r = Lyndon::Runtime.new
=> ##-<Lyndon::Runtime:...>
>> r.eval('var name = "chris"')
=> undefined
>> r.eval('name')
=> "chris"

That's basically it.

Chris Wanstrath // chris@ozmm.org

Something went wrong with that request. Please try again.