summaryrefslogtreecommitdiff
path: root/lib/puppet/parser/functions/delete.rb
diff options
context:
space:
mode:
authorJoshua Harlan Lifton <lifton@puppetlabs.com>2012-11-17 22:27:15 -0800
committerJeff McCune <jeff@puppetlabs.com>2012-11-19 08:44:44 -0500
commit7322e4dc2f8dc831097d2b0fa3768df0689acfa2 (patch)
tree9c583ad535b007866573d48f2d426f5e866eed3c /lib/puppet/parser/functions/delete.rb
parent0798059361cd79991220ff997529593a4cb43a0e (diff)
Extend delete function for strings and hashes
Previous to this commit, the delete function only acted on arrays. This commit adds the same functionality for hashes and strings in the obvious way: delete(h, k) would delete the k key from the h hash and delete(s, sub) would delete all instances of the sub substring from the s string.
Diffstat (limited to 'lib/puppet/parser/functions/delete.rb')
-rw-r--r--lib/puppet/parser/functions/delete.rb30
1 files changed, 21 insertions, 9 deletions
diff --git a/lib/puppet/parser/functions/delete.rb b/lib/puppet/parser/functions/delete.rb
index ab8f75b..f814344 100644
--- a/lib/puppet/parser/functions/delete.rb
+++ b/lib/puppet/parser/functions/delete.rb
@@ -3,31 +3,43 @@
#
# TODO(Krzysztof Wilczynski): We need to add support for regular expression ...
-# TODO(Krzysztof Wilczynski): Support for strings and hashes too ...
module Puppet::Parser::Functions
newfunction(:delete, :type => :rvalue, :doc => <<-EOS
-Deletes a selected element from an array.
+Deletes all instances of a given element from an array, substring from a
+string, or key from a hash.
*Examples:*
- delete(['a','b','c'], 'b')
+ delete(['a','b','c','b'], 'b')
+ Would return: ['a','c']
-Would return: ['a','c']
+ delete({'a'=>1,'b'=>2,'c'=>3}, 'b')
+ Would return: {'a'=>1,'c'=>3}
+
+ delete('abracadabra', 'bra')
+ Would return: 'acada'
EOS
) do |arguments|
if (arguments.size != 2) then
raise(Puppet::ParseError, "delete(): Wrong number of arguments "+
- "given #{arguments.size} for 2")
+ "given #{arguments.size} for 2.")
end
- a = arguments[0]
+ collection = arguments[0]
item = arguments[1]
- a.delete(item)
- a
-
+ case collection
+ when Array, Hash
+ collection.delete item
+ when String
+ collection.gsub! item, ''
+ else
+ raise(TypeError, "delete(): First argument must be an Array, " +
+ "String, or Hash. Given an argument of class #{collection.class}.")
+ end
+ collection
end
end