summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bool2num.rb44
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