X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Fstdlib%2Flib%2Fpuppet%2Fparser%2Ffunctions%2Fclamp.rb;h=1b6e2d292b6b7b616257977a7ab6de69bfd7058d;hb=30caaa85aed7015ca0d77216bff175eebd917eb7;hp=c4503fe5be12e37c379ca8cec7287892eceeca9b;hpb=6963202b4b62c2816655ac9532521b018fdf83bd;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/stdlib/lib/puppet/parser/functions/clamp.rb b/3rdparty/modules/stdlib/lib/puppet/parser/functions/clamp.rb index c4503fe5b..1b6e2d292 100644 --- a/3rdparty/modules/stdlib/lib/puppet/parser/functions/clamp.rb +++ b/3rdparty/modules/stdlib/lib/puppet/parser/functions/clamp.rb @@ -1,12 +1,28 @@ # # clamp.rb # - module Puppet::Parser::Functions - newfunction(:clamp, :type => :rvalue, :arity => -2, :doc => <<-EOS - Clamps value to a range. - EOS - ) do |args| + newfunction(:clamp, :type => :rvalue, :arity => -2, :doc => <<-DOC + @summary + Keeps value within the range [Min, X, Max] by sort based on integer value + (parameter order doesn't matter). + + Strings are converted and compared numerically. Arrays of values are flattened + into a list for further handling. + + @example Example usage + + clamp('24', [575, 187])` returns 187. + clamp(16, 88, 661)` returns 88. + clamp([4, 3, '99'])` returns 4. + + > *Note:* + From Puppet 6.0.0 this can be done with only core Puppet like this: + `[$minval, $maxval, $value_to_clamp].sort[1]` + + @return [Array[Integer]] The sorted Array + DOC + ) do |args| args.flatten! @@ -15,15 +31,15 @@ module Puppet::Parser::Functions # check values out args.each do |value| case [value.class] - when [String] - raise(Puppet::ParseError, "clamp(): Required explicit numeric (#{value}:String)") unless value =~ /^\d+$/ - when [Hash] - raise(Puppet::ParseError, "clamp(): The Hash type is not allowed (#{value})") + when [String] + raise(Puppet::ParseError, "clamp(): Required explicit numeric (#{value}:String)") unless value =~ %r{^\d+$} + when [Hash] + raise(Puppet::ParseError, "clamp(): The Hash type is not allowed (#{value})") end end # convert to numeric each element # then sort them and get a middle value - args.map{ |n| n.to_i }.sort[1] + args.map { |n| n.to_i }.sort[1] end end