class KubeManifest::Spec

Attributes

_ctx[RW]
_values[RW]

Public Class Methods

new(ctx: nil, values: {}) click to toggle source
# File lib/kube_manifest/spec.rb, line 106
def initialize(ctx: nil, values: {})
  @_ctx = ctx
  @_values = values
end

Private Class Methods

as_hash(obj, stringify_keys) click to toggle source
# File lib/kube_manifest/spec.rb, line 126
def self.as_hash(obj, stringify_keys)
  result = {}
  if obj.kind_of? ::KubeManifest::Spec
    keys = obj.class.class_variable_get(::KubeManifest::Describe::SPEC_VAR).keys
  elsif obj.kind_of? Hash
    keys = obj.keys
  else
    return obj
  end
  keys.each do |key|
    value = if obj.kind_of? ::KubeManifest::Spec
              obj.instance_variable_get("@#{key}") || obj.send(key) rescue nil
            elsif obj.kind_of? Hash
              obj[key]
            end
    next unless value

    if value.is_a?(Array)
      value = value.reject { |v| v.respond_to?(:empty?) && v.empty? || v.nil? }
    end
    if value.respond_to?(:empty?) && value.empty?
      next unless key == :emptyDir && obj.is_a?(::KubeManifest::Spec::Volume) # Preserve emptyDir: {}
    end

    k = stringify_keys ? key.to_s : key

    if value.kind_of? Hash
      result[k] = as_hash(value, stringify_keys)
    elsif value.kind_of? ::KubeManifest::Spec
      result[k] = as_hash(value, stringify_keys)
    elsif value.is_a? Array
      result[k] = value.map{|v| as_hash(v, stringify_keys) }
    else
      result[k] = value
    end
  end

  result
end

Public Instance Methods

as_hash(stringify_keys=false) click to toggle source
# File lib/kube_manifest/spec.rb, line 111
def as_hash(stringify_keys=false)
  self.class.as_hash(self, stringify_keys)
end
as_yaml() click to toggle source
# File lib/kube_manifest/spec.rb, line 115
def as_yaml
  self.as_hash(true).to_yaml(line_width: -1)
end
empty?() click to toggle source
# File lib/kube_manifest/spec.rb, line 119
def empty?
  specs = self.class.class_variable_get(::KubeManifest::Describe::SPEC_VAR).keys
  (self.instance_variables.map{|s|s.to_s.sub(/^@/, '')} & specs.map{|s|s.to_s}).empty?
end