class Kafo::Param

Constants

UNSET_VALUES

Attributes

condition[RW]
doc[RW]
groups[W]
manifest_default[R]
module[R]
name[R]
type[R]
value_set[RW]

Public Class Methods

new(builder, name, type) click to toggle source
# File lib/kafo/param.rb, line 13
def initialize(builder, name, type)
  @name   = name
  @module = builder
  @type   = DataType.new_from_string(type)
  @default = nil
  @value_set = false
  @groups = nil
  @validation_errors = []
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/kafo/param.rb, line 126
def <=>(other)
  unless @module.configuration.app[:no_prefix]
    r = self.module_name <=> other.module_name
    return r unless r == 0
  end
  self.name <=> other.name
end
condition_value() click to toggle source
# File lib/kafo/param.rb, line 138
def condition_value
  @type.condition_value(value)
end
default() click to toggle source

For literal default values, only use 'manifest_default'. For variable or values from a data lookup, use the value loaded back from the dump in 'default'.

# File lib/kafo/param.rb, line 49
def default
  @type.typecast(dump_default_needed? || !@default.nil? ? @default : manifest_default)
end
default=(default) click to toggle source
# File lib/kafo/param.rb, line 53
def default=(default)
  default = nil if UNSET_VALUES.include?(default)
  @default = default
end
default_to_s() click to toggle source
# File lib/kafo/param.rb, line 85
def default_to_s
  internal_value_to_s(default)
end
dump_default() click to toggle source
# File lib/kafo/param.rb, line 64
def dump_default
  @type.dump_default(manifest_default_params_variable)
end
dump_default_needed?() click to toggle source

manifest_default may be a variable ($foo::params::bar) and need dumping from Puppet to get the actual default value

# File lib/kafo/param.rb, line 60
def dump_default_needed?
  manifest_default.to_s.start_with?('$')
end
groups() click to toggle source
# File lib/kafo/param.rb, line 27
def groups
  @groups || []
end
identifier() click to toggle source
# File lib/kafo/param.rb, line 23
def identifier
  @module ? "#{@module.identifier}::#{name}" : name
end
manifest_default=(default) click to toggle source
# File lib/kafo/param.rb, line 68
def manifest_default=(default)
  default = nil if UNSET_VALUES.include?(default)
  @manifest_default = default
end
manifest_default_params_variable() click to toggle source
# File lib/kafo/param.rb, line 73
def manifest_default_params_variable
  manifest_default[1..-1] if dump_default_needed?
end
module_name() click to toggle source
# File lib/kafo/param.rb, line 77
def module_name
  self.module.name
end
multivalued?() click to toggle source
# File lib/kafo/param.rb, line 122
def multivalued?
  @type.multivalued?
end
set_default_from_dump(defaults) click to toggle source
# File lib/kafo/param.rb, line 93
def set_default_from_dump(defaults)
  # if we don't have default value from dump (can happen for modules added from hooks,
  # or without using a params class), the existing default value from the manifest will
  # be used. On calling #value, the default will be returned if no overriding value is set.
  if dump_default_needed? && defaults.has_key?(manifest_default_params_variable)
    self.default = defaults[manifest_default_params_variable]
  elsif defaults.has_key?(identifier)
    self.default = defaults[identifier]
  end
end
set_value_by_config(config) click to toggle source
# File lib/kafo/param.rb, line 104
def set_value_by_config(config)
  base       = config[self.module.class_name]
  self.value = base[name] if base.has_key?(name)
end
to_s() click to toggle source
# File lib/kafo/param.rb, line 81
def to_s
  "#<#{self.class}:#{self.object_id} @name=#{name.inspect} @default=#{default.inspect} @value=#{value.inspect} @type=#{@type}>"
end
unset_value() click to toggle source
# File lib/kafo/param.rb, line 42
def unset_value
  @value_set = false
  @value     = nil
end
valid?() click to toggle source
# File lib/kafo/param.rb, line 109
def valid?
  @validation_errors = []

  # run data type based validations, append errors
  @type.valid?(value, @validation_errors)

  @validation_errors.empty?
end
validation_errors() click to toggle source
# File lib/kafo/param.rb, line 118
def validation_errors
  @validation_errors
end
value() click to toggle source

we use @value_set flag because even nil can be valid value Order of descending precedence: @value, @default (from dump), @manifest_default

# File lib/kafo/param.rb, line 33
def value
  @value_set ? @type.typecast(@value) : default
end
value=(value) click to toggle source
# File lib/kafo/param.rb, line 37
def value=(value)
  @value_set = true
  @value     = normalize_value(value)
end
value_to_s() click to toggle source
# File lib/kafo/param.rb, line 89
def value_to_s
  internal_value_to_s(value)
end
visible?(context = []) click to toggle source
# File lib/kafo/param.rb, line 134
def visible?(context = [])
  condition.nil? || condition.empty? ? true : evaluate_condition(context)
end

Private Instance Methods

evaluate_condition(context = []) click to toggle source
# File lib/kafo/param.rb, line 144
def evaluate_condition(context = [])
  Condition.new(condition, context).evaluate
end
internal_value_to_s(value) click to toggle source
# File lib/kafo/param.rb, line 175
def internal_value_to_s(value)
  value.nil? ? 'UNDEF' : value.inspect
end
interpret_validation_args(args) click to toggle source
# File lib/kafo/param.rb, line 148
def interpret_validation_args(args)
  args.map do |arg|
    if arg.to_s == "$#{self.name}"
      self.value
    elsif arg.is_a? String
      arg.gsub("$#{self.name}", self.value.to_s)
    else
      arg
    end
  end.map do |arg|
    arg == :undef ? nil : arg
  end
end
normalize_value(value) click to toggle source
# File lib/kafo/param.rb, line 162
def normalize_value(value)
  case value
    when ::HighLine::String  # don't persist highline extensions
      value.to_s
    when Array
      value.map { |v| normalize_value(v) }
    when Hash
      Hash[value.map { |k,v| [normalize_value(k), normalize_value(v)] }]
    else
      value
  end
end