render_execjs

Render executable JavaScript within Rails.

Installation

Add render_execjs to your Gemfile

gem 'render_execjs', '~> 0.0.2'
# gem 'coffee-script' # Uncomment this line if you'd like to render executable CoffeeScript

Run the render_execjs:install generator to create the optional configuration initializer file

rails generate render_execjs:install

Usage

In your controller:

render execjs: "return 'some JavaScript';"

It also supports CoffeeScript!

render execcs: "return 'some CoffeeScript'"

That's it!

Note that it will render whatever is returned from JavaScript.

Configuration

You can configure the following options:

environment # The environment in which to execute the JavaScript. For example, you can load the Jade templating library into this.
coffeescript_environment # Will take CoffeeScript, compile it, and set environment to that

render_execjs supports four syntaxes for setting configuration options (using the environment option as an example):

RenderExecJS.configure do
  self.environment = "'js environment'"
  environment "'js environment'"
end

RenderExecJS.environment = "'js environment'"
RenderExecJS.environment "'js environment'"

And two for getting configuration options:

RenderExecJS.configure do
  self.environment # => will return the environment
end

RenderExecJS.environment # => will also return the environment

Why would I want to render JavaScript from Rails?

Make sure that you're logged into your Twitter, now click on this link: http://twitter.com/tazsingh. Notice how it loads your Twitter profile first, then the page that you've requested?

It has to initialize the JavaScript environment before it can render the page you've requested. A solution to this, in Rails, is to use something like Mustache to render the same structure but with different logic; thus giving the browser the page you've requested as the base to initialize from. However this means duplication of logic.

Wouldn't it be nice to write logic and structure once, using a pretty templating system, that works on both client and server?

This is the problem that render_execjs is attempting to solve. Note that this is an experiment and suggestions are welcome!

Testing

render_execjs currently uses Appraisal to test against multiple versions of Rails. Install it with: rake appraisal:install

Now you can run:

rake appraisal spec         # To run specs against both Rails 3.1 and 3.2
rake appraisal:rails31 spec # To test against Rails 3.1
rake appraisal:rails32 spec # To test against Rails 3.2

Note that the testing system is currently undergoing an overhaul, so the above will change.

License

MIT