Skip to content
This repository has been archived by the owner on Nov 11, 2017. It is now read-only.

Commit

Permalink
Deprecated warning in the README
Browse files Browse the repository at this point in the history
  • Loading branch information
mike-burns committed Jun 3, 2011
1 parent ec9acc9 commit 7649db6
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 120 deletions.
120 changes: 0 additions & 120 deletions README

This file was deleted.

123 changes: 123 additions & 0 deletions README.rdoc
@@ -0,0 +1,123 @@
= DEPRECATED

This plugin is deprecated. Please upgrade your Rails installation to at least
2.1 to get this functionality, maintained, as well as all the other joys that
come with a Rails upgrade.

= When

When adds :if and :unless conditions to ActiveRecord callbacks and validations
and ActionController filters. It works exactly the way as the current
implementation of #validates_acceptance_of.

It works on the 12 regular callbacks:

* before_validation
* before_validation_on_create
* after_validation
* after_validation_on_create
* before_save
* before_create
* before_update
* after_create
* after_update
* after_save
* before_destroy
* after_destroy

3 validations:

* validate
* validate_on_create
* validate_on_update

and 1 filter:

* before_filter

It works when :if or :unless is passed a Symbol, a Proc or a String. They
return or evaluate to a true or false value.

== Example

class Address < ActiveRecord::Base

before_save :geolocate

def geolocate
if complete?
...
end
end

def complete?
street? && city? && state? && zip?
end

end

In this case, we want to find the latitude and longitude of an address only if
the address is complete.

Wrapping the entirety of a callback method with conditional logic is bad form.
The callback should execute WHEN the model's life cycle reaches its
"before_save" point and WHEN its address is "complete."

With When, the WHEN responsibility is moved to where it belongs: as part of the
callback.

class Address < ActiveRecord::Base

before_save :geolocate,
:if => :complete?

def geolocate
...
end

def complete?
street? && city? && state? && zip?
end

end

before_create's single responsibility is to execute code WHEN certain
conditions are met. geolocate's single responsibility is to ... geolocate. It
should not contain its own preconditions.

== More Examples

before_create :encrypt_password,
:unless => lambda {|user| user.password_confirmation.blank?}

before_filter :log_in!,
:only => [:new, :create],
:unless => :logged_in?

== What When does NOT support

# ActiveRecord Class callbacks
before_create PasswordEncryptor,
:unless => lambda {|user| user.password_confirmation.blank?}

# ActionController Class filters
before_filter Authorizer,
:unless => :logged_in?

When will not work if your code contains any of these.

In our experience we've never used class callbacks or filters and find them to
be overkill.

== Obsolete after Rails 2.0.3

Whenever the next release after Rails 2.0.2 comes out, this feature will be
baked into Rails via the ActiveSupport::Callbacks module. Happy coding!

== Installation

piston import https://svn.thoughtbot.com/plugins/when/trunk vendor/plugins/when

== Copyright

Copyright (c) 2008 Jared Carroll, Dan Croak, and thoughtbot, inc. released under the MIT license

0 comments on commit 7649db6

Please sign in to comment.