Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(#23381) add is_bool() function #211

Merged
merged 1 commit into from Dec 18, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.markdown
Expand Up @@ -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.
Expand Down
22 changes: 22 additions & 0 deletions lib/puppet/parser/functions/is_bool.rb
@@ -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 :
2 changes: 1 addition & 1 deletion lib/puppet/parser/functions/validate_bool.rb
Expand Up @@ -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
Expand Down
44 changes: 44 additions & 0 deletions spec/unit/puppet/parser/functions/is_bool_spec.rb
@@ -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