diff options
| author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-03-09 23:17:34 +0000 |
|---|---|---|
| committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-03-09 23:17:34 +0000 |
| commit | b336e7e59d3497b96dd42b6dbc1855176e6e830d (patch) | |
| tree | 0442207e70709db2237a5131bbe6922e998bba45 /lib/puppet/parameter.rb | |
| parent | b6d829b66bc83f943e929b3f6b036b3aff11187f (diff) | |
| download | puppet-b336e7e59d3497b96dd42b6dbc1855176e6e830d.tar.gz puppet-b336e7e59d3497b96dd42b6dbc1855176e6e830d.tar.xz puppet-b336e7e59d3497b96dd42b6dbc1855176e6e830d.zip | |
Parameters and states can now register regexes as allowed values. Also, there are (finally) tests associated with params and states, although they should be much more comprehensive.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@999 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/parameter.rb')
| -rw-r--r-- | lib/puppet/parameter.rb | 92 |
1 files changed, 70 insertions, 22 deletions
diff --git a/lib/puppet/parameter.rb b/lib/puppet/parameter.rb index cee53afbf..81b5cb68c 100644 --- a/lib/puppet/parameter.rb +++ b/lib/puppet/parameter.rb @@ -30,6 +30,12 @@ module Puppet @doc = str end + def initvars + @parametervalues = [] + @aliasvalues = {} + @parameterregexes = [] + end + # This is how we munge the value. Basically, this is our # opportunity to convert the value from one form into another. def munge(&block) @@ -56,10 +62,6 @@ module Puppet #@munger = block end - #def inspect - # "Parameter(#{self.name})" - #end - # Mark whether we're the namevar. def isnamevar @isnamevar = true @@ -118,27 +120,46 @@ module Puppet end end + # Does the value match any of our regexes? + def match?(value) + value = value.to_s unless value.is_a? String + @parameterregexes.find { |r| + r = r[0] if r.is_a? Array # States use a hash here + r =~ value + } + end + # Define a new value for our parameter. def newvalues(*names) - @parametervalues ||= [] - names.each { |name| - if @parametervalues.include?(name) - Puppet.warning "%s already has a value for %s" % - [name, name] + name = name.intern if name.is_a? String + + case name + when Symbol + if @parametervalues.include?(name) + Puppet.warning "%s already has a value for %s" % + [name, name] + end + @parametervalues << name + when Regexp + if @parameterregexes.include?(name) + Puppet.warning "%s already has a value for %s" % + [name, name] + end + @parameterregexes << name + else + raise ArgumentError, "Invalid value %s of type %s" % + [name, name.class] end - @parametervalues << name } end def aliasvalue(name, other) - @parametervalues ||= [] unless @parametervalues.include?(other) raise Puppet::DevError, "Cannot alias nonexistent value %s" % other end - @aliasvalues ||= {} @aliasvalues[name] = other end @@ -146,11 +167,12 @@ module Puppet @aliasvalues[name] end + def regexes + return @parameterregexes.dup + end + # Return the list of valid values. def values - @parametervalues ||= [] - @aliasvalues ||= {} - #[@aliasvalues.keys, @parametervalues.keys].flatten if @parametervalues.is_a? Array return @parametervalues.dup @@ -240,7 +262,7 @@ module Puppet # If the specified value is allowed, then munge appropriately. munge do |value| - if self.class.values.empty? + if self.class.values.empty? and self.class.regexes.empty? # This parameter isn't using defined values to do its work. return value end @@ -254,25 +276,51 @@ module Puppet retval = intern elsif other = self.class.alias(intern) retval = other + elsif ary = self.class.match?(value) + retval = value else + # If it passed the validation but is not a registered value, + # we just return it as is. retval = value end + retval end # Verify that the passed value is valid. validate do |value| - values = self.class.values - if values.empty? + vals = self.class.values + regs = self.class.regexes + + if regs.is_a? Hash # this is true on states + regs = regs.keys + end + if vals.empty? and regs.empty? # This parameter isn't using defined values to do its work. return end + newval = value unless value.is_a?(Symbol) - value = value.to_s.intern + newval = value.to_s.intern end - unless values.include?(value) or self.class.alias(value) - self.fail "Invalid '%s' value '%s'. Valid values are '%s'" % - [self.class.name, value, values.join(", ")] + + unless vals.include?(newval) or + self.class.alias(newval) or + self.class.match?(value) # We match the string, not the symbol + str = "Invalid '%s' value %s. " % + [self.class.name, value.inspect] + + unless vals.empty? + str += "Valid values are %s. " % vals.join(", ") + end + + unless regs.empty? + str += "Valid values match %s." % regs.collect { |r| + r.to_s + }.join(", ") + end + + raise ArgumentError, str end end |
