diff options
author | Krzysztof Wilczynski <krzysztof.wilczynski@linux.com> | 2011-04-26 02:54:18 +0100 |
---|---|---|
committer | Krzysztof Wilczynski <krzysztof.wilczynski@linux.com> | 2011-04-26 02:54:18 +0100 |
commit | 522557001849ab3cc0de9c8a095558c211b62d63 (patch) | |
tree | 155a08129f8981cf07169b9244b98787affcc51d | |
parent | 6bf04e1353b3a294aa7b7f5a0e70a5cc2743a3ee (diff) |
First version. Simple delete_at function to use within Puppet DSL.
Signed-off-by: Krzysztof Wilczynski <krzysztof.wilczynski@linux.com>
-rw-r--r-- | delete_at.rb | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/delete_at.rb b/delete_at.rb new file mode 100644 index 0000000..c33f65a --- /dev/null +++ b/delete_at.rb @@ -0,0 +1,42 @@ +# +# delete_at.rb +# + +module Puppet::Parser::Functions + newfunction(:delete_at, :type => :rvalue, :doc => <<-EOS + EOS + ) do |arguments| + + raise(Puppet::ParseError, "delete_at(): Wrong number of arguments " + + "given (#{arguments.size} for 2)") if arguments.size < 2 + + array = arguments[0] + + if not array.is_a?(Array) + raise(Puppet::ParseError, 'delete_at(): Requires an array to work with') + end + + index = arguments[1] + + if not index.match(/^\d+$/) + raise(Puppet::ParseError, 'delete_at(): You must provide ' + + 'positive numeric index') + end + + result = array.clone + + # In Puppet numbers are often string-encoded ... + index = index.to_i + + if index > result.size - 1 # First element is at index 0 is it not? + raise(Puppet::ParseError, 'delete_at(): Given index ' + + 'exceeds array size') + end + + result.delete_at(index) # We ignore the element that got deleted ... + + return result + end +end + +# vim: set ts=2 sw=2 et : |