commit
841b0df210
3 changed files with 87 additions and 0 deletions
|
@ -86,6 +86,13 @@ If you want to use a standardized set of run stages for Puppet, `include stdlib`
|
||||||
Requires an action ('encode', 'decode') and either a plain or base64-encoded
|
Requires an action ('encode', 'decode') and either a plain or base64-encoded
|
||||||
string. *Type*: rvalue
|
string. *Type*: rvalue
|
||||||
|
|
||||||
|
* `basename`: Returns the `basename` of a path (optionally stripping an extension). For example:
|
||||||
|
* ('/path/to/a/file.ext') returns 'file.ext'
|
||||||
|
* ('relative/path/file.ext') returns 'file.ext'
|
||||||
|
* ('/path/to/a/file.ext', '.ext') returns 'file'
|
||||||
|
|
||||||
|
*Type*: rvalue
|
||||||
|
|
||||||
* `bool2num`: Converts a boolean to a number. Converts values:
|
* `bool2num`: Converts a boolean to a number. Converts values:
|
||||||
* 'false', 'f', '0', 'n', and 'no' to 0.
|
* 'false', 'f', '0', 'n', and 'no' to 0.
|
||||||
* 'true', 't', '1', 'y', and 'yes' to 1.
|
* 'true', 't', '1', 'y', and 'yes' to 1.
|
||||||
|
|
34
lib/puppet/parser/functions/basename.rb
Normal file
34
lib/puppet/parser/functions/basename.rb
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
module Puppet::Parser::Functions
|
||||||
|
newfunction(:basename, :type => :rvalue, :doc => <<-EOS
|
||||||
|
Strips directory (and optional suffix) from a filename
|
||||||
|
EOS
|
||||||
|
) do |arguments|
|
||||||
|
|
||||||
|
if arguments.size < 1 then
|
||||||
|
raise(Puppet::ParseError, "basename(): No arguments given")
|
||||||
|
elsif arguments.size > 2 then
|
||||||
|
raise(Puppet::ParseError, "basename(): Too many arguments given (#{arguments.size})")
|
||||||
|
else
|
||||||
|
|
||||||
|
unless arguments[0].is_a?(String)
|
||||||
|
raise(Puppet::ParseError, 'basename(): Requires string as first argument')
|
||||||
|
end
|
||||||
|
|
||||||
|
if arguments.size == 1 then
|
||||||
|
rv = File.basename(arguments[0])
|
||||||
|
elsif arguments.size == 2 then
|
||||||
|
|
||||||
|
unless arguments[1].is_a?(String)
|
||||||
|
raise(Puppet::ParseError, 'basename(): Requires string as second argument')
|
||||||
|
end
|
||||||
|
|
||||||
|
rv = File.basename(arguments[0], arguments[1])
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
return rv
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# vim: set ts=2 sw=2 et :
|
46
spec/unit/puppet/parser/functions/basename_spec.rb
Executable file
46
spec/unit/puppet/parser/functions/basename_spec.rb
Executable file
|
@ -0,0 +1,46 @@
|
||||||
|
#! /usr/bin/env ruby -S rspec
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe "the basename function" do
|
||||||
|
let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
|
||||||
|
|
||||||
|
it "should exist" do
|
||||||
|
Puppet::Parser::Functions.function("basename").should == "function_basename"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should raise a ParseError if there is less than 1 argument" do
|
||||||
|
lambda { scope.function_basename([]) }.should( raise_error(Puppet::ParseError))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should raise a ParseError if there are more than 2 arguments" do
|
||||||
|
lambda { scope.function_basename(['a', 'b', 'c']) }.should( raise_error(Puppet::ParseError))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return basename for an absolute path" do
|
||||||
|
result = scope.function_basename(['/path/to/a/file.ext'])
|
||||||
|
result.should(eq('file.ext'))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return basename for a relative path" do
|
||||||
|
result = scope.function_basename(['path/to/a/file.ext'])
|
||||||
|
result.should(eq('file.ext'))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should strip extention when extension specified (absolute path)" do
|
||||||
|
result = scope.function_basename(['/path/to/a/file.ext', '.ext'])
|
||||||
|
result.should(eq('file'))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should strip extention when extension specified (relative path)" do
|
||||||
|
result = scope.function_basename(['path/to/a/file.ext', '.ext'])
|
||||||
|
result.should(eq('file'))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should complain about non-string first argument" do
|
||||||
|
lambda { scope.function_basename([[]]) }.should( raise_error(Puppet::ParseError))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should complain about non-string second argument" do
|
||||||
|
lambda { scope.function_basename(['/path/to/a/file.ext', []]) }.should( raise_error(Puppet::ParseError))
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue