Skip to content

Commit

Permalink
Remove methods that are never invoked
Browse files Browse the repository at this point in the history
Fixes rails#21122 - does not change any current behavior; simply reflects
the fact that two conditions of the if/else statement are never reached.

The reason is rails#17227 which adds a default terminator to AS::Callbacks.

Therefore, even callback chains that do not define a terminator now
have a terminator, and `chain_config.key?(:terminator)` is always true.

Of course, if no terminator was defined, then we want this new default
terminator not to do anything special. What the terminator actually does
(or should do) is discussed in rails#21218 but the simple fact that a default
terminator exists makes this current PR valid.
  • Loading branch information
claudiob committed Sep 13, 2015
1 parent fecf9d7 commit 70c6f2a
Showing 1 changed file with 6 additions and 91 deletions.
97 changes: 6 additions & 91 deletions activesupport/lib/active_support/callbacks.rb
Expand Up @@ -126,14 +126,10 @@ class Before
def self.build(callback_sequence, user_callback, user_conditions, chain_config, filter)
halted_lambda = chain_config[:terminator]

if chain_config.key?(:terminator) && user_conditions.any?
if user_conditions.any?
halting_and_conditional(callback_sequence, user_callback, user_conditions, halted_lambda, filter)
elsif chain_config.key? :terminator
halting(callback_sequence, user_callback, halted_lambda, filter)
elsif user_conditions.any?
conditional(callback_sequence, user_callback, user_conditions)
else
simple callback_sequence, user_callback
halting(callback_sequence, user_callback, halted_lambda, filter)
end
end

Expand Down Expand Up @@ -175,42 +171,15 @@ def self.halting(callback_sequence, user_callback, halted_lambda, filter)
end
end
private_class_method :halting

def self.conditional(callback_sequence, user_callback, user_conditions)
callback_sequence.before do |env|
target = env.target
value = env.value

if user_conditions.all? { |c| c.call(target, value) }
user_callback.call target, value
end

env
end
end
private_class_method :conditional

def self.simple(callback_sequence, user_callback)
callback_sequence.before do |env|
user_callback.call env.target, env.value

env
end
end
private_class_method :simple
end

class After
def self.build(callback_sequence, user_callback, user_conditions, chain_config)
if chain_config[:skip_after_callbacks_if_terminated]
if chain_config.key?(:terminator) && user_conditions.any?
if user_conditions.any?
halting_and_conditional(callback_sequence, user_callback, user_conditions)
elsif chain_config.key?(:terminator)
halting(callback_sequence, user_callback)
elsif user_conditions.any?
conditional callback_sequence, user_callback, user_conditions
else
simple callback_sequence, user_callback
halting(callback_sequence, user_callback)
end
else
if user_conditions.any?
Expand Down Expand Up @@ -246,41 +215,14 @@ def self.halting(callback_sequence, user_callback)
end
end
private_class_method :halting

def self.conditional(callback_sequence, user_callback, user_conditions)
callback_sequence.after do |env|
target = env.target
value = env.value

if user_conditions.all? { |c| c.call(target, value) }
user_callback.call target, value
end

env
end
end
private_class_method :conditional

def self.simple(callback_sequence, user_callback)
callback_sequence.after do |env|
user_callback.call env.target, env.value

env
end
end
private_class_method :simple
end

class Around
def self.build(callback_sequence, user_callback, user_conditions, chain_config)
if chain_config.key?(:terminator) && user_conditions.any?
if user_conditions.any?
halting_and_conditional(callback_sequence, user_callback, user_conditions)
elsif chain_config.key? :terminator
halting(callback_sequence, user_callback)
elsif user_conditions.any?
conditional(callback_sequence, user_callback, user_conditions)
else
simple(callback_sequence, user_callback)
halting(callback_sequence, user_callback)
end
end

Expand Down Expand Up @@ -318,33 +260,6 @@ def self.halting(callback_sequence, user_callback)
end
end
private_class_method :halting

def self.conditional(callback_sequence, user_callback, user_conditions)
callback_sequence.around do |env, &run|
target = env.target
value = env.value

if user_conditions.all? { |c| c.call(target, value) }
user_callback.call(target, value) {
run.call.value
}
env
else
run.call
end
end
end
private_class_method :conditional

def self.simple(callback_sequence, user_callback)
callback_sequence.around do |env, &run|
user_callback.call(env.target, env.value) {
run.call.value
}
env
end
end
private_class_method :simple
end
end

Expand Down

0 comments on commit 70c6f2a

Please sign in to comment.