5 module Puppet::Parser::Functions
6 newfunction(:is_numeric, :type => :rvalue, :doc => <<-EOS
7 Returns true if the given argument is a Numeric (Integer or Float),
8 or a String containing either a valid integer in decimal base 10 form, or
9 a valid floating point string representation.
11 The function recognizes only decimal (base 10) integers and float but not
12 integers in hex (base 16) or octal (base 8) form.
14 The string representation may start with a '-' (minus). If a decimal '.' is used,
15 it must be followed by at least one digit.
27 if (arguments.size != 1) then
28 raise(Puppet::ParseError, "is_numeric(): Wrong number of arguments "+
29 "given #{arguments.size} for 1")
34 # Regex is taken from the lexer of puppet
35 # puppet/pops/parser/lexer.rb but modified to match also
36 # negative values and disallow invalid octal numbers or
37 # numbers prefixed with multiple 0's (except in hex numbers)
39 # TODO these parameters should be constants but I'm not sure
40 # if there is no risk to declare them inside of the module
41 # Puppet::Parser::Functions
43 # TODO decide if this should be used
49 #numeric_hex = %r{^-?0[xX][0-9A-Fa-f]+$}
51 # TODO decide if this should be used
55 #numeric_oct = %r{^-?0[1-7][0-7]*$}
57 # Integer/Float numbers like
61 numeric = %r{^-?(?:(?:[1-9]\d*)|0)(?:\.\d+)?(?:[eE]-?\d+)?$}
63 if value.is_a? Numeric or (value.is_a? String and (
64 value.match(numeric) #or
65 # value.match(numeric_hex) or
66 # value.match(numeric_oct)
75 # vim: set ts=2 sw=2 et :