aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorclaudiob <claudiob@gmail.com>2014-12-14 22:46:23 -0800
committerclaudiob <claudiob@gmail.com>2015-01-02 15:31:55 -0800
commitd217daf6a740de7e4925872abe632982cfaab89b (patch)
treeab0fe69ba6f3bc4d07aaaa3530633ebd8ca14d63 /activerecord/lib
parent2386daabe7f8c979b453010dc0de3e1f6bbf859d (diff)
downloadrails-d217daf6a740de7e4925872abe632982cfaab89b.tar.gz
rails-d217daf6a740de7e4925872abe632982cfaab89b.tar.bz2
rails-d217daf6a740de7e4925872abe632982cfaab89b.zip
Deprecate `false` as the way to halt AS callbacks
After this commit, returning `false` in a callback will display a deprecation warning to make developers aware of the fact that they need to explicitly `throw(:abort)` if their intention is to halt a callback chain. This commit also patches two internal uses of AS::Callbacks (inside ActiveRecord and ActionDispatch) which sometimes return `false` but whose returned value is not meaningful for the purpose of execution. In both cases, the returned value is set to `true`, which does not affect the execution of the callbacks but prevents unrequested deprecation warnings from showing up.
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/autosave_association.rb8
1 files changed, 7 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/autosave_association.rb b/activerecord/lib/active_record/autosave_association.rb
index c39b045a5e..5045e3065e 100644
--- a/activerecord/lib/active_record/autosave_association.rb
+++ b/activerecord/lib/active_record/autosave_association.rb
@@ -206,7 +206,13 @@ module ActiveRecord
if reflection.validate? && !method_defined?(validation_method)
method = (collection ? :validate_collection_association : :validate_single_association)
- define_non_cyclic_method(validation_method) { send(method, reflection) }
+ define_non_cyclic_method(validation_method) do
+ send(method, reflection)
+ # TODO: remove the following line as soon as the return value of
+ # callbacks is ignored, that is, returning `false` does not
+ # display a deprecation warning or halts the callback chain.
+ true
+ end
validate validation_method
end
end