]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
Add a dirname function
authorRaphaël Pinson <raphael.pinson@camptocamp.com>
Thu, 2 May 2013 13:10:59 +0000 (15:10 +0200)
committerRaphaël Pinson <raphael.pinson@camptocamp.com>
Thu, 2 May 2013 13:17:35 +0000 (15:17 +0200)
README.markdown
lib/puppet/parser/functions/dirname.rb [new file with mode: 0644]
spec/unit/puppet/parser/functions/dirname_spec.rb [new file with mode: 0755]

index 640299f054e4d0f646bc74f5a074f3982959db06..84cd08e26107583173e81a30172ba2982ee16e6f 100644 (file)
@@ -195,6 +195,16 @@ Would return: ['a','c']
 
 - *Type*: rvalue
 
+dirname
+-------
+Returns the `dirname` of a path.
+
+*Examples:*
+
+    dirname('/path/to/a/file.ext')
+
+Would return: '/path/to/a'
+
 downcase
 --------
 Converts the case of a string or all strings in an array to lower case.
diff --git a/lib/puppet/parser/functions/dirname.rb b/lib/puppet/parser/functions/dirname.rb
new file mode 100644 (file)
index 0000000..ea8cc1e
--- /dev/null
@@ -0,0 +1,15 @@
+module Puppet::Parser::Functions
+  newfunction(:dirname, :type => :rvalue, :doc => <<-EOS
+    Returns the dirname of a path.
+    EOS
+  ) do |arguments|
+
+    raise(Puppet::ParseError, "dirname(): Wrong number of arguments " +
+      "given (#{arguments.size} for 1)") if arguments.size < 1
+
+    path = arguments[0]
+    return File.dirname(path)
+  end
+end
+
+# vim: set ts=2 sw=2 et :
diff --git a/spec/unit/puppet/parser/functions/dirname_spec.rb b/spec/unit/puppet/parser/functions/dirname_spec.rb
new file mode 100755 (executable)
index 0000000..fb3b4fe
--- /dev/null
@@ -0,0 +1,24 @@
+#! /usr/bin/env ruby -S rspec
+require 'spec_helper'
+
+describe "the dirname function" do
+  let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
+
+  it "should exist" do
+    Puppet::Parser::Functions.function("dirname").should == "function_dirname"
+  end
+
+  it "should raise a ParseError if there is less than 1 arguments" do
+    lambda { scope.function_dirname([]) }.should( raise_error(Puppet::ParseError))
+  end
+
+  it "should return dirname for an absolute path" do
+    result = scope.function_dirname(['/path/to/a/file.ext'])
+    result.should(eq('/path/to/a'))
+  end
+
+  it "should return dirname for a relative path" do
+    result = scope.function_dirname(['path/to/a/file.ext'])
+    result.should(eq('path/to/a'))
+  end
+end