(MODULES-1439) Adds any2bool function
* Basically a combination of `string2bool` and `num2bool`
This commit is contained in:
parent
24797bb5ad
commit
420f76d8dc
2 changed files with 97 additions and 0 deletions
55
lib/puppet/parser/functions/any2bool.rb
Normal file
55
lib/puppet/parser/functions/any2bool.rb
Normal file
|
@ -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 :
|
42
spec/functions/any2bool_spec.rb
Executable file
42
spec/functions/any2bool_spec.rb
Executable file
|
@ -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
|
Loading…
Reference in a new issue