Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A set of Rails responders to dry up your application

README.md

Responders

Gem Version Build Status Code Climate

A set of responders modules to dry up your Rails 3.2+ app.

Responders Types

FlashResponder

Sets the flash based on the controller action and resource status. For instance, if you do: respond_with(@post) on a POST request and the resource @post does not contain errors, it will automatically set the flash message to "Post was successfully created" as long as you configure your I18n file:

  flash:
    actions:
      create:
        notice: "%{resource_name} was successfully created."
      update:
        notice: "%{resource_name} was successfully updated."
      destroy:
        notice: "%{resource_name} was successfully destroyed."
        alert: "%{resource_name} could not be destroyed."

In case the resource contains errors, you should use the failure key on I18n. This is useful to dry up flash messages from your controllers. Note: by default alerts for update and destroy actions are commented in generated I18n file. If you need a specific message for a controller, let's say, for PostsController, you can also do:

  flash:
    posts:
      create:
        notice: "Your post was created and will be published soon"

This responder is activated in all non get requests. By default it will use the keys :notice and :alert, but they can be changed in your application:

config.responders.flash_keys = [ :success, :failure ]

You can also have embedded HTML. Just create a _html scope.

  flash:
    actions:
      create:
        alert_html: "<strong>OH NOES!</strong> You did it wrong!"
    posts:
      create:
        notice_html: "<strong>Yay!</strong> You did it!"

See also the namespace_lookup option to search the full hierarchy of possible keys.

HttpCacheResponder

Automatically adds Last-Modified headers to API requests. This allows clients to easily query the server if a resource changed and if the client tries to retrieve a resource that has not been modified, it returns not_modified status.

CollectionResponder

Makes your create and update action redirect to the collection on success.

Configuring your own responder

The first step is to install the responders gem and configure it in your application:

gem install responders

In your Gemfile, add this line:

gem 'responders'

Responders only provides a set of modules, to use them, you have to create your own responder. This can be done inside the lib folder for example:

# lib/app_responder.rb
class AppResponder < ActionController::Responder
  include Responders::FlashResponder
  include Responders::HttpCacheResponder
end

And then you need to configure your application to use it:

# app/controllers/application_controller.rb
require "app_responder"

class ApplicationController < ActionController::Base
  self.responder = AppResponder
  respond_to :html
end

Or, for your convenience, just do:

rails generate responders:install

Controller method

This gem also includes the controller method responders, which allows you to cherry-pick which responders you want included in your controller.

class InvitationsController < ApplicationController
  responders :flash, :http_cache
end

Interpolation Options

You can pass in extra interpolation options for the translation by adding an interpolation_options method to your controller:

class InvitationsController < ApplicationController
  responders :flash, :http_cache

  def create
    @invitation = Invitation.create(params[:invitation])
    respond_with @invitation
  end

  private

  def interpolation_options
    { resource_name: @invitation.email }
  end
end

Now you would see the message "bob@bob.com was successfully created" instead of the default "Invitation was successfully created."

Generator

This gem also includes a responders controller generator, so your scaffold can be customized to use respond_with instead of default respond_to blocks. Installing this gem automatically sets the generator.

Examples

Want more examples ? Check out this blog posts:

Bugs and Feedback

If you discover any bugs or want to drop a line, feel free to create an issue on GitHub.

http://github.com/plataformatec/responders/issues

MIT License. Copyright 2009-2013 Plataforma Tecnologia. http://blog.plataformatec.com.br

Something went wrong with that request. Please try again.