Sha256: 30f28342cb3d02b5e9d6f929570048d1e0d6e0ce119fa989c5b7ca4d317e3fcc

Contents?: true

Size: 1.19 KB

Versions: 11

Compression:

Stored size: 1.19 KB

Contents

module Nanoc::Int
  # @api private
  class DependencyTracker
    def initialize(dependency_store)
      @dependency_store = dependency_store
    end

    # Record dependencies for the duration of the block.
    #
    # @return [void]
    def run
      unless block_given?
        raise ArgumentError, 'No block given'
      end

      stack = []
      start_tracking(stack)
      yield
    ensure
      stop_tracking(stack)
    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
    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)
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
nanoc-4.1.6 lib/nanoc/base/compilation/dependency_tracker.rb
nanoc-4.1.5 lib/nanoc/base/compilation/dependency_tracker.rb
nanoc-4.1.4 lib/nanoc/base/compilation/dependency_tracker.rb
nanoc-4.1.3 lib/nanoc/base/compilation/dependency_tracker.rb
nanoc-4.1.2 lib/nanoc/base/compilation/dependency_tracker.rb
nanoc-4.1.1 lib/nanoc/base/compilation/dependency_tracker.rb
nanoc-4.1.0 lib/nanoc/base/compilation/dependency_tracker.rb
nanoc-4.1.0rc2 lib/nanoc/base/compilation/dependency_tracker.rb
nanoc-4.1.0rc1 lib/nanoc/base/compilation/dependency_tracker.rb
nanoc-4.1.0b1 lib/nanoc/base/compilation/dependency_tracker.rb
nanoc-4.1.0a1 lib/nanoc/base/compilation/dependency_tracker.rb