Skip to content

Commit e0428ac

Browse files
Merge pull request #2085 from Filipovici-Andrei/FACT-2319
(FACT-2319) Added debugonce method
2 parents fe98e99 + 4849218 commit e0428ac

4 files changed

Lines changed: 84 additions & 19 deletions

File tree

lib/facter.rb

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class ResolveCustomFactError < StandardError; end
1313
Options.init
1414
Log.output(STDOUT)
1515
@already_searched = {}
16+
@debug_once = []
1617

1718
class << self
1819
def clear_messages
@@ -54,6 +55,7 @@ def add(name, options = {}, &block)
5455
# @api public
5556
def clear
5657
@already_searched = {}
58+
@debug_once = []
5759
LegacyFacter.clear
5860
Options[:custom_dir] = []
5961
LegacyFacter.collection.invalidate_custom_facts
@@ -68,16 +70,33 @@ def core_value(user_query)
6870
fact_collection.dig(*splitted_user_query)
6971
end
7072

71-
# Prints out a debug message when debug option is set to true
72-
# @param msg [String] Message to be printed out
73+
# Logs debug message when debug option is set to true
74+
# @param message [Object] Message object to be logged
7375
#
7476
# @return [nil]
7577
#
7678
# @api public
77-
def debug(msg)
79+
def debug(message)
7880
return unless debugging?
7981

80-
logger.debug(msg)
82+
logger.debug(message.to_s)
83+
nil
84+
end
85+
86+
# Logs the same debug message only once when debug option is set to true
87+
# @param message [Object] Message object to be logged
88+
#
89+
# @return [nil]
90+
#
91+
# @api public
92+
def debugonce(message)
93+
return unless debugging?
94+
95+
message_string = message.to_s
96+
return if @debug_once.include? message_string
97+
98+
@debug_once << message_string
99+
logger.debug(message_string)
81100
nil
82101
end
83102

lib/facter/framework/logging/logger.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,7 @@ def initialize(logged_class)
6060
def debug(msg)
6161
return unless debugging_active?
6262

63-
if msg.nil? || msg.empty?
64-
empty_message_error(msg)
65-
elsif @@message_callback
63+
if @@message_callback
6664
@@message_callback.call(:debug, msg)
6765
else
6866
msg = colorize(msg, CYAN) if Options[:color]

spec/facter/facter_spec.rb

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,4 +380,64 @@ def mock_collection(method, os_name = nil, error = nil)
380380
end
381381
end
382382
end
383+
384+
describe '#debugonce' do
385+
context 'when debugging is active' do
386+
before do
387+
allow(logger).to receive(:debug)
388+
Facter.debugging(true)
389+
end
390+
391+
after do
392+
Facter.debugging(false)
393+
end
394+
395+
it 'calls logger with the debug message' do
396+
message = 'Some error message'
397+
398+
Facter.debugonce(message)
399+
400+
expect(logger).to have_received(:debug).with(message)
401+
end
402+
403+
it 'writes the same debug message only once' do
404+
message = 'Some error message'
405+
406+
Facter.debugonce(message)
407+
Facter.debugonce(message)
408+
409+
expect(logger).to have_received(:debug).once.with(message)
410+
end
411+
412+
it 'writes empty message when message is nil' do
413+
Facter.debugonce(nil)
414+
415+
expect(logger).to have_received(:debug).with('')
416+
end
417+
418+
it 'when message is a hash' do
419+
Facter.debugonce({ warn: 'message' })
420+
421+
expect(logger).to have_received(:debug).with('{:warn=>"message"}')
422+
end
423+
424+
it 'returns nil' do
425+
result = Facter.debugonce({ warn: 'message' })
426+
427+
expect(result).to be_nil
428+
end
429+
end
430+
end
431+
432+
context 'when debugging is inactive' do
433+
before do
434+
allow(logger).to receive(:debug)
435+
end
436+
437+
it 'does not call the logger' do
438+
Facter.debugonce('message')
439+
440+
expect(logger).not_to have_received(:debug)
441+
end
442+
end
383443
end

spec/framework/logging/logger_spec.rb

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,6 @@
2929
end
3030
end
3131

32-
it 'logs a warn if message is nil' do
33-
log.debug(nil)
34-
35-
expect(multi_logger_double).to have_received(:warn).with(/debug invoked with invalid message/)
36-
end
37-
38-
it 'logs a warn if message is empty' do
39-
log.debug('')
40-
41-
expect(multi_logger_double).to have_received(:warn).with(/debug invoked with invalid message/)
42-
end
43-
4432
shared_examples 'writes debug message' do
4533
it 'calls debug on multi_logger' do
4634
log.debug('debug_message')

0 commit comments

Comments
 (0)