Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

The basic Sinatra DSL inside of ActionController

branch: master
README.md

Astaire: The basic Sinatra DSL for your Rails 3 apps

Astaire allows the use of the basic Sinatra get / post / put / delete DSL inside of Rails controllers. This allows defining quick actions without having to update config/routes.rb. For example:

class ContactController < ActionController::Base

  get "/contact" do
    render :contact_form
  end

  post "/contact" do
    # handle form input
    redirect_to homepage_path
  end

end

Installation

Add the following to your application's Gemfile

gem "astaire"

Then, run bundle install and you are good to go.

Usage

Currently, Astaire provides 4 class level methods available in the controller: #get, #post, #put, and #delete. With these methods you can define actions and routes all at once.

class MyController < ActionController::Base

    # Get the contact form
    get "/contact" do
      render :contact_form
    end

    # The paths can also have named parameters and
    # optional segments
    #
    # /say/hello       => "I say: hello"
    # /say/hello/world => "I say: hello world"
    #
    get "/say/:one(/:two)" do
      words = [params[:one], params[:two]].compact.join(' ')
      render :text => "I say: #{words}"
    end
end

It is possible to name actions such that regular URL helpers can generate them.

class MyController < ActionController::Base

  # Will output /hello
  def index
    render :text => hello_path
  end

  get "/hello", :as => :hello do
    render :text => "hello"
  end

end

Astaire supports inline templates in the same style as Sinatra. For example:

class MyController < ActionController::Base

  get "/hello" do
    render :greetings
  end

end

__END__

@@ greetings.html.erb
Greetings to you.

TODO

I guess, at this point I'm just putting what I have into the wild. Next steps will be determined by feedback that I get.

Something went wrong with that request. Please try again.