]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
MODULES-1606 add ability to pass array to delete for items to delete
authorTravis Fields <travis@puppetlabs.com>
Fri, 19 Dec 2014 18:26:01 +0000 (10:26 -0800)
committerTravis Fields <travis@puppetlabs.com>
Fri, 19 Dec 2014 18:26:01 +0000 (10:26 -0800)
lib/puppet/parser/functions/delete.rb
spec/functions/delete_spec.rb

index d03a29355e24067c922f5ea4aacb3614769c108e..a1e39edcfc0bfea0cbcc0f9696038841bd1a637c 100644 (file)
@@ -19,25 +19,25 @@ string, or key from a hash.
 
     delete('abracadabra', 'bra')
     Would return: 'acada'
-    EOS
+  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
 
     collection = arguments[0].dup
-    item = arguments[1]
-
-    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}.")
+    Array(arguments[1]).each do |item|
+      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
     end
     collection
   end
index 39b3176d0dac9c2c00061105e2fe6a106d08dc70..c8edd78e28af9061fd7e2e4a00e94081bc85e5cb 100755 (executable)
@@ -9,48 +9,53 @@ describe "the delete function" do
   end
 
   it "should raise a ParseError if there are fewer than 2 arguments" do
-    expect { scope.function_delete([]) }.to( raise_error(Puppet::ParseError))
+    expect { scope.function_delete([]) }.to(raise_error(Puppet::ParseError))
   end
 
   it "should raise a ParseError if there are greater than 2 arguments" do
-    expect { scope.function_delete([[], 'foo', 'bar']) }.to( raise_error(Puppet::ParseError))
+    expect { scope.function_delete([[], 'foo', 'bar']) }.to(raise_error(Puppet::ParseError))
   end
 
   it "should raise a TypeError if a number is passed as the first argument" do
-    expect { scope.function_delete([1, 'bar']) }.to( raise_error(TypeError))
+    expect { scope.function_delete([1, 'bar']) }.to(raise_error(TypeError))
   end
 
   it "should delete all instances of an element from an array" do
-    result = scope.function_delete([['a','b','c','b'],'b'])
-    expect(result).to(eq(['a','c']))
+    result = scope.function_delete([['a', 'b', 'c', 'b'], 'b'])
+    expect(result).to(eq(['a', 'c']))
   end
 
   it "should delete all instances of a substring from a string" do
-    result = scope.function_delete(['foobarbabarz','bar'])
+    result = scope.function_delete(['foobarbabarz', 'bar'])
     expect(result).to(eq('foobaz'))
   end
 
   it "should delete a key from a hash" do
-    result = scope.function_delete([{ 'a' => 1, 'b' => 2, 'c' => 3 },'b'])
-    expect(result).to(eq({ 'a' => 1, 'c' => 3 }))
+    result = scope.function_delete([{'a' => 1, 'b' => 2, 'c' => 3}, 'b'])
+    expect(result).to(eq({'a' => 1, 'c' => 3}))
+  end
+
+  it 'should accept an array of items to delete' do
+    result = scope.function_delete([{'a' => 1, 'b' => 2, 'c' => 3}, ['b', 'c']])
+    expect(result).to(eq({'a' => 1}))
   end
 
   it "should not change origin array passed as argument" do
-    origin_array = ['a','b','c','d']
+    origin_array = ['a', 'b', 'c', 'd']
     result = scope.function_delete([origin_array, 'b'])
-    expect(origin_array).to(eq(['a','b','c','d']))
+    expect(origin_array).to(eq(['a', 'b', 'c', 'd']))
   end
 
   it "should not change the origin string passed as argument" do
     origin_string = 'foobarbabarz'
-    result = scope.function_delete([origin_string,'bar'])
+    result = scope.function_delete([origin_string, 'bar'])
     expect(origin_string).to(eq('foobarbabarz'))
   end
 
   it "should not change origin hash passed as argument" do
-    origin_hash = { 'a' => 1, 'b' => 2, 'c' => 3 }
+    origin_hash = {'a' => 1, 'b' => 2, 'c' => 3}
     result = scope.function_delete([origin_hash, 'b'])
-    expect(origin_hash).to(eq({ 'a' => 1, 'b' => 2, 'c' => 3 }))
+    expect(origin_hash).to(eq({'a' => 1, 'b' => 2, 'c' => 3}))
   end
 
 end