Sha256: 8ae7b4ddba89d43be1edf99e16e69f16ac87cb354ffd8de052b2cb0335c0cb89

Contents?: true

Size: 1.27 KB

Versions: 9

Compression:

Stored size: 1.27 KB

Contents

module Nanoc::Int::Compiler::Phases
  # Provides functionality for (re)calculating the content of an item rep, with caching or
  # outdatedness checking. Delegates to s::Recalculate if outdated or no cache available.
  class Cache < Abstract
    include Nanoc::Int::ContractsSupport

    def initialize(wrapped:, compiled_content_cache:, snapshot_repo:)
      super(wrapped: wrapped)

      @compiled_content_cache = compiled_content_cache
      @snapshot_repo = snapshot_repo
    end

    contract Nanoc::Int::ItemRep, C::KeywordArgs[is_outdated: C::Bool], C::Func[C::None => C::Any] => C::Any
    def run(rep, is_outdated:)
      if can_reuse_content_for_rep?(rep, is_outdated: is_outdated)
        Nanoc::Int::NotificationCenter.post(:cached_content_used, rep)

        @snapshot_repo.set_all(rep, @compiled_content_cache[rep])
      else
        yield
      end

      rep.compiled = true
      @compiled_content_cache[rep] = @snapshot_repo.get_all(rep)
    end

    contract Nanoc::Int::ItemRep, C::KeywordArgs[is_outdated: C::Bool] => C::Bool
    def can_reuse_content_for_rep?(rep, is_outdated:)
      if is_outdated
        false
      else
        cache = @compiled_content_cache[rep]
        cache ? cache.none? { |_snapshot_name, content| content.binary? } : false
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
nanoc-4.7.9 lib/nanoc/base/services/compiler/phases/cache.rb
nanoc-4.7.8 lib/nanoc/base/services/compiler/phases/cache.rb
nanoc-4.7.7 lib/nanoc/base/services/compiler/phases/cache.rb
nanoc-4.7.6 lib/nanoc/base/services/compiler/phases/cache.rb
nanoc-4.7.5 lib/nanoc/base/services/compiler/phases/cache.rb
nanoc-4.7.4 lib/nanoc/base/services/compiler/phases/cache.rb
nanoc-4.7.3 lib/nanoc/base/services/compiler/phases/cache.rb
nanoc-4.7.2 lib/nanoc/base/services/compiler/phases/cache.rb
nanoc-4.7.1 lib/nanoc/base/services/compiler/phases/cache.rb