Commit 8a167554 authored by http://jneen.net/'s avatar http://jneen.net/

reduce iterations by keeping a count of remaining enablers

rather than iterating the whole remaining step set with
.all?(&:prevent?)
parent bc648ae5
......@@ -141,13 +141,14 @@ module DeclarativePolicy
end
steps = Set.new(@steps)
remaining_enablers = steps.count { |s| s.enable? }
loop do
return if steps.empty?
# if the permission hasn't yet been enabled and we only have
# prevent steps left, we short-circuit the state here
@state.prevent! if !@state.enabled? && steps.all?(&:prevent?)
@state.prevent! if !@state.enabled? && remaining_enablers == 0
lowest_score = Float::INFINITY
next_step = nil
......@@ -162,6 +163,8 @@ module DeclarativePolicy
steps.delete(next_step)
remaining_enablers -= 1 if next_step.enable?
yield next_step, lowest_score
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment