Class: Kafo::Param

Inherits:
Object
  • Object
show all
Defined in:
lib/kafo/param.rb

Direct Known Subclasses

Kafo::Params::Password

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(builder, name, type) ⇒ Param

Returns a new instance of Param.



11
12
13
14
15
# File 'lib/kafo/param.rb', line 11

def initialize(builder, name, type)
  @name   = name
  @module = builder
  @type   = DataType.new_from_string(type)
end

Instance Attribute Details

#conditionObject

Returns the value of attribute condition.



8
9
10
# File 'lib/kafo/param.rb', line 8

def condition
  @condition
end

#defaultObject

Returns the value of attribute default.



8
9
10
# File 'lib/kafo/param.rb', line 8

def default
  @default
end

#docObject

Returns the value of attribute doc.



8
9
10
# File 'lib/kafo/param.rb', line 8

def doc
  @doc
end

#groupsObject



17
18
19
# File 'lib/kafo/param.rb', line 17

def groups
  @groups || []
end

#moduleObject (readonly)

Returns the value of attribute module.



7
8
9
# File 'lib/kafo/param.rb', line 7

def module
  @module
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/kafo/param.rb', line 7

def name
  @name
end

#typeObject (readonly)

Returns the value of attribute type.



7
8
9
# File 'lib/kafo/param.rb', line 7

def type
  @type
end

#value_setObject

Returns the value of attribute value_set.



8
9
10
# File 'lib/kafo/param.rb', line 8

def value_set
  @value_set
end

Instance Method Details

#<=>(o) ⇒ Object



111
112
113
114
115
116
117
# File 'lib/kafo/param.rb', line 111

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_valueObject



123
124
125
# File 'lib/kafo/param.rb', line 123

def condition_value
  @type.condition_value(value)
end

#dump_defaultObject



37
38
39
# File 'lib/kafo/param.rb', line 37

def dump_default
  @type.dump_default(default)
end

#module_nameObject



41
42
43
# File 'lib/kafo/param.rb', line 41

def module_name
  self.module.name
end

#multivalued?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/kafo/param.rb', line 107

def multivalued?
  @type.multivalued?
end

#set_default(defaults) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/kafo/param.rb', line 49

def set_default(defaults)
  if default == 'UNSET'
    self.default = nil
  else
    # 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.
    value = defaults.has_key?(default) ? defaults[default] : default
    case value
      when :undef
        # value can be set to :undef if value is not defined
        # (e.g. puppetmaster = $::puppetmaster which is not defined yet)
        self.default = nil
      when :undefined
        # in puppet 2.7 :undefined means that it's param which value is
        # not set by another parameter (e.g. foreman_group = 'something')
        # which means, default is sensible unlike dumped default
        # newer puppet has default dump in format 'value' => 'value' so
        # it's handled correctly by else branch
      else
        self.default = value
    end
  end
end

#set_value_by_config(config) ⇒ Object



74
75
76
77
# File 'lib/kafo/param.rb', line 74

def set_value_by_config(config)
  base       = config[self.module.class_name]
  self.value = base[name] if base.has_key?(name)
end

#to_sObject



45
46
47
# File 'lib/kafo/param.rb', line 45

def to_s
  "#<#{self.class}:#{self.object_id} @name=#{name.inspect} @default=#{default.inspect} @value=#{value.inspect} @type=#{@type}>"
end

#unset_valueObject



32
33
34
35
# File 'lib/kafo/param.rb', line 32

def unset_value
  @value_set = false
  @value     = nil
end

#valid?Boolean

Returns:

  • (Boolean)


79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/kafo/param.rb', line 79

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_errorsObject



103
104
105
# File 'lib/kafo/param.rb', line 103

def validation_errors
  @validation_errors || []
end

#valueObject

we use @value_set flag because even nil can be valid value



22
23
24
# File 'lib/kafo/param.rb', line 22

def value
  @value_set ? @type.typecast(@value) : default
end

#value=(value) ⇒ Object



26
27
28
29
30
# File 'lib/kafo/param.rb', line 26

def value=(value)
  @value_set = true
  value      = value.to_s if value.is_a?(::HighLine::String)  # don't persist highline extensions
  @value     = value
end

#visible?(context = []) ⇒ Boolean

Returns:

  • (Boolean)


119
120
121
# File 'lib/kafo/param.rb', line 119

def visible?(context = [])
  condition.nil? || condition.empty? ? true : evaluate_condition(context)
end