diff --git a/lib/jekyll.rb b/lib/jekyll.rb index b8e65c00..b79880f2 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -21,6 +21,7 @@ require 'time' require 'safe_yaml/load' require 'English' require 'pathname' +require 'logger' # 3rd party require 'liquid' @@ -31,7 +32,7 @@ require 'toml' # internal requires require 'jekyll/version' require 'jekyll/utils' -require 'jekyll/log_writer' +require 'jekyll/log_adapter' require 'jekyll/stevenson' require 'jekyll/deprecator' require 'jekyll/configuration' @@ -116,11 +117,11 @@ module Jekyll end def self.logger - @logger ||= LogWriter.new(Stevenson.new) + @logger ||= LogAdapter.new(Stevenson.new) end def self.logger=(writer) - @logger = LogWriter.new(writer) + @logger = LogAdapter.new(writer) end # Public: File system root diff --git a/lib/jekyll/log_writer.rb b/lib/jekyll/log_adapter.rb similarity index 92% rename from lib/jekyll/log_writer.rb rename to lib/jekyll/log_adapter.rb index c9320585..5c4fb952 100644 --- a/lib/jekyll/log_writer.rb +++ b/lib/jekyll/log_adapter.rb @@ -1,6 +1,6 @@ require 'logger' module Jekyll - class LogWriter + class LogAdapter attr_reader :writer LOG_LEVELS = { @@ -57,7 +57,7 @@ module Jekyll # # Returns nothing def warn(topic, message = nil) - writer.warn(message(topic, message).yellow) + writer.warn(message(topic, message)) end # Public: Print a jekyll error message @@ -67,7 +67,7 @@ module Jekyll # # Returns nothing def error(topic, message = nil) - writer.error(message(topic, message).red) + writer.error(message(topic, message)) end # Public: Print a Jekyll error message and immediately abort the process @@ -81,7 +81,9 @@ module Jekyll abort end - # Public: Build a Jekyll topic method + private + + # Internal: Build a Jekyll topic method # # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # message - the message detail @@ -91,7 +93,7 @@ module Jekyll formatted_topic(topic) + message.to_s.gsub(/\s+/, ' ') end - # Public: Format the topic + # Internal: Format the topic # # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # diff --git a/lib/jekyll/stevenson.rb b/lib/jekyll/stevenson.rb index f940fa4a..9a9f412e 100644 --- a/lib/jekyll/stevenson.rb +++ b/lib/jekyll/stevenson.rb @@ -1,4 +1,3 @@ -require 'logger' module Jekyll class Stevenson < ::Logger def initialize @@ -32,6 +31,16 @@ module Jekyll true end + # Log a +WARN+ message + def warn(progname = nil, &block) + add(WARN, nil, progname.yellow, &block) + end + + # Log an +ERROR+ message + def error(progname = nil, &block) + add(ERROR, nil, progname.red, &block) + end + def close # No LogDevice in use end diff --git a/test/test_log_adapter.rb b/test/test_log_adapter.rb new file mode 100644 index 00000000..3dd3465e --- /dev/null +++ b/test/test_log_adapter.rb @@ -0,0 +1,59 @@ +require 'helper' + +class TestLogAdapter < Test::Unit::TestCase + class LoggerDouble + attr_accessor :level + end + + context "#log_level=" do + should "set the writers logging level" do + subject = Jekyll::LogAdapter.new(LoggerDouble.new) + subject.log_level = :error + assert_equal Jekyll::LogAdapter::LOG_LEVELS[:error], subject.writer.level + end + end + + context "#debug" do + should "call #debug on writer return true" do + writer = LoggerDouble.new + logger = Jekyll::LogAdapter.new(writer) + stub(writer).debug('topic '.rjust(20) + 'log message') { true } + assert logger.debug('topic', 'log message') + end + end + + context "#info" do + should "call #info on writer return true" do + writer = LoggerDouble.new + logger = Jekyll::LogAdapter.new(writer) + stub(writer).info('topic '.rjust(20) + 'log message') { true } + assert logger.info('topic', 'log message') + end + end + + context "#warn" do + should "call #warn on writer return true" do + writer = LoggerDouble.new + logger = Jekyll::LogAdapter.new(writer) + stub(writer).warn('topic '.rjust(20) + 'log message') { true } + assert logger.warn('topic', 'log message') + end + end + + context "#error" do + should "call #error on writer return true" do + writer = LoggerDouble.new + logger = Jekyll::LogAdapter.new(writer) + stub(writer).error('topic '.rjust(20) + 'log message') { true } + assert logger.error('topic', 'log message') + end + end + + context "#abort_with" do + should "call #error and abort" do + logger = Jekyll::LogAdapter.new(LoggerDouble.new) + stub(logger).error('topic', 'log message') { true } + assert_raise(SystemExit) { logger.abort_with('topic', 'log message') } + end + end +end