Permalink
Browse files

Further clean-up of ActiveSupport::Callbacks

In #11195 I noticed a trailing comma in the docs, but I decided to
further clean it up.

What I have done:

* Clean up the trailing comma in the docs and some extra whitespace
  lines.
* Used `Array#extract` options to factor the repetitive pattern of
  `args.last.is_a(Hash) ? ...`
* Renamed the local var `config` to `options` in `define_callbacks`, as
  `options` seems to be the de facto name for the options objects.
* Renamed the local var `l` to `line` in `define_callback` (maybe it
  meant `lambda` in the context) as single `l` may look like `1` in some
  fonts.
  • Loading branch information...
1 parent 18099b0 commit 269b4638d56081742a2166d23ead95d5c744aa48 @gsamokovarov gsamokovarov committed Jul 1, 2013
Showing with 9 additions and 10 deletions.
  1. +9 −10 activesupport/lib/active_support/callbacks.rb
@@ -1,5 +1,6 @@
require 'active_support/concern'
require 'active_support/descendants_tracker'
+require 'active_support/core_ext/array/extract_options'
require 'active_support/core_ext/class/attribute'
require 'active_support/core_ext/kernel/reporting'
require 'active_support/core_ext/kernel/singleton_class'
@@ -542,14 +543,12 @@ def remove_duplicates(callback)
@callbacks = nil
@chain.delete_if { |c| callback.duplicates?(c) }
end
-
end
module ClassMethods
-
def normalize_callback_params(filters, block) # :nodoc:
type = CALLBACK_FILTER_TYPES.include?(filters.first) ? filters.shift : :before
- options = filters.last.is_a?(Hash) ? filters.pop : {}
+ options = filters.extract_options!
filters.unshift(block) if block
[type, filters, options.dup]
end
@@ -662,7 +661,7 @@ def reset_callbacks(name)
# The current object and the return result of the callback will be called
# with the lambda.
#
- # define_callbacks :validate, terminator: ->(target,result) { result == false },
+ # define_callbacks :validate, terminator: ->(target, result) { result == false }
#
# In this example, if any before validate callbacks returns +false+,
# other callbacks are not executed. Defaults to +false+, meaning no value
@@ -718,17 +717,17 @@ def reset_callbacks(name)
#
# would call <tt>Audit#save</tt>.
def define_callbacks(*names)
- config = names.last.is_a?(Hash) ? names.pop : {}
- if config.key?(:terminator) && String === config[:terminator]
+ options = names.extract_options!
+ if options.key?(:terminator) && String === options[:terminator]
ActiveSupport::Deprecation.warn "String based terminators are deprecated, please use a lambda"
- value = config[:terminator]
- l = class_eval "lambda { |result| #{value} }", __FILE__, __LINE__
- config[:terminator] = lambda { |target, result| target.instance_exec(result, &l) }
+ value = options[:terminator]
+ line = class_eval "lambda { |result| #{value} }", __FILE__, __LINE__
+ options[:terminator] = lambda { |target, result| target.instance_exec(result, &line) }
end
names.each do |name|
class_attribute "_#{name}_callbacks"
- set_callbacks name, CallbackChain.new(name, config)
+ set_callbacks name, CallbackChain.new(name, options)
end
end

0 comments on commit 269b463

Please sign in to comment.