(#23381) add is_bool() function

This commit is contained in:
Joshua Hoblitt 2013-12-09 11:45:50 -07:00
parent 76514d4759
commit 1077881873
4 changed files with 73 additions and 1 deletions

View file

@ -486,6 +486,12 @@ Returns true if the variable passed to this function is an array.
- *Type*: rvalue
is_bool
--------
Returns true if the variable passed to this function is a boolean.
- *Type*: rvalue
is_domain_name
--------------
Returns true if the string passed to this function is a syntactically correct domain name.

View file

@ -0,0 +1,22 @@
#
# is_bool.rb
#
module Puppet::Parser::Functions
newfunction(:is_bool, :type => :rvalue, :doc => <<-EOS
Returns true if the variable passed to this function is a boolean.
EOS
) do |arguments|
raise(Puppet::ParseError, "is_bool(): Wrong number of arguments " +
"given (#{arguments.size} for 1)") if arguments.size != 1
type = arguments[0]
result = type.is_a?(TrueClass) || type.is_a?(FalseClass)
return result
end
end
# vim: set ts=2 sw=2 et :

View file

@ -24,7 +24,7 @@ module Puppet::Parser::Functions
end
args.each do |arg|
unless (arg.is_a?(TrueClass) || arg.is_a?(FalseClass))
unless function_is_bool([arg])
raise Puppet::ParseError, ("#{arg.inspect} is not a boolean. It looks to be a #{arg.class}")
end
end

View file

@ -0,0 +1,44 @@
#! /usr/bin/env ruby -S rspec
require 'spec_helper'
describe "the is_bool function" do
let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
it "should exist" do
Puppet::Parser::Functions.function("is_bool").should == "function_is_bool"
end
it "should raise a ParseError if there is less than 1 arguments" do
lambda { scope.function_is_bool([]) }.should( raise_error(Puppet::ParseError))
end
it "should return true if passed a TrueClass" do
result = scope.function_is_bool([true])
result.should(eq(true))
end
it "should return true if passed a FalseClass" do
result = scope.function_is_bool([false])
result.should(eq(true))
end
it "should return false if passed the string 'true'" do
result = scope.function_is_bool(['true'])
result.should(eq(false))
end
it "should return false if passed the string 'false'" do
result = scope.function_is_bool(['false'])
result.should(eq(false))
end
it "should return false if passed an array" do
result = scope.function_is_bool([["a","b"]])
result.should(eq(false))
end
it "should return false if passed a hash" do
result = scope.function_is_bool([{"a" => "b"}])
result.should(eq(false))
end
end