class Nanoc::Core::Compiler

Public Class Methods

compile(site) click to toggle source
# File lib/nanoc/core/compiler.rb, line 25
def self.compile(site)
  new_for(site).run_until_end
end
new(site, compiled_content_cache:, checksum_store:, action_sequence_store:, action_provider:, dependency_store:, outdatedness_store:) click to toggle source
# File lib/nanoc/core/compiler.rb, line 8
def initialize(site, compiled_content_cache:, checksum_store:, action_sequence_store:, action_provider:, dependency_store:, outdatedness_store:)
  @site = site

  # Needed because configuration is mutable :(
  @output_dirs = @site.config.output_dirs

  @compiled_content_cache = compiled_content_cache
  @checksum_store         = checksum_store
  @action_sequence_store  = action_sequence_store
  @dependency_store       = dependency_store
  @action_provider        = action_provider
  @outdatedness_store     = outdatedness_store

  @compiled_content_store = Nanoc::Core::CompiledContentStore.new
end
new_for(site) click to toggle source
# File lib/nanoc/core/compiler.rb, line 30
def self.new_for(site)
  Nanoc::Core::CompilerLoader.new.load(site)
end

Public Instance Methods

compilation_context(reps:) click to toggle source
# File lib/nanoc/core/compiler.rb, line 95
def compilation_context(reps:)
  Nanoc::Core::CompilationContext.new(
    action_provider: @action_provider,
    reps: reps,
    site: @site,
    compiled_content_cache: @compiled_content_cache,
    compiled_content_store: @compiled_content_store,
  )
end
run_until_end() click to toggle source
# File lib/nanoc/core/compiler.rb, line 78
def run_until_end
  res = run_until_precompiled
  action_sequences = res.fetch(:action_sequences)
  reps = res.fetch(:reps)
  checksums = res.fetch(:checksums)
  outdated_items = res.fetch(:outdated_items)

  forget_outdated_dependencies_stage.call(outdated_items)
  store_pre_compilation_state_stage(action_sequences, reps).call(checksums)
  prune_stage(reps).call
  compile_reps_stage(action_sequences, reps).call
  store_post_compilation_state_stage.call
  postprocess_stage.call(self)
ensure
  cleanup_stage.call
end
run_until_precompiled() click to toggle source
# File lib/nanoc/core/compiler.rb, line 54
def run_until_precompiled
  @_res_precompiled ||= begin
    prev = run_until_reps_built
    action_sequences = prev.fetch(:action_sequences)
    reps = prev.fetch(:reps)

    load_stores_stage.call
    checksums = calculate_checksums_stage.call
    outdatedness_checker = create_outdatedness_checker(
      checksums: checksums,
      action_sequences: action_sequences,
      reps: reps,
    )
    outdated_items = determine_outdatedness_stage(outdatedness_checker, reps).call

    prev.merge(
      checksums: checksums,
      dependency_store: @dependency_store,
      outdatedness_checker: outdatedness_checker,
      outdated_items: outdated_items,
    )
  end
end
run_until_preprocessed() click to toggle source
# File lib/nanoc/core/compiler.rb, line 34
def run_until_preprocessed
  @_res_preprocessed ||= begin
    preprocess_stage.call
    {}
  end
end
run_until_reps_built() click to toggle source
# File lib/nanoc/core/compiler.rb, line 41
def run_until_reps_built
  @_res_reps_built ||= begin
    prev = run_until_preprocessed

    res = build_reps_stage.call

    prev.merge(
      reps: res.fetch(:reps),
      action_sequences: res.fetch(:action_sequences),
    )
  end
end

Private Instance Methods

build_reps_stage() click to toggle source
# File lib/nanoc/core/compiler.rb, line 128
def build_reps_stage
  @_build_reps_stage ||= ::Nanoc::Core::CompilationStages::BuildReps.new(
    site: @site,
    action_provider: @action_provider,
  )
end
calculate_checksums_stage() click to toggle source
# File lib/nanoc/core/compiler.rb, line 152
def calculate_checksums_stage
  @_calculate_checksums_stage ||= ::Nanoc::Core::CompilationStages::CalculateChecksums.new(
    items: @site.items,
    layouts: @site.layouts,
    code_snippets: @site.code_snippets,
    config: @site.config,
  )
