Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #601 from petems/MODULES-1439-any2bool_added
(MODULES-1439) Adds any2bool function
- Loading branch information
Showing
2 changed files
with
97 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
# | ||
# any2bool.rb | ||
# | ||
|
||
module Puppet::Parser::Functions | ||
newfunction(:any2bool, :type => :rvalue, :doc => <<-EOS | ||
This converts 'anything' to a boolean. In practise it does the following: | ||
* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true | ||
* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false | ||
* Booleans will just return their original value | ||
* Number (or a string representation of a number) > 0 will return true, otherwise false | ||
* undef will return false | ||
* Anything else will return true | ||
EOS | ||
) do |arguments| | ||
|
||
raise(Puppet::ParseError, "any2bool(): Wrong number of arguments " + | ||
"given (#{arguments.size} for 1)") if arguments.size < 1 | ||
|
||
# If argument is already Boolean, return it | ||
if !!arguments[0] == arguments[0] | ||
return arguments[0] | ||
end | ||
|
||
arg = arguments[0] | ||
|
||
if arg == nil | ||
return false | ||
end | ||
|
||
if arg == :undef | ||
return false | ||
end | ||
|
||
valid_float = !!Float(arg) rescue false | ||
|
||
if arg.is_a?(Numeric) | ||
return function_num2bool( [ arguments[0] ] ) | ||
end | ||
|
||
if arg.is_a?(String) | ||
if valid_float | ||
return function_num2bool( [ arguments[0] ] ) | ||
else | ||
return function_str2bool( [ arguments[0] ] ) | ||
end | ||
end | ||
|
||
return true | ||
|
||
end | ||
end | ||
|
||
# vim: set ts=2 sw=2 et : |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
require 'spec_helper' | ||
|
||
describe 'any2bool' do | ||
it { is_expected.not_to eq(nil) } | ||
it { is_expected.to run.with_params().and_raise_error(Puppet::ParseError, /wrong number of arguments/i) } | ||
|
||
it { is_expected.to run.with_params(true).and_return(true) } | ||
it { is_expected.to run.with_params(false).and_return(false) } | ||
|
||
it { is_expected.to run.with_params('1.5').and_return(true) } | ||
|
||
describe 'when testing stringy values that mean "true"' do | ||
[ 'TRUE','1', 't', 'y', 'true', 'yes'].each do |value| | ||
it { is_expected.to run.with_params(value).and_return(true) } | ||
end | ||
end | ||
|
||
describe 'when testing stringy values that mean "false"' do | ||
[ 'FALSE','', '0', 'f', 'n', 'false', 'no', 'undef', 'undefined', nil, :undef ].each do |value| | ||
it { is_expected.to run.with_params(value).and_return(false) } | ||
end | ||
end | ||
|
||
describe 'when testing numeric values that mean "true"' do | ||
[ 1,'1',1.5, '1.5'].each do |value| | ||
it { is_expected.to run.with_params(value).and_return(true) } | ||
end | ||
end | ||
|
||
describe 'when testing numeric that mean "false"' do | ||
[ -1, '-1', -1.5, '-1.5', '0', 0 ].each do |value| | ||
it { is_expected.to run.with_params(value).and_return(false) } | ||
end | ||
end | ||
|
||
describe 'everything else returns true' do | ||
[ [], {}, ['1'], [1], {:one => 1} ].each do |value| | ||
it { is_expected.to run.with_params(value).and_return(true) } | ||
end | ||
end | ||
|
||
end |