class KubeManifest::Describe
Constants
- SPEC_VAR
Public Class Methods
new(klass)
click to toggle source
# File lib/kube_manifest/describe.rb, line 6 def initialize(klass) @klass = klass end
new_value(obj, klass, *args, **kwargs, &block)
click to toggle source
# File lib/kube_manifest/describe.rb, line 36 def self.new_value(obj, klass, *args, **kwargs, &block) if args.first.is_a? ::KubeManifest::Context returning = args.first.evaluate(overriding: obj._ctx) returning.instance_eval(&block) if block return returning elsif args.first.is_a? Array args = args.first returning = args.map do |arg| if arg.is_a? ::KubeManifest::Context arg.evaluate(overriding: obj._ctx) else arg end end return returning end returning = klass.new(ctx: obj._ctx, values: obj._values) returning.instance_eval(&block) if block kwargs.each_pair do |key, value| field_type = klass.class_variable_get(::KubeManifest::Describe::SPEC_VAR)[key] is_spec = field_type.is_a?(Class) && field_type.ancestors.include?(::KubeManifest::Spec) if is_spec if value.is_a? Hash child = ::KubeManifest::Describe.new_value(obj, field_type, *args, **value, &nil) returning.instance_variable_set("@#{key}", child) elsif value.is_a? Array child = value.map { |e| e.class == ::KubeManifest::Context ? e.evaluate(overriding: obj._ctx) : e } returning.instance_variable_set("@#{key}", child) end else returning.instance_variable_set("@#{key}", value) end end returning end
Public Instance Methods
method_missing(name, *args, &block)
click to toggle source
# File lib/kube_manifest/describe.rb, line 10 def method_missing(name, *args, &block) field_name = name.to_s.gsub(/^_/, '').to_sym field_type = args[0] is_spec = field_type.is_a?(Class) && field_type.ancestors.include?(::KubeManifest::Spec) is_array = args[1] == Array if is_spec && !field_type.class_variable_defined?(::KubeManifest::Describe::SPEC_VAR) field_type.class_variable_set(::KubeManifest::Describe::SPEC_VAR, {}) end unless @klass.instance_methods.include? field_name method = if is_spec && is_array ::KubeManifest::SpecUtils.children_node(field_name, field_type) elsif is_spec && !is_array ::KubeManifest::SpecUtils.child_node(field_name, field_type) elsif !is_spec && is_array ::KubeManifest::SpecUtils.children_value(field_name) else ::KubeManifest::SpecUtils.child_value(field_name) end @klass.define_method(field_name, method) @klass.alias_method name, field_name end @klass.class_variable_get(::KubeManifest::Describe::SPEC_VAR)[field_name] = field_type end