Socket
Book a DemoInstallSign in
Socket

response_for_rails

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

response_for_rails

0.4.1
bundlerRubygems
Version published
Maintainers
1
Created
Source

= response_for

The gem is called response_for_rails

response_for (see ResponseFor::ActionController::ClassMethods) allows you to decorate the respond_to block of actions on subclassed controllers. This works nicely with http://github.com/ianwhite/resources_controller

response_for's functionality can be summed up in one sentence:

"response_for allows you to specify default responses for any action (or before filter) that doesn't render or redirect"

Actions typically do two things - interact with models, and render a response. The above simple idea allows you to decouple these two functions (where appropriate), which means abstraction of common patterns becomes possible.

== For Rails 3.0 and higher

Simply add the response_for_rails gem to your Gemfile

gem "response_for_rails"

== Older rails

=== For Rails 2.2 thru 2.3

For these older versions of rails please checkout the 0.2-stable-rails2.1 branch. Plugin install on rails 2.2 and up can fetch from a branch.

./script/plugin install git://github.com/ianwhite/response_for.git -r 0.2-stable-rails2.1

=== For Rails 2.1

cd vendor/plugins git clone git://github.com/ianwhite/response_for.git cd response_for git checkout 0.2-stable-rails2.1 rmdir -f .git

=== For Rails 2.0

Please checkout the 0.1-stable-rails2.0 branch. Same general instructions for Rails 2.1 should work.

== Run the specs

To get set up for development, do the following:

git clone git://github.com/ianwhite/response_for cd response_for cp Gemfile.lock.development Gemfile.lock bundle rake

== Example

class FooController < ApplicationController def index @foos = Foo.find(:all) # default response - render html end end

this controller needs to respond_to fbml on index.

Using response_for, we don't need to repeat '@foos = Foo.find(1)'

class SpecialFooController < FooController response_for :index do |format| format.fbml { render :inline => turn_into_facebook(@foos) } end end

== Contributors

== History

NOTE: 0.2-stable has BC-breaking API changes, and is supported only for Rails >= 2.1.x. Version 0.2.0 was released on Sept 14th 2008. You should use 0.1-stable in your existing projects until you have runs your specs and whatnot.

If you want to know more about why I changed the API in 0.2 read on

=== Why change the API in 0.2?

repsonse_for <= v0.1 intercepted respond_to calls to allow overriding of these by class level declarations. This turns out to have some headaches, such as:

  • If you have some bail-out code in before_filters which uses respond_to, then response_for tries to overwrite this. This meant that I had to write response_for to only kick in once before_filters had run. This made for some funky smelling code.

  • Sometimes your bail out code runs after the before_filters, in a superclass action for example, or just as part of your action (perhaps in another method). The above hack doesn't work for this case (the before_filters have run). The solution in this case was to use respond_to_without_response_for in any bail out code.

  • Conceptually, overriding code declared in methods, with code declared at the class level, is weird. Here's an example

    class FooController < SuperclassController response_for :index # override Superclass's index respond_to

    def index
      respond_to  # one might expect this to override the above, as its declared later - but it wont!
    end
    

    end

So, in 0.2 a much simpler idea is behind response_for - you can declare a default response for an action which will be performed if that that action has not already performed a render or redirect. This means that all of your bail out code written with respond_to will do what it's supposed to.

==== Rewriting for 0.2

If you're upgrading, you just need to convert any actions you want to override from this:

def index @things = Thing.all respond_to do |format| format.html format.xml { render :xml => @things } end end

to this:

def index @things = Thing.all end

response_for :index |format| format.html format.xml { render :xml => @things } end

== Previous Versions: 0.1

There is a branch for rails 2.0 users on this release. If you are using rails 2.0, then you want the 0.1-stable-rails2.0 branch. If you are using rails >= 2.1 then use the 0.1-stable branch

FAQs

Package last updated on 16 Mar 2012

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.