The basic Sinatra DSL inside of ActionController
Ruby
Pull request Compare This branch is 7 commits ahead of carllerche:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
lib
spec
.gitignore
Gemfile
Gemfile.lock
LICENSE
README.md Update README.md Jan 31, 2014
Rakefile
astaire.gemspec

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.