Skip to content

Commit

Permalink
Merge pull request #2699 from mhashizume/FACT-3156/main/confine-lower…
Browse files Browse the repository at this point in the history
…case

Evaluate confine block in case-insensitive way
  • Loading branch information
tvpartytonight authored Apr 5, 2024
2 parents 8b77e6f + 0445f28 commit 06fa306
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
6 changes: 4 additions & 2 deletions lib/facter/custom_facts/util/confine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def to_s
end

# Evaluate the fact, returning true or false.
# if we have a block paramter then we only evaluate that instead
# if we have a block parameter then we only evaluate that instead
def true?
if @block && !@fact
begin
Expand All @@ -54,9 +54,11 @@ def true?

return false if value.nil?

# We call the block with both the downcased and raw fact value for
# backwards-compatibility.
if @block
begin
return !!@block.call(value)
return !@block.call(value).nil? || !@block.call(fact.value).nil?
rescue StandardError => e
log.debug "Confine raised #{e.class} #{e}"
return false
Expand Down
6 changes: 6 additions & 0 deletions spec/custom_facts/util/confine_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,12 @@ def confined(fact_value, *confines)
expect(confine.true?).to be true
end

it 'accepts and evaluate a block argument against the fact while respecting case' do
allow(fact).to receive(:value).and_return 'Foo'
confine = LegacyFacter::Util::Confine.new(:yay) { |f| f == 'Foo' }
expect(confine.true?).to be true
end

it 'returns false if the block raises a StandardError when checking a fact' do
allow(fact).to receive(:value).and_return 'foo'
confine = LegacyFacter::Util::Confine.new(:yay) { |_f| raise StandardError }
Expand Down

0 comments on commit 06fa306

Please sign in to comment.