]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
(#23381) add is_bool() function
authorJoshua Hoblitt <jhoblitt@cpan.org>
Mon, 9 Dec 2013 18:45:50 +0000 (11:45 -0700)
committerJoshua Hoblitt <jhoblitt@cpan.org>
Mon, 9 Dec 2013 18:50:03 +0000 (11:50 -0700)
README.markdown
lib/puppet/parser/functions/is_bool.rb [new file with mode: 0644]
lib/puppet/parser/functions/validate_bool.rb
spec/unit/puppet/parser/functions/is_bool_spec.rb [new file with mode: 0644]

index 5635343afc87d3c8de6cae6deb28d111955da2a6..b5929462fd1dbda538fb3cf75682d48f111dfbc9 100644 (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.
diff --git a/lib/puppet/parser/functions/is_bool.rb b/lib/puppet/parser/functions/is_bool.rb
new file mode 100644 (file)
index 0000000..8bbdbc8
--- /dev/null
@@ -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 :
index 62c1d888214910a764dd3b3cb3514e8232a4c147..59a08056b091b7b04815d48a699572f3804dabfd 100644 (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
diff --git a/spec/unit/puppet/parser/functions/is_bool_spec.rb b/spec/unit/puppet/parser/functions/is_bool_spec.rb
new file mode 100644 (file)
index 0000000..c94e83a
--- /dev/null
@@ -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