class KubeManifest::Runner

Public Class Methods

load_mixin!(mixin) click to toggle source
# File lib/kube_manifest/runner.rb, line 37
def self.load_mixin!(mixin)
  if mixin.is_a? Module
    return KubeManifest::Spec.include(mixin)
  end

  return unless mixin.is_a?(String)
  return unless File.exists? mixin

  mod = @@MODULE_CACHE[mixin] || Module.new do
    eval(File.open(mixin).read)

    # TODO merge with above
    def method_missing(name, *args, **kwargs, &block)
      klass_name = name.to_s
                       .sub(/^[a-z\d]*/) { |match| match.capitalize }
                       .gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub("/", "::")
      klass = ::KubeManifest::Spec.const_get(klass_name)
      ::KubeManifest::Context.new(klass, **kwargs, &block)
    end
  end

  @@MODULE_CACHE[mixin] = mod

  KubeManifest::Spec.include(mod)
end
new(code, values: {}, cwd: []) click to toggle source
# File lib/kube_manifest/runner.rb, line 4
def initialize(code, values: {}, cwd: [])
  @code, @values, @cwd = code, values, cwd
end
unload_mixin!(mixin) click to toggle source
# File lib/kube_manifest/runner.rb, line 63
def self.unload_mixin!(mixin)
  filename = if Pathname.new(mixin).absolute?
               mixin
             else
               Pathname.new(File.join(Dir.pwd, mixin)).expand_path.to_s
             end

  return unless @@MODULE_CACHE.include? filename
  @@MODULE_CACHE[filename].instance_methods.each do |m|
    KubeManifest::Spec.undef_method(m)
  end
end

Public Instance Methods

_values() click to toggle source
# File lib/kube_manifest/runner.rb, line 25
def _values
  @values
end
ctx() click to toggle source
# File lib/kube_manifest/runner.rb, line 8
def ctx
  result = instance_eval(@code)
  if result.is_a? Array
    result.select{ |c| c }.map do |c|
      c.cwd = @cwd
      c.values = @values
      c
    end
  elsif result.nil?
    nil
  else
    result.cwd = @cwd
    result.values = @values
    result
  end
end
method_missing(name, *args, **kwargs, &block) click to toggle source
# File lib/kube_manifest/runner.rb, line 29
def method_missing(name, *args, **kwargs, &block)
  klass_name = name.to_s
               .sub(/^[a-z\d]*/) { |match| match.capitalize }
               .gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub("/", "::")
  klass = ::KubeManifest::Spec.const_get(klass_name)
  ::KubeManifest::Context.new(klass, **kwargs, &block)
end