puppetlabs-stdlib/shuffle.rb
Krzysztof Wilczynski 45b5b472a1 First version. Simple shuffle function to use within Puppet DSL.
Signed-off-by: Krzysztof Wilczynski <krzysztof.wilczynski@linux.com>
2011-04-26 00:14:38 +01:00

35 lines
770 B
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#
# shuffle.rb
#
module Puppet::Parser::Functions
newfunction(:shuffle, :type => :rvalue, :doc => <<-EOS
EOS
) do |arguments|
raise(Puppet::ParseError, "shuffle(): Wrong number of arguments " +
"given (#{arguments.size} for 1)") if arguments.size < 1
array = arguments[0]
if not array.is_a?(Array)
raise(Puppet::ParseError, 'shuffle(): Requires an array to work with')
end
return [] if array.size == 0
return array if array.size <= 1
list = array.clone
elements = list.size
# Simple implementation of FisherYates in-place shuffle ...
elements.times do |i|
j = rand(elements - i) + i
list[j], list[i] = list[i], list[j]
end
return list
end
end
# vim: set ts=2 sw=2 et :