Sha256: dbe46a0c1cddf75d3f56daad0d7ca9a6cfdc22b251678a3403d91f5578b152d3

Contents?: true

Size: 1.13 KB

Versions: 2

Compression:

Stored size: 1.13 KB

Contents

module Munge
  class Runner
    def initialize(items:, router:, alterant:, writer:, formatter:, verbosity:, destination:)
      @items         = items
      @router        = router
      @alterant      = alterant
      @writer        = writer
      @reporter      = Munge::Reporter.new(formatter: formatter, verbosity: verbosity)
      @write_manager = Munge::WriteManager.new(driver: File)
      @destination   = destination
    end

    def write
      @reporter.start

      @items
        .reject { |item| item.route.nil? }
        .each   { |item| render_and_write(item) }

      @reporter.done
    end

    private

    def render_and_write(item)
      relpath = @router.filepath(item)
      abspath = File.join(@destination, relpath)
      content = @alterant.transform(item)

      write_status = @write_manager.status(abspath, content)

      case write_status
      when :new, :changed
        @writer.write(abspath, content)
      when :double_write_error
        raise "attempted to write #{item.route} twice"
      when :identical
        # Defer to the reporter
      end

      @reporter.call(item, relpath, write_status)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
munge-0.11.1 lib/munge/runner.rb
munge-0.11.0 lib/munge/runner.rb