Skip to content

Commit 43dd606

Browse files
author
Jeff McCune
committed
Merge branch 'feature/2.x/pick' into 2.x
* feature/2.x/pick: Add the pick() function
2 parents f863558 + ba6dd13 commit 43dd606

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
module Puppet::Parser::Functions
2+
newfunction(:pick, :type => :rvalue, :doc => <<-EOS
3+
4+
This function is similar to a coalesce function in SQL in that it will return
5+
the first value in a list of values that is not undefined or an empty string
6+
(two things in Puppet that will return a boolean false value). Typically,
7+
this function is used to check for a value in the Puppet Dashboard/Enterprise
8+
Console, and failover to a default value like the following:
9+
10+
$real_jenkins_version = pick($::jenkins_version, '1.449')
11+
12+
The value of $real_jenkins_version will first look for a top-scope variable
13+
called 'jenkins_version' (note that parameters set in the Puppet Dashboard/
14+
Enterprise Console are brought into Puppet as top-scope variables), and,
15+
failing that, will use a default value of 1.449.
16+
17+
EOS
18+
) do |args|
19+
args = args.compact
20+
args.delete(:undef)
21+
args.delete(:undefined)
22+
args.delete("")
23+
if args[0].to_s.empty? then
24+
fail "Must provide non empty value."
25+
else
26+
return args[0]
27+
end
28+
end
29+
end
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/usr/bin/env ruby -S rspec
2+
require 'spec_helper'
3+
4+
describe "the pick function" do
5+
let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6+
7+
it "should exist" do
8+
Puppet::Parser::Functions.function("pick").should == "function_pick"
9+
end
10+
11+
it 'should return the correct value' do
12+
scope.function_pick(['first', 'second']).should == 'first'
13+
end
14+
15+
it 'should return the correct value if the first value is empty' do
16+
scope.function_pick(['', 'second']).should == 'second'
17+
end
18+
19+
it 'should remove empty string values' do
20+
scope.function_pick(['', 'first']).should == 'first'
21+
end
22+
23+
it 'should remove :undef values' do
24+
scope.function_pick([:undef, 'first']).should == 'first'
25+
end
26+
27+
it 'should remove :undefined values' do
28+
scope.function_pick([:undefined, 'first']).should == 'first'
29+
end
30+
31+
it 'should error if no values are passed' do
32+
expect { scope.function_pick([]) }.to raise_error(Puppet::Error, /Must provide non empty value./)
33+
end
34+
end

0 commit comments

Comments
 (0)