Skip to content

Commit

Permalink
Refactored after adding dev:quality checks to improve code quality.
Browse files Browse the repository at this point in the history
Appenders are now split up into their own class in appenders. Easier to
reason about.
  • Loading branch information
VidaZing committed Aug 27, 2018
1 parent 37501fc commit 8e0afc6
Show file tree
Hide file tree
Showing 12 changed files with 245 additions and 122 deletions.
31 changes: 20 additions & 11 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,31 @@ namespace :loop do # rubocop:disable Metrics/BlockLength
end

def looping(cmd)
fswatch_cmd = 'fswatch -0 -e .git/ -e *.gem -e logs -e .yardoc -l 1 .'
exclude = '-e Gemfile.lock -e .git/ -e *.gem -e logs -e .yardoc -e bundle/'
fswatch_cmd = "fswatch -0 #{exclude} -l 1 ."

xargs_cmd = "xargs -0 -I {} sh -c \"echo 'File: {}' && %s\""
looping_cmd = "#{fswatch_cmd} | #{xargs_cmd}"

looping_cmd = "#{fswatch_cmd} | #{xargs_cmd}"
system format(looping_cmd.to_s, cmd)
end

IGNORED_MESSAGE = 'Ignores .git/, logs/, .yardoc/, and gems created.'\
'Watches every 1 seconds'
IGNORED_MESSAGE = 'Ignores .git/, Gemfile.lock, logs/, .yardoc/, bundle/, '\
'and gems created. Watches every 1 seconds'

desc 'Repeatedly see dev:quality on file changes'
task :"dev:quality" do
looper?
puts "Analyzing dev:quality on file changes. #{IGNORED_MESSAGE}".blue
looping('rake dev:quality')
end

desc 'Repeatedly show documentation coverage on file changes'
task :"doc:coverage" do
looper?
puts "Showing undocumented code on file changes. #{IGNORED_MESSAGE}".blue
looping('rake doc:coverage')
end

desc 'Repeatedly installs the gem on file changes'
task :install do
Expand All @@ -123,13 +139,6 @@ namespace :loop do # rubocop:disable Metrics/BlockLength
puts "Running tests on file changes. #{IGNORED_MESSAGE}".blue
looping('rake test')
end

desc 'Repeatedly show documentation coverage on file changes'
task :"doc:coverage" do
looper?
puts "Showing undocumented code on file changes. #{IGNORED_MESSAGE}".blue
looping('rake doc:coverage')
end
end

Coveralls::RakeTask.new
16 changes: 12 additions & 4 deletions lib/vidazing_logger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

require 'vidazing_logger/version'
require 'vidazing_logger/appenders/stdout'
require 'vidazing_logger/appenders/build_log'
require 'vidazing_logger/appenders/stderr'
require 'vidazing_logger/appenders/error_log'

require 'logging'

Expand Down Expand Up @@ -34,12 +36,18 @@ def clean
def logger(name = 'VidaZing')
VidazingLogger.initialize

stdout = VidazingLogger::Appenders::Stdout.new
build_log = VidazingLogger::Appenders::BuildLog.new(LOG_DIR)

stderr = VidazingLogger::Appenders::Stderr.new
error_log = VidazingLogger::Appenders::ErrorLog.new(LOG_DIR)

log = Logging.logger[name]
log.add_appenders \
VidazingLogger::Appenders::Stdout.stdout_appender,
VidazingLogger::Appenders::Stdout.build_log_appender(LOG_DIR),
VidazingLogger::Appenders::Stderr.stderr_appender,
VidazingLogger::Appenders::Stderr.error_log_appender(LOG_DIR)
stdout.appender,
build_log.appender,
stderr.appender,
error_log.appender

log
end
Expand Down
13 changes: 13 additions & 0 deletions lib/vidazing_logger/appenders.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal: true

require 'logging'

module VidazingLogger
# Base Appender for logging
# Determines how to log messages. Attaches to Logging.logger
#
# @api private
module Appenders

end
end
36 changes: 36 additions & 0 deletions lib/vidazing_logger/appenders/build_log.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# frozen_string_literal: true

require 'vidazing_logger/color_scheme'
require 'vidazing_logger/filters/normal'
require 'vidazing_logger/appenders'
require 'logging'

module VidazingLogger
module Appenders
# Appender writing to 'logs/build.log'
#
# @api private
class BuildLog
attr_reader :appender

def initialize(log_dir)
build_log_path = "#{log_dir}/build.log"

color_scheme_name = 'vidazing_stdout'
VidazingLogger::ColorScheme.create(color_scheme_name, date_color: :blue)

build_log_appender_name = build_log_path
@appender =Logging.appenders.rolling_file \
build_log_appender_name,
layout: VidazingLogger::LayoutPattern.new(color_scheme_name).layout,
age: 'daily',
keep: 7,
filters: VidazingLogger::Filters::Normal.new.filter

Logging.appenders[build_log_appender_name]
end

end
end
end

36 changes: 36 additions & 0 deletions lib/vidazing_logger/appenders/error_log.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# frozen_string_literal: true

require 'vidazing_logger/color_scheme'
require 'vidazing_logger/filters/error'
require 'vidazing_logger/appenders'
require 'logging'

module VidazingLogger
module Appenders
# Appender writing to 'logs/error.log'
#
# @api private
class ErrorLog
attr_reader :appender

def initialize(log_dir)
error_log_path = "#{log_dir}/error.log"

color_scheme_name = 'vidazing_stderr'
VidazingLogger::ColorScheme.create(color_scheme_name, date_color: :red)

error_log_appender_name = error_log_path
@appender =Logging.appenders.rolling_file \
error_log_appender_name,
layout: VidazingLogger::LayoutPattern.new(color_scheme_name).layout,
age: 'daily',
keep: 7,
filters: VidazingLogger::Filters::Error.new.filter

