puppetlabs-stdlib/shuffle.rb
Krzysztof Wilczynski c3877c1984 Added TODO for future reference.
Signed-off-by: Krzysztof Wilczynski <krzysztof.wilczynski@linux.com>
2011-04-29 04:20:44 +01:00

37 lines
859 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
#
# TODO(Krzysztof Wilczynski): Support for strings would be nice too ...
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 :