Skip to content

Brings Rails named routes to javascript

License

Notifications You must be signed in to change notification settings

MESHMD/js-routes

This branch is 647 commits behind railsware/js-routes:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

00f4e64 · Jan 24, 2013
Dec 22, 2012
Jan 24, 2013
Jan 24, 2013
Aug 3, 2011
Apr 20, 2012
Aug 3, 2011
Dec 20, 2011
Jul 1, 2012
Jul 1, 2012
Aug 3, 2011
Jul 23, 2012
Jan 4, 2013
Jan 4, 2013
Jan 4, 2013

Repository files navigation

JsRoutes

Generates javascript file that defines all Rails named routes as javascript helpers

Intallation

Your Rails Gemfile:

gem "js-routes"

Basic Setup (Asset Pipeline)

Require js routes file in application.js or other bundle

/*
= require js-routes
*/

Also in order to flush asset pipeline cache sometimes you might need to run:

rake tmp:cache:clear

This cache is not flushed on server restart in development environment.

Important: If routes.js file is not updated after some configuration change you need to run this command again.

Advanced Setup

If you need to customize routes file create initializer, like config/initializers/jsroutes.rb:

JsRoutes.setup do |config|
  config.option = value
end

Available options:

  • default_format - Format to append to urls. Default: blank
  • exclude - Array of regexps to exclude from js routes. Default: []
    • Note that regexp applied to named route not to URL
  • include - Array of regexps to include in js routes. Default: []
    • Note that regexp applied to named route not to URL
  • namespace - global object used to access routes. Default: Routes
    • Supports nested namespace like MyProject.routes
  • prefix - String representing a url path to prepend to all paths. Default: blank
    • Example: http://yourdomain.com. This will cause route helpers to generate full path only.

You can generate routes files on the application side like this:

JsRoutes.generate!("#{path}/app_routes.js", :namespace => "AppRoutes", :exclude => /^admin_/, :default_format => "json")
JsRoutes.generate!("#{path}/adm_routes.js", :namespace => "AdmRoutes", :include => /^admin_/, :default_format => "json")

In order to generate javascript to string and manipulate them yourself use: Like:

routes_js = JsRoutes.generate(options)

Usage

Configuration above will create a nice javascript file with Routes object that has all the rails routes available:

Routes.users_path() // => "/users"
Routes.user_path(1) // => "/users/1"
Routes.user_path(1, {format: 'json'}) // => "/users/1.json"
Routes.new_user_project_path(1, {format: 'json'}) // => "/users/1/projects/new.json"
Routes.user_project_path(1,2, {q: 'hello', custom: true}) // => "/users/1/projects/2?q=hello&custom=true"
Routes.user_project_path(1,2, {hello: ['world', 'mars']}) // => "/users/1/projects/2?hello%5B%5D=world&hello%5B%5D=mars"

Using serialized object as route function arguments:

var google = {id: 1, name: "Google"};
Routes.company_path(google) // => "/companies/1"
var google = {id: 1, name: "Google", to_param: "google"};
Routes.company_path(google) // => "/companies/google"

In order to make routes helpers available globally:

jQuery.extend(window, Routes)

What about security?

js-routes itself do not have security holes. It makes URLs without access protection more reachable by potential attacker. In order to prevent this use :exclude option for sensitive urls like /admin_/

Spork

When using Spork and Spork.trap_method(Rails::Application::RoutesReloader, :reload!) you should also do:

Spork.trap_method(JsRoutes, :generate!)

Advantages over alternatives

There are some alternatives available. Most of them has only basic feature and don't reach the level of quality I accept. Advantages of this one are:

  • Rails3 support
  • Rich options set
  • Support Rails #to_param convention for seo optimized paths
  • Well tested

Thanks to Contributors

Have fun

About

Brings Rails named routes to javascript

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 80.9%
  • JavaScript 19.1%