Sha256: b51573998a8455863cb30f0a8260d83bf572199cab54dbdf43bb2055b5964b1a

Contents?: true

Size: 1.17 KB

Versions: 28

Compression:

Stored size: 1.17 KB

Contents

# typed: false
require 'set'

module Kuby
  module Kubernetes
    class Manifest
      include Enumerable

      def initialize(resources)
        @resources = resources

        ensure_all_resources_unique!
      end

      def each(&block)
        @resources.each(&block)
      end

      def find(kind, name)
        @resources.find do |resource|
          matches?(resource, kind, name)
        end
      end

      def delete(kind, name)
        idx = @resources.index do |resource|
          matches?(resource, kind, name)
        end

        resources.delete(idx) if idx
      end

      def <<(resource)
        @resources << resource
      end

      private

      def matches?(resource, kind, name)
        resource.kind_sym == kind && resource.metadata.name == name
      end

      def ensure_all_resources_unique!
        seen = Set.new

        @resources.each do |resource|
          key = "#{resource.kind_sym}-#{resource.metadata.name}"

          if seen.include?(key)
            raise DuplicateResourceError, "found more than one #{resource.kind.downcase} "\
              "resource named '#{resource.metadata.name}'"
          end
        end
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
kuby-core-0.20.2 lib/kuby/kubernetes/manifest.rb
kuby-core-0.20.1 lib/kuby/kubernetes/manifest.rb
kuby-core-0.20.0 lib/kuby/kubernetes/manifest.rb
kuby-core-0.19.0 lib/kuby/kubernetes/manifest.rb
kuby-core-0.18.0 lib/kuby/kubernetes/manifest.rb
kuby-core-0.17.0 lib/kuby/kubernetes/manifest.rb
kuby-core-0.16.1 lib/kuby/kubernetes/manifest.rb
kuby-core-0.16.0 lib/kuby/kubernetes/manifest.rb
kuby-core-0.15.0 lib/kuby/kubernetes/manifest.rb
kuby-core-0.14.0 lib/kuby/kubernetes/manifest.rb
kuby-core-0.13.0 lib/kuby/kubernetes/manifest.rb
kuby-core-0.12.0 lib/kuby/kubernetes/manifest.rb
kuby-core-0.11.16 lib/kuby/kubernetes/manifest.rb
kuby-core-0.11.15 lib/kuby/kubernetes/manifest.rb
kuby-core-0.11.14 lib/kuby/kubernetes/manifest.rb
kuby-core-0.11.13 lib/kuby/kubernetes/manifest.rb
kuby-core-0.11.12 lib/kuby/kubernetes/manifest.rb
kuby-core-0.11.11 lib/kuby/kubernetes/manifest.rb
kuby-core-0.11.10 lib/kuby/kubernetes/manifest.rb
kuby-core-0.11.9 lib/kuby/kubernetes/manifest.rb