Sha256: aaa0e35295a9f53a364ce03ece2436fa67d2e2592dcc91aaec4b29ab74e030a0

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

require 'logify'
require 'kitchen'
require 'kitchen/cli'

module Cocina
  class CLI
    include Logify

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

    def initialize(target)
      super()

      Logify.level = :debug

      @dependencies = []
      @config = Cocina::Config.new('Cocinafile')
      @primary_instance = instance(target)
      @primary_dependencies = primary_instance.dependencies
    end

    def run
      log.info "Running for Target: #{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
      log.info "Converging all dependencies: #{dependencies}"
      dependencies.each {|dep| converge_dependency dep }
    end

    def converge_dependency(dep)
      log.info "Converging: #{dep}"
      instance(dep).converge
    end

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

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cocina-0.1.2 lib/cocina/cli.rb
cocina-0.1.1 lib/cocina/cli.rb