This component is used to create slim controllers without unnecessery and repetitive code.
Ruby
Switch branches/tags
Nothing to show
Pull request Compare This branch is 66 commits ahead of nu7hatch:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.gitignore
LICENSE
README.rdoc
Rakefile
VERSION
padrino-responders.gemspec

README.rdoc

Padrino responders

This component is used to create slim controllers without unnecessery and repetitive code.

Installation

You can install Padrino responders via rubygems:

gem install padrino-responders

Now register responders in your application:

class SampleApp < Padrino::Application
  register Padrino::Mailer
  register Padrino::Helpers
  register Padrino::Responders
  ....

Getting started

Default responder is responsible for exposing a resource to different mime requests, usually depending on the HTTP verb. The responder is triggered when respond is called. The simplest case to study is a GET request:

SampleApp.controllers :examples do 
  provides :html, :xml, :json

  get :index do 
    respond(@examples = Example.find(:all))
  end
end

When a request comes in, for example for an XML response, three steps happen:

  • the responder searches for a template at extensions/index.xml;

  • if the template is not available, it will invoke #to_xml on the given resource;

  • if the responder does not respond_to :to_xml, call #to_format on it.

Builtin HTTP verb semantics

Using this responder, a POST request for creating an object could be written as:

post :create do 
  @user = User.new(params[:user])
  @user.save
  respond(@user, url(:users_show, :id => @user.id))
end

Which is exactly the same as:

post :create do 
  @user = User.new(params[:user])

  if @user.save
    flash[:notice] = 'User was successfully created.'
    case content_type
      when :html then redirect url(:users_show, :id => @user.id)
      when :xml  then render :xml => @user, :status => :created, :location => url(:users, :show, :id => @user.id)
    end 
  else
    case content_type
      when :html then render 'index/new'
      when :xml  then render :xml => @user.errors, :status => :unprocessable_entity 
    end
  end
end

The same happens for PUT and DELETE requests.

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don't break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright © 2010 Kriss 'nu7hatch' Kowalik. See LICENSE for details.