lib/nanoc/base/compilation/dependency_tracker.rb in nanoc-4.1.6 vs lib/nanoc/base/compilation/dependency_tracker.rb in nanoc-4.2.0b1

- old
+ new

@@ -1,48 +1,38 @@ module Nanoc::Int # @api private class DependencyTracker + class Null + def enter(_obj) + end + + def exit(_obj) + end + + def bounce(_obj) + end + end + def initialize(dependency_store) @dependency_store = dependency_store + @stack = [] end - # Record dependencies for the duration of the block. - # - # @return [void] - def run - unless block_given? - raise ArgumentError, 'No block given' + def enter(obj) + unless @stack.empty? + Nanoc::Int::NotificationCenter.post(:dependency_created, @stack.last, obj) + @dependency_store.record_dependency(@stack.last, obj) end - stack = [] - start_tracking(stack) - yield - ensure - stop_tracking(stack) + @stack.push(obj) end - # @api private - def start_tracking(stack) - Nanoc::Int::NotificationCenter.on(:visit_started, self) do |obj| - unless stack.empty? - Nanoc::Int::NotificationCenter.post(:dependency_created, stack.last, obj) - @dependency_store.record_dependency(stack.last, obj) - end - stack.push(obj) - end - - Nanoc::Int::NotificationCenter.on(:visit_ended, self) do |_obj| - stack.pop - end + def exit(_obj) + @stack.pop end - # @api private - def stop_tracking(stack) - unless stack.empty? - raise 'Internal inconsistency: dependency tracker stack not empty at end of compilation' - end - - Nanoc::Int::NotificationCenter.remove(:visit_started, self) - Nanoc::Int::NotificationCenter.remove(:visit_ended, self) + def bounce(obj) + enter(obj) + exit(obj) end end end