From 07847be9b99913d3c94899b36da191e609c28a38 Mon Sep 17 00:00:00 2001 From: Krzysztof Wilczynski Date: Fri, 29 Apr 2011 20:07:56 +0100 Subject: Added proper handling of both FalseClass and TrueClass. We also return real integer values now over string-encoded integers. Signed-off-by: Krzysztof Wilczynski --- bool2num.rb | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'bool2num.rb') 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 -- cgit v1.2.3