lib/nanoc/base/services/compiler.rb in nanoc-4.11.0 vs lib/nanoc/base/services/compiler.rb in nanoc-4.11.1

- old
+ new

@@ -1,207 +1,214 @@ # frozen_string_literal: true -module Nanoc::Int - class Compiler - include Nanoc::Int::ContractsSupport +module Nanoc + module Int + class Compiler + include Nanoc::Core::ContractsSupport - def initialize(site, compiled_content_cache:, checksum_store:, action_sequence_store:, action_provider:, dependency_store:, outdatedness_store:) - @site = site + 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 + # 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_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 - @snapshot_repo = Nanoc::Int::SnapshotRepo.new - end + @compiled_content_store = Nanoc::Int::CompiledContentStore.new + end - contract Nanoc::Int::Site => Nanoc::Int::Compiler - def self.new_for(site) - Nanoc::Int::CompilerLoader.new.load(site) - end + contract Nanoc::Int::Site => C::Any + def self.compile(site) + new_for(site).run_until_end + end - def run_until_preprocessed - @_res_preprocessed ||= begin - preprocess_stage.call - {} + contract Nanoc::Int::Site => Nanoc::Int::Compiler + def self.new_for(site) + Nanoc::Int::CompilerLoader.new.load(site) end - end - def run_until_reps_built - @_res_reps_built ||= begin - prev = run_until_preprocessed + def run_until_preprocessed + @_res_preprocessed ||= begin + preprocess_stage.call + {} + end + end - res = build_reps_stage.call + def run_until_reps_built + @_res_reps_built ||= begin + prev = run_until_preprocessed - prev.merge( - reps: res.fetch(:reps), - action_sequences: res.fetch(:action_sequences), + res = build_reps_stage.call + + prev.merge( + reps: res.fetch(:reps), + action_sequences: res.fetch(:action_sequences), + ) + end + end + + 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 + + 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 + + def compilation_context(reps:) + Nanoc::Int::CompilationContext.new( + action_provider: @action_provider, + reps: reps, + site: @site, + compiled_content_cache: @compiled_content_cache, + compiled_content_store: @compiled_content_store, ) end - end - def run_until_precompiled - @_res_precompiled ||= begin - prev = run_until_reps_built - action_sequences = prev.fetch(:action_sequences) - reps = prev.fetch(:reps) + private - load_stores_stage.call - checksums = calculate_checksums_stage.call - outdatedness_checker = create_outdatedness_checker( - checksums: checksums, + def create_outdatedness_checker(checksums:, action_sequences:, reps:) + Nanoc::Int::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, ) - outdated_items = determine_outdatedness_stage(outdatedness_checker, reps).call + end - prev.merge( - checksums: checksums, + def preprocess_stage + @_preprocess_stage ||= Stages::Preprocess.new( + action_provider: @action_provider, + site: @site, dependency_store: @dependency_store, - outdatedness_checker: outdatedness_checker, - outdated_items: outdated_items, + checksum_store: @checksum_store, ) end - end - 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) + def build_reps_stage + @_build_reps_stage ||= Stages::BuildReps.new( + site: @site, + action_provider: @action_provider, + ) + end - 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 + def prune_stage(reps) + @_prune_stage ||= Stages::Prune.new( + config: @site.config, + reps: reps, + ) + end - def compilation_context(reps:) - Nanoc::Int::CompilationContext.new( - action_provider: @action_provider, - reps: reps, - site: @site, - compiled_content_cache: @compiled_content_cache, - snapshot_repo: @snapshot_repo, - ) - end + def load_stores_stage + @_load_stores_stage ||= Stages::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 - private + def calculate_checksums_stage + @_calculate_checksums_stage ||= Stages::CalculateChecksums.new( + items: @site.items, + layouts: @site.layouts, + code_snippets: @site.code_snippets, + config: @site.config, + ) + end - def create_outdatedness_checker(checksums:, action_sequences:, reps:) - Nanoc::Int::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 + def determine_outdatedness_stage(outdatedness_checker, reps) + @_determine_outdatedness_stage ||= Stages::DetermineOutdatedness.new( + reps: reps, + outdatedness_checker: outdatedness_checker, + outdatedness_store: @outdatedness_store, + ) + end - def preprocess_stage - @_preprocess_stage ||= Stages::Preprocess.new( - action_provider: @action_provider, - site: @site, - dependency_store: @dependency_store, - checksum_store: @checksum_store, - ) - end + def store_pre_compilation_state_stage(action_sequences, reps) + @_store_pre_compilation_state_stage ||= Stages::StorePreCompilationState.new( + reps: reps, + layouts: @site.layouts, + checksum_store: @checksum_store, + action_sequence_store: @action_sequence_store, + action_sequences: action_sequences, + ) + end - def build_reps_stage - @_build_reps_stage ||= Stages::BuildReps.new( - site: @site, - action_provider: @action_provider, - ) - end + def compile_reps_stage(action_sequences, reps) + @_compile_reps_stage ||= Stages::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 - def prune_stage(reps) - @_prune_stage ||= Stages::Prune.new( - config: @site.config, - reps: reps, - ) - end + def store_post_compilation_state_stage + @_store_post_compilation_state_stage ||= Stages::StorePostCompilationState.new( + dependency_store: @dependency_store, + ) + end - def load_stores_stage - @_load_stores_stage ||= Stages::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 + def postprocess_stage + @_postprocess_stage ||= Stages::Postprocess.new( + action_provider: @action_provider, + site: @site, + ) + end - def calculate_checksums_stage - @_calculate_checksums_stage ||= Stages::CalculateChecksums.new( - items: @site.items, - layouts: @site.layouts, - code_snippets: @site.code_snippets, - config: @site.config, - ) - end + def cleanup_stage + @_cleanup_stage ||= Stages::Cleanup.new(@output_dirs) + end - def determine_outdatedness_stage(outdatedness_checker, reps) - @_determine_outdatedness_stage ||= Stages::DetermineOutdatedness.new( - reps: reps, - outdatedness_checker: outdatedness_checker, - outdatedness_store: @outdatedness_store, - ) - end - - def store_pre_compilation_state_stage(action_sequences, reps) - @_store_pre_compilation_state_stage ||= Stages::StorePreCompilationState.new( - reps: reps, - layouts: @site.layouts, - checksum_store: @checksum_store, - action_sequence_store: @action_sequence_store, - action_sequences: action_sequences, - ) - end - - def compile_reps_stage(action_sequences, reps) - @_compile_reps_stage ||= Stages::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 - - def store_post_compilation_state_stage - @_store_post_compilation_state_stage ||= Stages::StorePostCompilationState.new( - dependency_store: @dependency_store, - ) - end - - def postprocess_stage - @_postprocess_stage ||= Stages::Postprocess.new( - action_provider: @action_provider, - site: @site, - ) - end - - def cleanup_stage - @_cleanup_stage ||= Stages::Cleanup.new(@output_dirs) - end - - def forget_outdated_dependencies_stage - @_forget_outdated_dependencies_stage ||= Stages::ForgetOutdatedDependencies.new( - dependency_store: @dependency_store, - ) + def forget_outdated_dependencies_stage + @_forget_outdated_dependencies_stage ||= Stages::ForgetOutdatedDependencies.new( + dependency_store: @dependency_store, + ) + end end end end