Sha256: b6bbe8ff2de6d1b615dec2c04b273bf7cd1c0131e2410fdac4976294b64d6031

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

require 'kitchen'
require 'kitchen/cli'

module Cocina
  class CLI

    attr_reader :config, :instances, :collection, :dependencies
    attr_reader :primary_instance, :primary_dependencies, :logger

    def initialize(target)
      super()

      @dependencies = []
      @config = Cocina::Config.new('Cocinafile')
      @logger = Kitchen::Logger.new(
        stdout: STDOUT,
        color: :white,
        progname: 'Cocina'
      )
      @primary_instance = instance(target)
      @primary_dependencies = primary_instance.dependencies
    end

    def run
      log_banner "Running for: #{primary_instance.name}"

      prepare_dependencies
      converge_dependencies

      primary_instance.verify
      cleanup
    end

    def instance(id)
      @config[id]
    end

    def prepare_dependencies
      primary_dependencies.each do |dep|
        @dependencies.concat instance(dep).dependencies
        @dependencies << dep
      end
    end

    def converge_dependencies
      logger.info "Dependencies: #{dependencies}"
      dependencies.each {|dep| converge_dependency dep }
    end

    def converge_dependency(dep)
      log_banner "Converging <#{dep}>"
      instance(dep).converge
    end

    def cleanup
      log_banner "Cleaning up all dependencies"
      destroy_dependencies
      primary_instance.destroy
      nil
    end

    def destroy_dependencies
      dependencies.each do |dep|
        logger.info "Destroying #{dep}"
        instance(dep).destroy
      end
    end

    def log_banner(msg)
      logger.banner "#{msg}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cocina-0.1.3 lib/cocina/cli.rb