class Nanoc::Core::CompilationStages::CompileReps

Public Class Methods

new(reps:, outdatedness_store:, dependency_store:, action_sequences:, compilation_context:, compiled_content_cache:) click to toggle source
# File lib/nanoc/core/compilation_stages/compile_reps.rb, line 10
def initialize(reps:, outdatedness_store:, dependency_store:, action_sequences:, compilation_context:, compiled_content_cache:)
  @reps = reps
  @outdatedness_store = outdatedness_store
  @dependency_store = dependency_store
  @action_sequences = action_sequences
  @compilation_context = compilation_context
  @compiled_content_cache = compiled_content_cache
end

Public Instance Methods

run() click to toggle source
# File lib/nanoc/core/compilation_stages/compile_reps.rb, line 19
def run
  outdated_reps = @reps.select { |r| @outdatedness_store.include?(r) }
  selector = Nanoc::Core::ItemRepSelector.new(outdated_reps)
  run_phase_stack do |phase_stack|
    selector.each do |rep|
      handle_errors_while(rep) do
        compile_rep(rep, phase_stack: phase_stack, is_outdated: @outdatedness_store.include?(rep))
      end
    end
  end

  assert Nanoc::Core::Assertions::AllItemRepsHaveCompiledContent.new(
    compiled_content_cache: @compiled_content_cache,
    item_reps: @reps,
  )
ensure
  @outdatedness_store.store
  @compiled_content_cache.prune(items: @reps.map(&:item).uniq)
  @compiled_content_cache.store
end

Private Instance Methods

build_phase_stack() click to toggle source
# File lib/nanoc/core/compilation_stages/compile_reps.rb, line 60
def build_phase_stack
  recalculate_phase = Nanoc::Core::CompilationPhases::Recalculate.new(
    action_sequences: @action_sequences,
    dependency_store: @dependency_store,
    compilation_context: @compilation_context,
  )

  cache_phase = Nanoc::Core::CompilationPhases::Cache.new(
    compiled_content_cache: @compiled_content_cache,
    compiled_content_store: @compilation_context.compiled_content_store,
    wrapped: recalculate_phase,
  )

  resume_phase = Nanoc::Core::CompilationPhases::Resume.new(
    wrapped: cache_phase,
  )

  write_phase = Nanoc::Core::CompilationPhases::Write.new(
    compiled_content_store: @compilation_context.compiled_content_store,
    wrapped: resume_phase,
  )

  mark_done_phase = Nanoc::Core::CompilationPhases::MarkDone.new(
    wrapped: write_phase,
    outdatedness_store: @outdatedness_store,
  )

  notify_phrase = Nanoc::Core::CompilationPhases::Notify.new(
    wrapped: mark_done_phase,
  )

  notify_phrase
end
compile_rep(rep, phase_stack:, is_outdated:) click to toggle source
# File lib/nanoc/core/compilation_stages/compile_reps.rb, line 48
def compile_rep(rep, phase_stack:, is_outdated:)
  phase_stack.call(rep, is_outdated: is_outdated)
end
handle_errors_while(item_rep) { || ... } click to toggle source
# File lib/nanoc/core/compilation_stages/compile_reps.rb, line 42
def handle_errors_while(item_rep)
  yield
rescue Exception => e # rubocop:disable Lint/RescueException
  raise Nanoc::Core::Errors::CompilationError.new(e, item_rep)
end
run_phase_stack() { |phase_stack| ... } click to toggle source
# File lib/nanoc/core/compilation_stages/compile_reps.rb, line 52
def run_phase_stack
  phase_stack = build_phase_stack
  phase_stack.start
  yield(phase_stack)
ensure
  phase_stack.stop
end