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)
end

Public Instance Methods

<=>(o) click to toggle source
# File lib/kafo/param.rb, line 137
def <=> o
  unless @module.configuration.app[:no_prefix]
    r = self.module_name <=> o.module_name
    return r unless r == 0
  end
  self.name <=> o.name
end
condition_value() click to toggle source
# File lib/kafo/param.rb, line 149
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 45
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 49
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 81
def default_to_s
  internal_value_to_s(default)
end
dump_default() click to toggle source
# File lib/kafo/param.rb, line 60
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 56
def dump_default_needed?
  manifest_default.to_s.start_with?('$')
end
groups() click to toggle source
# File lib/kafo/param.rb, line 23
def groups
  @groups || []
end
identifier() click to toggle source
# File lib/kafo/param.rb, line 19
def identifier
  @module ? "#{@module.identifier}::#{name}" : name
end
manifest_default=(default) click to toggle source
# File lib/kafo/param.rb, line 64
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 69
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 73
def module_name
  self.module.name
end
multivalued?() click to toggle source
# File lib/kafo/param.rb, line 133
def multivalued?
  @type.multivalued?
end
set_default_from_dump(defaults) click to toggle source
# File lib/kafo/param.rb, line 89
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 100
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 77
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 38
def unset_value
  @value_set = false
  @value     = nil
end
valid?() click to toggle source
# File lib/kafo/param.rb, line 105
def valid?
  # we get validations that can also run on other arguments, we need to take only current param
  # also we want to clone validations so we don't interfere
  validations = self.module.validations(self).map do |v|
    # These functions do not take more variables as arguments, instead we need to pass all arguments
    if v.name == 'validate_re' || v.name == 'validate_integer'
      args = v.arguments.to_a
    else
      args = v.arguments.select { |a| a.to_s == "$#{self.name}" }
    end
    {:name => v.name, :arguments => interpret_validation_args(args)}
  end

  # run old style validation functions
  @validator = Validator.new
  validations.each { |v| @validator.send(v[:name], v[:arguments]) }
  @validation_errors = @validator.errors.dup

  # 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 129
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 29
def value
  @value_set ? @type.typecast(@value) : default
end
value=(value) click to toggle source
# File lib/kafo/param.rb, line 33
def value=(value)
  @value_set = true
  @value     = normalize_value(value)
end
value_to_s() click to toggle source
# File lib/kafo/param.rb, line 85
def value_to_s
  internal_value_to_s(value)
end
visible?(context = []) click to toggle source
# File lib/kafo/param.rb, line 145
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 155
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 186
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 159
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 173
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