NamedRoutes

A simple and generic named routes api. It works really well with Sinatra.

Installation/Usage

gem install named-routes

require "named-routes"

Route Definitions

You can define a named route by providing the name of the method and the definition.

NamedRoutes.path(:user, "/users/:user_id") # => "/users/:user_id"

You can use this in conjunction with Sinatra routes like so:

include NamedRoutes
get path(:user, "/users/:user_id") do
  # ...
end

If you have multiple handlers for the same route, you can use the block syntax:

include NamedRoutes
path(:user, "/users/:user_id") do |_|
  get _ do
    # ...
  end

  post _ do
    # ...
  end
end

You can also define prefixes on the route definitions:

include NamedRoutes
paths.prefix = "admin"

path(:user, "/users/:user_id") do |_| # => /admin/users/:user_id
  get _ do
    # ...
  end

  post _ do
    # ...
  end
end

Route Helpers

You can access the routes by doing the following.

include NamedRoutes
paths.host = "example.com"
path(:user, "/users/:user_id")
paths.user(:user_id => 42) # => "/users/42"
paths.http.user(:user_id => 42) # => "http://example.com/users/42"
paths.https.user(:user_id => 42) # => "https://example.com/users/42"

It also works with prefixes:

include NamedRoutes
paths.host = "example.com"
paths.prefix = "admin"
path(:user, "/users/:user_id")
paths.user(:user_id => 42) # => "/users/42"
paths.http.user(:user_id => 42) # => "http://example.com/admin/users/42"
paths.https.user(:user_id => 42) # => "https://example.com/admin/users/42"

And with query params:

include NamedRoutes
paths.host = "example.com"
paths.prefix = "admin"
path(:user, "/users/:user_id")
paths.user(:user_id => 42, :foo => "bar of soap") # => "/users/42&foo=bar+of+soap"

Advanced Usages

You can also inherit Routes to have different sets of Routes. This is useful if you want route sets with different prefixes.

class AdminRoutes < NamedRoutes::Routes
  self.prefix = "admin"
end

class PartayRoutes < NamedRoutes::Routes
  self.prefix = "partay"
end

def admin_paths
  AdminRoutes
end

def partay_paths
  PartayRoutes
end

get admin_paths.path(:user, "/users/:user_id") do # => /admin/users/:user_id
  # ...
end

admin_paths.user(:user_id => 42) # => "/admin/users/42"

get partay_paths.path(:user, "/users/:user_id") do # => /partay/users/:user_id
  # ...
end

partay_paths.user(:user_id => 42, :beer => "pabst") # => "/partay/users/42&beer=pabst"

Copyright (c) 2010 Brian Takita. This software is licensed under the MIT License.