Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Make Sinatra routes first class objects (extracted from BigBand).

tag: v0.4.0

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 spec
Octocat-spinner-32 README.md
Octocat-spinner-32 sinatra-advanced-routes.gemspec
README.md

Sinatra::AdvancedRoutes

Makes routes first class objects in Sinatra.

BigBand

Sinatra::AdvancedRoutes is part of the BigBand stack. Check it out if you are looking for other fancy Sinatra extensions.

Installation

gem install sinatra-advanced-routes

Example

Route manipulation:

require "sinatra"
require "sinatra/advanced_routes"

admin_route = get "/admin" do
  administrate_stuff
end

before do
  # Let's deactivate the route if we have no password file.
  if File.exists? "admin_password" then admin_route.activate
  else admin_route.deactivate 
  end
end

first_route = get "/:name" do
 # stuff
end

other_route = get "/foo_:name" do
  # other stuff
end

# Unfortunatly first_route will catch all the requests other_route would
# have gotten, since it has been defined first. But wait, we can fix this!
other_route.promote

Route inspection:

require "some_sinatra_app"

SomeSinatraApp.each_route do |route|
  puts "-"*20
  puts route.app.name   # "SomeSinatraApp"
  puts route.path       # that's the path given as argument to get and akin
  puts route.verb       # get / head / post / put / delete
  puts route.file       # "some_sinatra_app.rb" or something
  puts route.line       # the line number of the get/post/... statement
  puts route.pattern    # that's the pattern internally used by
  puts route.keys       # keys given when route was defined
  puts route.conditions # conditions given when route was defined
  puts route.block      # the route's closure
end

Some of that fields (like conditions or pattern) can be changed (will take effect on the routing).

Usage with Sinatra::Base

require "sinatra/base"
require "sinatra/advanced_routes"

class Foo < Sinatra::Base
  register Sinatra::AdvancedRoutes
end
Something went wrong with that request. Please try again.