diff options
author | Krzysztof Wilczynski <krzysztof.wilczynski@linux.com> | 2011-04-29 20:07:56 +0100 |
---|---|---|
committer | Krzysztof Wilczynski <krzysztof.wilczynski@linux.com> | 2011-04-29 20:07:56 +0100 |
commit | 07847be9b99913d3c94899b36da191e609c28a38 (patch) | |
tree | 6bc1ff99b94ace639384df8fab272e50223f5be3 | |
parent | 5e9721983a6239338dea13b8efaef9f679bebb33 (diff) |
Added proper handling of both FalseClass and TrueClass. We also
return real integer values now over string-encoded integers.
Signed-off-by: Krzysztof Wilczynski <krzysztof.wilczynski@linux.com>
-rw-r--r-- | bool2num.rb | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/bool2num.rb b/bool2num.rb index c197b17..eddd051 100644 --- a/bool2num.rb +++ b/bool2num.rb @@ -3,30 +3,38 @@ # module Puppet::Parser::Functions - newfunction(:bool2num, :type => :rvalue, :doc => <<-EOS + newfunction(:bool2number, :type => :rvalue, :doc => <<-EOS EOS ) do |arguments| - raise(Puppet::ParseError, "bool2num(): Wrong number of arguments " + + raise(Puppet::ParseError, "bool2number(): Wrong number of arguments " + "given (#{arguments.size} for 1)") if arguments.size < 1 - boolean = arguments[0] + value = arguments[0] + klass = value.class - result = case boolean - # - # This is how undef looks like in Puppet ... - # We yield 0 (or false if you wish) in this case. - # - when /^$/, '' then '0' - when /^(1|t|true)$/ then '1' - when /^(0|f|false)$/ then '0' - # This is not likely to happen ... - when /^(undef|undefined)$/ then '0' - # We may get real boolean values as well ... - when true then '1' - when false then '0' - else - raise(Puppet::ParseError, 'bool2num(): Unknown type of boolean given') + if not [FalseClass, String, TrueClass].include?(klass) + raise(Puppet::ParseError, 'bool2number(): Requires either an ' + + 'boolean or string to work with') + end + + if value.is_a?(String) + result = case value + # + # This is how undef looks like in Puppet ... + # We yield 0 (or false if you wish) in this case. + # + when /^$/, '' then 0 + when /^(1|t|y|true|yes)$/ then 1 + when /^(0|f|n|false|no)$/ then 0 + # This is not likely to happen ... + when /^(undef|undefined)$/ then 0 + else + raise(Puppet::ParseError, 'bool2number(): Unknown type of boolean given') + end + else + # We have real boolean values as well ... + result = value ? 1 : 0 end return result |