]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
Added proper handling of both FalseClass and TrueClass. We also
authorKrzysztof Wilczynski <krzysztof.wilczynski@linux.com>
Fri, 29 Apr 2011 19:07:56 +0000 (20:07 +0100)
committerKrzysztof Wilczynski <krzysztof.wilczynski@linux.com>
Fri, 29 Apr 2011 19:07:56 +0000 (20:07 +0100)
return real integer values now over string-encoded integers.

Signed-off-by: Krzysztof Wilczynski <krzysztof.wilczynski@linux.com>
bool2num.rb

index c197b17f7bd20f76a7bf1c1a24e31b9c4f863339..eddd05154bb1989b030208bcdfeb4471c36f9dbc 100644 (file)
@@ -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