222a902ee978b0544087e2035ea5aaf542e7979c
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / lib / puppet / parser / functions / abs.rb
1 #
2 # abs.rb
3 #
4
5 module Puppet::Parser::Functions
6   newfunction(:abs, :type => :rvalue, :doc => <<-EOS
7     Returns the absolute value of a number, for example -34.56 becomes
8     34.56. Takes a single integer and float value as an argument.
9     EOS
10   ) do |arguments|
11
12     raise(Puppet::ParseError, "abs(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.size < 1
13
14     value = arguments[0]
15
16     # Numbers in Puppet are often string-encoded which is troublesome ...
17     if value.is_a?(String)
18       if value.match(/^-?(?:\d+)(?:\.\d+){1}$/)
19         value = value.to_f
20       elsif value.match(/^-?\d+$/)
21         value = value.to_i
22       else
23         raise(Puppet::ParseError, 'abs(): Requires float or integer to work with')
24       end
25     end
26
27     # We have numeric value to handle ...
28     result = value.abs
29
30     return result
31   end
32 end
33
34 # vim: set ts=2 sw=2 et :