Sha256: 6b07b88b98c8af121ef4839d4776382c06581bac8188f3c7c5d8da4bce2af698

Contents?: true

Size: 1.1 KB

Versions: 5

Compression:

Stored size: 1.1 KB

Contents

module Spontaneous::Publishing
  class Pipeline
    attr_reader :steps

    def initialize(steps)
      @steps = Array(steps)
      @completed = []
    end

    def run(site, revision, pages, progress)
      calculate_step_count(site, revision, pages, progress)
      run_steps(site, revision, pages, progress)
    end

    def run_steps(site, revision, pages, progress)
      begin
        run_steps!(site, revision, pages, progress)
      rescue Exception => e
        rollback_steps!(site, revision, pages, progress)
        raise
      end
    end

    def run_steps!(site, revision, pages, progress)
      steps.each do |step|
        @completed << step.call(site, revision, pages, progress)
      end
    end

    def rollback_steps!(site, revision, pages, progress)
      @completed.each do |step|
        step.rollback if step && step.respond_to?(:rollback)
      end
    end

    def calculate_step_count(site, revision, pages, progress)
      count = steps.map { |step|
        step.respond_to?(:count) ? step.count(site, revision, pages, progress) : 0
      }.inject(0, :+)
      progress.start(count)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
spontaneous-0.2.0.beta10 lib/spontaneous/publishing/pipeline.rb
spontaneous-0.2.0.beta9 lib/spontaneous/publishing/pipeline.rb
spontaneous-0.2.0.beta8 lib/spontaneous/publishing/pipeline.rb
spontaneous-0.2.0.beta7 lib/spontaneous/publishing/pipeline.rb
spontaneous-0.2.0.beta6 lib/spontaneous/publishing/pipeline.rb