end
cleanup_stage() click to toggle source
# File lib/nanoc/core/compiler.rb, line 203
def cleanup_stage
  @_cleanup_stage ||= ::Nanoc::Core::CompilationStages::Cleanup.new(@output_dirs)
end
compile_reps_stage(action_sequences, reps) click to toggle source
# File lib/nanoc/core/compiler.rb, line 179
def compile_reps_stage(action_sequences, reps)
  @_compile_reps_stage ||= ::Nanoc::Core::CompilationStages::CompileReps.new(
    reps: reps,
    outdatedness_store: @outdatedness_store,
    dependency_store: @dependency_store,
    action_sequences: action_sequences,
    compilation_context: compilation_context(reps: reps),
    compiled_content_cache: @compiled_content_cache,
  )
end
create_outdatedness_checker(checksums:, action_sequences:, reps:) click to toggle source
# File lib/nanoc/core/compiler.rb, line 107
def create_outdatedness_checker(checksums:, action_sequences:, reps:)
  Nanoc::Core::OutdatednessChecker.new(
    site: @site,
    checksum_store: @checksum_store,
    dependency_store: @dependency_store,
    action_sequence_store: @action_sequence_store,
    action_sequences: action_sequences,
    checksums: checksums,
    reps: reps,
  )
end
determine_outdatedness_stage(outdatedness_checker, reps) click to toggle source
# File lib/nanoc/core/compiler.rb, line 161
def determine_outdatedness_stage(outdatedness_checker, reps)
  @_determine_outdatedness_stage ||= ::Nanoc::Core::CompilationStages::DetermineOutdatedness.new(
    reps: reps,
    outdatedness_checker: outdatedness_checker,
    outdatedness_store: @outdatedness_store,
  )
end
forget_outdated_dependencies_stage() click to toggle source
# File lib/nanoc/core/compiler.rb, line 207
def forget_outdated_dependencies_stage
  @_forget_outdated_dependencies_stage ||= ::Nanoc::Core::CompilationStages::ForgetOutdatedDependencies.new(
    dependency_store: @dependency_store,
  )
end
load_stores_stage() click to toggle source
# File lib/nanoc/core/compiler.rb, line 142
def load_stores_stage
  @_load_stores_stage ||= ::Nanoc::Core::CompilationStages::LoadStores.new(
    checksum_store: @checksum_store,
    compiled_content_cache: @compiled_content_cache,
    dependency_store: @dependency_store,
    action_sequence_store: @action_sequence_store,
    outdatedness_store: @outdatedness_store,
  )
end
postprocess_stage() click to toggle source
# File lib/nanoc/core/compiler.rb, line 196
def postprocess_stage
  @_postprocess_stage ||= ::Nanoc::Core::CompilationStages::Postprocess.new(
    action_provider: @action_provider,
    site: @site,
  )
end
preprocess_stage() click to toggle source
# File lib/nanoc/core/compiler.rb, line 119
def preprocess_stage
  @_preprocess_stage ||= ::Nanoc::Core::CompilationStages::Preprocess.new(
    action_provider: @action_provider,
    site: @site,
    dependency_store: @dependency_store,
    checksum_store: @checksum_store,
  )
end
prune_stage(reps) click to toggle source
# File lib/nanoc/core/compiler.rb, line 135
def prune_stage(reps)
  @_prune_stage ||= ::Nanoc::Core::CompilationStages::Prune.new(
    config: @site.config,
    reps: reps,
  )
end
store_post_compilation_state_stage() click to toggle source
# File lib/nanoc/core/compiler.rb, line 190
def store_post_compilation_state_stage
  @_store_post_compilation_state_stage ||= ::Nanoc::Core::CompilationStages::StorePostCompilationState.new(
    dependency_store: @dependency_store,
  )
end
store_pre_compilation_state_stage(action_sequences, reps) click to toggle source
# File lib/nanoc/core/compiler.rb, line 169
def store_pre_compilation_state_stage(action_sequences, reps)
  @_store_pre_compilation_state_stage ||= ::Nanoc::Core::CompilationStages::StorePreCompilationState.new(
    reps: reps,
    layouts: @site.layouts,
    checksum_store: @checksum_store,
    action_sequence_store: @action_sequence_store,
    action_sequences: action_sequences,
  )
end