Sha256: 42e2911edf712cf8f3d5289b0635a3850e80a3cfffb1c17df0c2e684c3f21166

Contents?: true

Size: 1.73 KB

Versions: 17

Compression:

Stored size: 1.73 KB

Contents

require 'ostruct'
class KuberKit::Core::ContextHelper::ContextVars
  attr_reader :parent, :parent_name

  BuildArgUndefined = Class.new(KuberKit::Error)

  def initialize(context_vars, parent_name = nil)
    @context_vars = context_vars
    @parent_name  = parent_name
  end

  def read(*variable_names, default: nil)
    dig(*variable_names)
  rescue BuildArgUndefined
    return default
  end

  def dig(*variable_names)
    result = self
    variable_names.each do |var|
      result = result.get_variable_value(var)
    end
    result
  end

  def variable_defined?(*variable_names)
    dig(*variable_names)
    return true
  rescue BuildArgUndefined
    return false
  end

  def method_missing(name, *args)
    if args.size > 0
      raise ArgumentError.new("context args does not accept any arguments")
    end

    dig(name)
  end

  def keys
    @context_vars.keys
  end

  def to_h
    values = keys.map do |key|
      value = get_variable_value(key)
      hash_value = value.respond_to?(:to_h) ? value.to_h : value
      [key, hash_value]
    end
    Hash[values]
  end

  def to_struct
    values = keys.map do |key|
      value = get_variable_value(key)
      hash_value = value.respond_to?(:to_struct) ? value.to_struct : value
      [key, hash_value]
    end
    hash = Hash[values]
    OpenStruct.new(hash)
  end

  def get_variable_value(variable_name)
    value = @context_vars.fetch(variable_name) do
      raise(BuildArgUndefined, "build arg '#{format_arg(variable_name)}' is not defined, available args: #{@context_vars.inspect}")
    end

    if value.is_a?(Hash)
      return self.class.new(value, format_arg(variable_name))
    end

    value
  end

  private
    

    def format_arg(name)
      [@parent_name, name].compact.join(".")
    end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
kuber_kit-1.3.9 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.3.8 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.3.7 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.1.8 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.3.6 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.1.7 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.3.5 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.3.4 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.1.6 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.3.3 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.3.2 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.1.5 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.3.1 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.3.0 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.2.7 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.2.6 lib/kuber_kit/core/context_helper/context_vars.rb
kuber_kit-1.2.5 lib/kuber_kit/core/context_helper/context_vars.rb