Logging.appenders[error_log_appender_name]
end

end
end
end

67 changes: 17 additions & 50 deletions lib/vidazing_logger/appenders/stderr.rb
Original file line number Diff line number Diff line change
@@ -1,64 +1,31 @@
# frozen_string_literal: true

require 'vidazing_logger/filters/error'
require 'vidazing_logger/color_scheme'
require 'vidazing_logger/appenders'
require 'logging'

# Determines how to log messages. Attaches to Logging.logger
# @api private
module VidazingLogger
module Appenders
# Appender writing to STDERR and 'logs/error.log'
# Appender writing to STDERR
#
# @api private
module Stderr
class << self
APPENDER_STDERR = 'STDERR'
def stderr_appender
Logging.appenders.stderr \
APPENDER_STDERR,
layout: readable_error_layout_pattern,
level: :error
end
class Stderr
attr_reader :appender

def error_log_appender(log_dir)
error_log_path = "#{log_dir}/error.log"
def initialize
color_scheme_name = 'vidazing_stderr'
VidazingLogger::ColorScheme.create(color_scheme_name, date_color: :red)

appender_error_log = error_log_path
Logging.appenders.rolling_file \
appender_error_log,
layout: readable_error_layout_pattern,
age: 'daily',
keep: 7,
level: :error
stderr_appender_name = "STDERR"
@appender = Logging.appenders.stderr \
stderr_appender_name,
layout: VidazingLogger::LayoutPattern.new(color_scheme_name).layout,
filters: VidazingLogger::Filters::Error.new.filter

Logging.appenders[appender_error_log]
end

private

# ----- BUILD STDERR + LOG -----

# Logging holds the color scheme reference
ERROR_LOG_COLOR_SCHEME = 'bright_error'
Logging.color_scheme(
ERROR_LOG_COLOR_SCHEME,
levels: {
info: :green,
warn: :yellow,
error: :red,
fatal: %i[white on_red]
},
date: :red,
logger: :cyan,
message: :magenta
)

def readable_error_layout_pattern
Logging.layouts.pattern \
pattern: '[%d] %-5l %c: %m\n',
# ISO8601 without the 'T'
date_pattern: '%Y-%m-%d %H:%M:%S',
color_scheme: ERROR_LOG_COLOR_SCHEME
end
Logging.appenders[stderr_appender_name]
end

end
end
end
75 changes: 18 additions & 57 deletions lib/vidazing_logger/appenders/stdout.rb
Original file line number Diff line number Diff line change
@@ -1,71 +1,32 @@
# frozen_string_literal: true

require 'vidazing_logger/color_scheme'
require 'vidazing_logger/filters/normal'
require 'vidazing_logger/layout'
require 'vidazing_logger/appenders'
require 'logging'

module VidazingLogger
module Appenders
# Appender writing to STDOUT and 'logs/build.log'
# Appender writing to STDOUT
#
# @api private
module Stdout
class << self
APPENDER_STDOUT = 'STDOUT'
def stdout_appender
Logging.appenders.stdout \
APPENDER_STDOUT,
layout: readable_layout_pattern,
filters: stdout_levels
class Stdout
attr_reader :appender

Logging.appenders[APPENDER_STDOUT]
end
def initialize
color_scheme_name = 'vidazing_stdout'
VidazingLogger::ColorScheme.create(color_scheme_name, date_color: :blue)

def build_log_appender(log_dir)
build_log_path = "#{log_dir}/build.log"
stdout_appender_name = 'STDOUT'
@appender =Logging.appenders.stdout \
stdout_appender_name,
layout: VidazingLogger::LayoutPattern.new(color_scheme_name).layout,
filters: VidazingLogger::Filters::Normal.new.filter

appender_build_log = build_log_path
Logging.appenders.rolling_file \
appender_build_log,
layout: readable_layout_pattern,
age: 'daily',
keep: 7,
filters: stdout_levels

Logging.appenders[appender_build_log]
end

private

#----- BUILD STDOUT + LOG -----

# Logging holds the color scheme reference
LOG_COLOR_SCHEME = 'bright'
Logging.color_scheme(
LOG_COLOR_SCHEME,
levels: {
info: :green,
warn: :yellow,
error: :red,
fatal: %i[white on_red]
},
date: :blue,
logger: :cyan,
message: :magenta
)

def readable_layout_pattern
Logging.layouts.pattern \
pattern: '[%d] %-5l %c: %m\n',
# ISO8601 without the 'T'
date_pattern: '%Y-%m-%d %H:%M:%S',
color_scheme: LOG_COLOR_SCHEME
end

def stdout_levels
Logging::Filters::Level.new \
:debug,
:info,
:warn
end
Logging.appenders[stdout_appender_name]
end

end
end
end
27 changes: 27 additions & 0 deletions lib/vidazing_logger/color_scheme.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# frozen_string_literal: true

require 'logging'

module VidazingLogger
# Set logging colors
#
# @api private
module ColorScheme
def self.create(name, date_color:) # rubocop:disable Metrics/MethodLength, Metrics/LineLength
# Logging holds the color scheme reference
Logging.color_scheme(
name,
levels: {
info: :green,
warn: :yellow,
error: :red,
fatal: %i[white on_red]
},
date: date_color,
logger: :cyan,
message: :magenta
)
end
end
end

21 changes: 21 additions & 0 deletions lib/vidazing_logger/filters/error.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal: true

require 'logging'

module VidazingLogger
module Filters
# Filter for non error message
#
# @api private
class Error
attr_reader :filter

def initialize
@filter = Logging::Filters::Level.new \
:error,
:fatal
end

end
end
end

0 comments on commit 8e0afc6

Please sign in to comment.