puppetlabs-stdlib/shuffle.rb
Krzysztof Wilczynski 6bf04e1353 Small re-factor. We prefer our local clone of the array ...
Signed-off-by: Krzysztof Wilczynski <krzysztof.wilczynski@linux.com>
2011-04-26 02:53:40 +01:00

35 lines
786 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
result = array.clone
elements = result.size
return [] if result.size == 0
return result if result.size <= 1
# Simple implementation of FisherYates in-place shuffle ...
elements.times do |i|
j = rand(elements - i) + i
result[j], result[i] = result[i], result[j]
end
return result
end
end
# vim: set ts=2 sw=2 et :