Module: Appydays::Loggable::SpecHelpers

Defined in:
lib/appydays/loggable/spec_helpers.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(context) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/appydays/loggable/spec_helpers.rb', line 6

def self.included(context)
  # Appydays::Loggable.ensure_stderr_appender

  context.around(:each) do |example|
    override_level = (example.[:log] || example.[:logging])
    if override_level
      orig_level = SemanticLogger.default_level
      SemanticLogger.default_level = override_level
    end
    example.run
    SemanticLogger.default_level = orig_level if override_level
  end

  context.before(:all) do
    Appydays::Loggable.set_default_level(:fatal, warning: false)
  end

  context.after(:all) do
    Appydays::Loggable.set_default_level(:fatal, warning: false)
  end

  super
end

Instance Method Details

#capture_logs_from(loggers, level: "debug", formatter: nil) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/appydays/loggable/spec_helpers.rb', line 30

def capture_logs_from(loggers, level: "debug", formatter: nil)
  (loggers = [loggers]) unless loggers.respond_to?(:to_ary)

  existing_appenders_and_lvls = SemanticLogger.appenders.map { |app| [app, app.level] }
  SemanticLogger.appenders.each { |app| app.level = :fatal }
  original_levels_and_loggers = loggers.map { |log| [log, log.level] }
  loggers.each { |log| log.level = level }

  io = StringIO.new
  appender = SemanticLogger.add_appender(io: io, level: level)
  appender.formatter = formatter if formatter
  begin
    yield
  ensure
    SemanticLogger.flush
    SemanticLogger.remove_appender(appender)
    original_levels_and_loggers.each { |(log, lvl)| log.level = lvl }
    existing_appenders_and_lvls.each { |(app, lvl)| app.level = lvl }
  end
  return io.string.lines
end