(#13610) Add is_function_available to stdlib

This function provides a simple wrapper around
Puppet::Parser::Functions.function for access within Puppet manifests.
This will allow users to check whether or not a plugin or functionality
such as hiera is installed on the server.
This commit is contained in:
Eric Shamow 2012-04-03 22:30:46 -04:00 committed by Adrien Thebo
parent 6dfd7f6b73
commit 961dcab15d
2 changed files with 54 additions and 0 deletions

View file

@ -0,0 +1,23 @@
#
# is_function_available.rb
#
module Puppet::Parser::Functions
newfunction(:is_function_available, :type => :rvalue, :doc => <<-EOS
This function accepts a string as an argument, determines whether the
Puppet runtime has access to a function by that name. It returns a
true if the function exists, false if not.
EOS
) do |arguments|
if (arguments.size != 1) then
raise(Puppet::ParseError, "is_function_available?(): Wrong number of arguments "+
"given #{arguments.size} for 1")
end
function = Puppet::Parser::Functions.function(arguments[0].to_sym)
function.is_a?(String) and not function.empty?
end
end
# vim: set ts=2 sw=2 et :

View file

@ -0,0 +1,31 @@
#!/usr/bin/env rspec
require 'spec_helper'
describe "the is_function_available function" do
before :all do
Puppet::Parser::Functions.autoloader.loadall
end
before :each do
@scope = Puppet::Parser::Scope.new
end
it "should exist" do
Puppet::Parser::Functions.function("is_function_available").should == "function_is_function_available"
end
it "should raise a ParseError if there is less than 1 arguments" do
lambda { @scope.function_is_function_available([]) }.should( raise_error(Puppet::ParseError))
end
it "should return false if a nonexistent function is passed" do
result = @scope.function_is_function_available(['jeff_mccunes_left_sock'])
result.should(eq(false))
end
it "should return true if an available function is passed" do
result = @scope.function_is_function_available(['require'])
result.should(eq(true))
end
end