Library for making seperate Ruby Rack apps behave like one.
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



Kazoo is a Ruby framework to faciliate modular content management applications. So far, it's a router and some methods added to Sinatra to make it easier to have multiple Sinatra apps act more cohesively. Please be aware that it is not production ready yet. Kazoo is on so that you can install it by running:

gem install kazoo

The Kazoo router takes paths and matches them to apps. This is how you use it in a file:

require 'rubygems'
require 'kazoo'

# Omitted code that pulls in Sinatra apps...

run {
  match '/feeds', :to => Feeds
  match '/control/feeds', :to => Control::Feeds
  error_handler DogCatcher

Use the match method to specify the route and the :to option to specify the application. You can specify an app to handle errors (like page not found or server errors), though this feature is not complete right now. I will get this up and going shortly, and when I do I will update this readme.

The Kazoo::Sinatra class overrides the render method to automatically add the name of the app to the view path. So an app named Feeds will have the default base path of "./views/feeds". Admin::Feeds will have a base path of './views/admin/feeds'. You can override this by putting a slash in your template path. See the Sinatra docs for more details. The default layout is './views/layouts/application.#{template_engine}' though you can override this with the same rules as above.

In order to facilitate the fact that apps can be mounted at different paths, url helpers are included.

require 'kazoo/sinatra'

class Feeds < Kazoo::Sinatra

    :index => '/',
    :show => '/:id'
  get path(:index) do
    erubis :index
  get path(:show) do
    @feed = Feed.find(params[:id])
    erubis :show

  #alternatively, you can declare paths inline
  get path(:show, '/:id') do
    @feed = Feed.find(params[:id])
    erubis :show

<p>This is the generated URL for this page: <%= url(:show, :id => %></p>

If you run into any problems or have suggestions please submit a ticket at