From c8e111110a1cedd01c27e80cb816dea8a5cda110 Mon Sep 17 00:00:00 2001 From: jordanbreen28 Date: Wed, 24 Jan 2024 14:04:56 +0000 Subject: [PATCH] (feat) - Add merge_facts option This commit adds an option to the add_custom_fact method, which allows the user to specify whether they wish to deep_merge facts. This allows the user to determine whether they wish to completely overwrite a fact, or simply merge values into the existing fact in a given fact hash. --- README.md | 22 ++++++++++++++++++++++ lib/rspec-puppet-facts.rb | 4 ++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3f177212..4ae77878 100644 --- a/README.md +++ b/README.md @@ -443,6 +443,28 @@ To do this, pass a lambda as the value for the custom fact. The lambda is passed add_custom_fact :root_home, lambda { |os,facts| "/tmp/#{facts['hostname']}" } ``` +#### Merge into existing facts + +You can also supply an optional input `:merge_facts` to the `add_custom_fact` method. + +This allows you to merge facts values into a fact, if the fact is already present in the facts hash as oppose to overwriting the fact value. + +```ruby +add_custom_fact :identity, { 'user' => 'test_user' }, :merge_facts => true +``` + +Will result in a hash of the identity fact like the below: + +```ruby +{ + "gid"=>0, + "group"=>"root", + "privileged"=>true, + "uid"=>0, + "user"=>"test_user" +} +``` + ### Supplying Custom External Facts through FacterDB Rspec-puppet-facts uses a gem called facterdb that contains many fact sets of various combinations that are pre generated. Rspec-puppet-facts queries facterdb to pull out a specific fact set to use when testing. diff --git a/lib/rspec-puppet-facts.rb b/lib/rspec-puppet-facts.rb index faa77a6f..be6a6f1d 100644 --- a/lib/rspec-puppet-facts.rb +++ b/lib/rspec-puppet-facts.rb @@ -233,9 +233,9 @@ def self.with_custom_facts(os, facts) value = fact[:value].respond_to?(:call) ? fact[:value].call(os, facts) : fact[:value] # if merge_facts passed, merge supplied facts into facts hash if fact[:options][:merge_facts] - facts = facts.deep_merge!({key => value}) + facts.deep_merge!({name => value}) else - facts[key] = value + facts[name] = value end end