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