Sha256: a758c6d6a13a1d3fab4925caad329a5db8c956a9236645c369f71cf6fb1f0b8d

Contents?: true

Size: 1.31 KB

Versions: 5

Compression:

Stored size: 1.31 KB

Contents

module Kuby
  module Docker
    class PackagePhase < Layer
      attr_reader :operations

      def initialize(*args)
        super

        @operations = []
      end

      def add(package_name, version = nil)
        operations << [:add, package_name, version]
      end

      def remove(package_name)
        operations << [:remove, package_name]
      end

      def apply_to(dockerfile)
        packages = distro_spec.default_packages.dup

        operations.each do |operator, package_name, version|
          if operator == :add
            packages << [package_name, version]
          else
            packages.reject! do |pkg_name_to_del, *|
              pkg_name_to_del == package_name
            end
          end
        end

        packages.map! do |package_name, version|
          get_package(package_name, version)
        end

        distro_spec.install(packages, into: dockerfile)
      end

      private

      def distro_spec
        definition.docker.distro_spec
      end

      def get_package(package_name, version)
        if package = Kuby.packages[package_name]
          package.with_version(version)
        else
          raise MissingPackageError, "package '#{package_name}' hasn't been registered"
        end
      end

      def metadata
        definition.docker.metadata
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
kuby-core-0.7.2 lib/kuby/docker/package_phase.rb
kuby-core-0.7.1 lib/kuby/docker/package_phase.rb
kuby-core-0.7.0 lib/kuby/docker/package_phase.rb
kuby-core-0.6.1 lib/kuby/docker/package_phase.rb
kuby-core-0.6.0 lib/kuby/docker/package_phase.rb