Sha256: 3da911f171a7fb090b07a715323fe126d07d73e0bcc2f392abcb4b0a7904d228

Contents?: true

Size: 1.93 KB

Versions: 29

Compression:

Stored size: 1.93 KB

Contents

require "librarian/manifest_set"
require "librarian/spec_change_set"
require "librarian/action/base"

module Librarian
  module Action
    class Install < Base

      def run
        check_preconditions

        perform_installation
      end

    private

      def check_preconditions
        check_specfile
        check_lockfile
        check_consistent
      end

      def check_specfile
        raise Error, "#{specfile_name} missing!" unless specfile_path.exist?
      end

      def check_lockfile
        raise Error, "#{lockfile_name} missing!" unless lockfile_path.exist?
      end

      def check_consistent
        raise Error, "#{specfile_name} and #{lockfile_name} are out of sync!" unless spec_consistent_with_lock?
      end

      def perform_installation
        manifests = sorted_manifests

        create_install_path
        install_manifests(manifests)
      end

      def create_install_path
        install_path.rmtree if install_path.exist? && destructive?
        install_path.mkpath
      end

      def install_manifests(manifests)
        manifests.each do |manifest|
          manifest.install!
        end
      end

      def sorted_manifests
        ManifestSet.sort(lock.manifests)
      end

      def destructive?
        environment.config_db.local['destructive'] == 'true'
      end

      def specfile_name
        environment.specfile_name
      end

      def specfile_path
        environment.specfile_path
      end

      def lockfile_name
        environment.lockfile_name
      end

      def lockfile_path
        environment.lockfile_path
      end

      def spec
        environment.spec
      end

      def lock
        environment.lock
      end

      def spec_change_set(spec, lock)
        SpecChangeSet.new(environment, spec, lock)
      end

      def spec_consistent_with_lock?
        spec_change_set(spec, lock).same?
      end

      def install_path
        environment.install_path
      end

    end
  end
end

Version data entries

29 entries across 29 versions & 3 rubygems

Version Path
librarianp-1.1.2 lib/librarian/action/install.rb
librarianp-1.1.1 lib/librarian/action/install.rb
librarianp-1.1.0 lib/librarian/action/install.rb
librarianp-1.0.0 lib/librarian/action/install.rb
librarianp-0.6.4 lib/librarian/action/install.rb
librarianp-0.6.3 lib/librarian/action/install.rb
librarianp-0.6.2 lib/librarian/action/install.rb
librarianp-0.6.1 lib/librarian/action/install.rb
librarianp-0.6.0 lib/librarian/action/install.rb
librarianp-0.5.1 lib/librarian/action/install.rb
librarianp-0.5.0 lib/librarian/action/install.rb
librarianp-0.4.0 lib/librarian/action/install.rb
librarianp-0.3.0 lib/librarian/action/install.rb
librarianp-0.2.0 lib/librarian/action/install.rb
librarian-puppet-0.9.10 vendor/librarian/lib/librarian/action/install.rb
librarian-puppet-0.9.9 vendor/librarian/lib/librarian/action/install.rb
librarian-puppet-0.9.8 vendor/librarian/lib/librarian/action/install.rb
librarian-puppet-maestrodev-0.9.7.5 vendor/librarian/lib/librarian/action/install.rb
librarian-puppet-maestrodev-0.9.7.4 vendor/librarian/lib/librarian/action/install.rb
librarian-puppet-maestrodev-0.9.7.3 vendor/librarian/lib/librarian/action/install.rb