diff options
Diffstat (limited to 'bool2num.rb')
-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 |