From 332bb1a416ac61a2ecf742d81b16ce87f599c62d Mon Sep 17 00:00:00 2001 From: Thibault Jouan Date: Sat, 24 May 2014 20:07:57 +0000 Subject: [PATCH] Improve verbose mode output formatting --- features/cli/verbose.feature | 9 +++++++++ lib/producer/core.rb | 1 + lib/producer/core/env.rb | 12 +++++++++--- lib/producer/core/logger_formatter.rb | 9 +++++++++ spec/producer/core/env_spec.rb | 4 ++++ spec/producer/core/logger_formatter_spec.rb | 18 ++++++++++++++++++ 6 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 lib/producer/core/logger_formatter.rb create mode 100644 spec/producer/core/logger_formatter_spec.rb diff --git a/features/cli/verbose.feature b/features/cli/verbose.feature index a16ae88..0287e22 100644 --- a/features/cli/verbose.feature +++ b/features/cli/verbose.feature @@ -31,3 +31,12 @@ Feature: CLI verbose option """ When I successfully execute the recipe with option -v Then the output must match /say_hello.+ action: echo/ + + Scenario: formats message with our simple logger + Given a recipe with: + """ + task :say_hello do + end + """ + When I successfully execute the recipe with option -v + Then the output must match /\ATask:.+say_hello.*\n.*condition/ diff --git a/lib/producer/core.rb b/lib/producer/core.rb index 98fb8da..c32070c 100644 --- a/lib/producer/core.rb +++ b/lib/producer/core.rb @@ -28,6 +28,7 @@ require 'producer/core/condition' require 'producer/core/condition/dsl' require 'producer/core/env' require 'producer/core/errors' +require 'producer/core/logger_formatter' require 'producer/core/prompter' require 'producer/core/recipe' require 'producer/core/recipe/dsl' diff --git a/lib/producer/core/env.rb b/lib/producer/core/env.rb index f6604a4..08044b7 100644 --- a/lib/producer/core/env.rb +++ b/lib/producer/core/env.rb @@ -9,9 +9,6 @@ module Producer @output = output @registry = registry @remote = remote - @logger = Logger.new(output) - - self.log_level = Logger::ERROR end def remote @@ -26,6 +23,15 @@ module Producer @registry[key] = value end + def logger + @logger ||= begin + logger = Logger.new(output) + logger.level = Logger::ERROR + logger.formatter = LoggerFormatter.new + logger + end + end + def log(message) logger.info message end diff --git a/lib/producer/core/logger_formatter.rb b/lib/producer/core/logger_formatter.rb new file mode 100644 index 0000000..657165c --- /dev/null +++ b/lib/producer/core/logger_formatter.rb @@ -0,0 +1,9 @@ +module Producer + module Core + class LoggerFormatter < Logger::Formatter + def call(severity, datetime, progname, message) + message + "\n" + end + end + end +end diff --git a/spec/producer/core/env_spec.rb b/spec/producer/core/env_spec.rb index 1d33f55..08b6fb5 100644 --- a/spec/producer/core/env_spec.rb +++ b/spec/producer/core/env_spec.rb @@ -75,6 +75,10 @@ module Producer::Core it 'has a log level of ERROR' do expect(env.log_level).to eq Logger::ERROR end + + it 'uses our formatter' do + expect(env.logger.formatter).to be_a LoggerFormatter + end end describe '#remote' do diff --git a/spec/producer/core/logger_formatter_spec.rb b/spec/producer/core/logger_formatter_spec.rb new file mode 100644 index 0000000..110dc6b --- /dev/null +++ b/spec/producer/core/logger_formatter_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' + +module Producer::Core + describe LoggerFormatter do + describe '#call' do + let(:severity) { double 'severity' } + let(:datetime) { double 'datetime' } + let(:progname) { double 'progname' } + let(:message) { 'some message' } + + subject { described_class.new.call(severity, datetime, progname, message) } + + it 'returns the given message with a line separator' do + expect(subject).to eq "#{message}\n" + end + end + end +end