diff --git a/.gitignore b/.gitignore index 9195cfa..f7d9325 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +# Application +logs/ + +# General *.gem *.rbc /.config diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..8f13a2e --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,5 @@ +Metrics/BlockLength: + Exclude: + # - 'Rakefile' + - '**/*.rake' + - 'test/**/*.rb' diff --git a/.ruby-version b/.ruby-version index 6bf7c6f..76521af 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -ruby-2.5.1 +ruby-2.2.0 diff --git a/.travis.yml b/.travis.yml index c0f28be..c9bb237 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: ruby rvm: - 2.5.1 + - 2.2.0 before_install: - gem install bundler -v 1.16.1 diff --git a/Rakefile b/Rakefile index 64e5aa4..c61e056 100644 --- a/Rakefile +++ b/Rakefile @@ -72,13 +72,16 @@ Rake::TestTask.new do |t| t.verbose = true end -namespace :loop do +namespace :loop do # rubocop:disable Metrics/BlockLength def looper? puts "Checking for 'fswatch' to monitor files".blue has_fswatch = !`which fswatch`.empty? - abort('fswatch is NOT installed. Visit https://github.com/emcrisostomo/fswatch'.bright.red) unless has_fswatch + unless has_fswatch + abort('fswatch is NOT installed. Visit https://github.com/emcrisostomo/fswatch'.bright.red) + end + puts('fswatch is installed.'.bright.green) if has_fswatch end @@ -90,7 +93,8 @@ namespace :loop do 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/, logs/, .yardoc/, and gems created.'\ + 'Watches every 1 seconds' desc 'Repeatedly installs the gem on file changes' task :install do diff --git a/bin/vidazing_logger b/bin/vidazing_logger index 0a800cc..c211d6e 100755 --- a/bin/vidazing_logger +++ b/bin/vidazing_logger @@ -6,39 +6,51 @@ require 'vidazing_logger' require 'optparse' require 'ostruct' +# Handles command line options for the vidazing_logger binary. +# See `vidazing_logger --help` +# +# @since 0.1.0 class VidazingOptions - LEVEL_ALIASES = { 'd' => 'debug', 'i' => 'info', 'w' => 'warn', 'e' => 'error', 'f' => 'fatal' }.freeze + attr_reader :level, :clean - def self.parse(args) - options = OpenStruct.new - options.level = 'info' - options.clean = false + def initialize + @level = 'info' + @clean = false + @options_parser = create_options_parser + end - options_parser = OptionParser.new do |opts| + def create_options_parser # rubocop:disable Metrics/MethodLength + OptionParser.new do |opts| opts.banner = 'Usage: vidazing_logger [options] "Message"' opts.separator '' opts.separator 'Specific options:' - level_list = LEVEL_ALIASES.flatten.join(',') - opts.on('-l', '--level LEVEL', LEVEL_ALIASES.values, LEVEL_ALIASES, 'Select log level', - " (#{level_list})") do |level| - options.level = level + level_aliases = { 'd' => 'debug', 'i' => 'info', 'w' => 'warn', + 'e' => 'error', 'f' => 'fatal' }.freeze + level_list = level_aliases.flatten.join(',') + + opts.on('-l', '--level LEVEL', level_aliases.values, level_aliases, + 'Select log level', " (#{level_list})") do |level| + + @level = level end opts.on_tail('-c', '--clean', 'Remove the logs/ directory') do - options.clean = true + @clean = true end end + end - options_parser.parse!(args) - options + def parse(args) + @options_parser.parse!(args) end end -options = VidazingOptions.parse(ARGV) +vidazing_options = VidazingOptions.new +vidazing_options.parse(ARGV) -if options.clean +if vidazing_options.clean puts 'Cleaning the logs/ directory' VidazingLogger.clean end @@ -47,5 +59,5 @@ unless ARGV.empty? message = ARGV.join(' ') log = VidazingLogger.logger - log.public_send(options.level, message) + log.public_send(vidazing_options.level, message) end diff --git a/lib/vidazing_logger/appenders/stderr.rb b/lib/vidazing_logger/appenders/stderr.rb index edb5889..fb5d8a8 100644 --- a/lib/vidazing_logger/appenders/stderr.rb +++ b/lib/vidazing_logger/appenders/stderr.rb @@ -4,58 +4,60 @@ # Determines how to log messages. Attaches to Logging.logger # @api private -module VidazingLogger::Appenders - # Appender writing to STDERR and 'logs/error.log' - # @api private - module Stderr - class << self - 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 +module VidazingLogger + module Appenders + # Appender writing to STDERR and 'logs/error.log' + # @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 - APPENDER_STDERR = 'STDERR' - def stderr_appender - Logging.appenders.stderr \ - APPENDER_STDERR, - layout: readable_error_layout_pattern, - level: :error - end + def error_log_appender(log_dir) + error_log_path = "#{log_dir}/error.log" + + appender_error_log = error_log_path + Logging.appenders.rolling_file \ + appender_error_log, + layout: readable_error_layout_pattern, + age: 'daily', + keep: 7, + level: :error + + Logging.appenders[appender_error_log] + end + + private - def error_log_appender(log_dir) - error_log_path = "#{log_dir}/error.log" + # ----- BUILD STDERR + LOG ----- - appender_error_log = error_log_path - Logging.appenders.rolling_file \ - appender_error_log, - layout: readable_error_layout_pattern, - age: 'daily', - keep: 7, - level: :error + # 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 + ) - Logging.appenders[appender_error_log] + 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 end end end diff --git a/lib/vidazing_logger/appenders/stdout.rb b/lib/vidazing_logger/appenders/stdout.rb index 0b96760..da60282 100644 --- a/lib/vidazing_logger/appenders/stdout.rb +++ b/lib/vidazing_logger/appenders/stdout.rb @@ -2,67 +2,69 @@ require 'logging' -module VidazingLogger::Appenders - # Appender writing to STDOUT and 'logs/build.log' - # @api private - module Stdout - class << self - private +module VidazingLogger + module Appenders + # Appender writing to STDOUT and 'logs/build.log' + # @api private + module Stdout + class << self + APPENDER_STDOUT = 'STDOUT' + def stdout_appender + Logging.appenders.stdout \ + APPENDER_STDOUT, + layout: readable_layout_pattern, + filters: stdout_levels - #----- BUILD STDOUT + LOG ----- + Logging.appenders[APPENDER_STDOUT] + end - # 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 build_log_appender(log_dir) + build_log_path = "#{log_dir}/build.log" - 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 + appender_build_log = build_log_path + Logging.appenders.rolling_file \ + appender_build_log, + layout: readable_layout_pattern, + age: 'daily', + keep: 7, + filters: stdout_levels - def stdout_levels - Logging::Filters::Level.new \ - :debug, - :info, - :warn - end + Logging.appenders[appender_build_log] + end - APPENDER_STDOUT = 'STDOUT' - def stdout_appender - Logging.appenders.stdout \ - APPENDER_STDOUT, - layout: readable_layout_pattern, - filters: stdout_levels + private - Logging.appenders[APPENDER_STDOUT] - end + #----- BUILD STDOUT + LOG ----- - def build_log_appender(log_dir) - build_log_path = "#{log_dir}/build.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 + ) - appender_build_log = build_log_path - Logging.appenders.rolling_file \ - appender_build_log, - layout: readable_layout_pattern, - age: 'daily', - keep: 7, - filters: stdout_levels + 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 - Logging.appenders[appender_build_log] + def stdout_levels + Logging::Filters::Level.new \ + :debug, + :info, + :warn + end end end end diff --git a/test/test_vidazing_logger.rb b/test/test_vidazing_logger.rb index aa0f7fd..30bd3d5 100644 --- a/test/test_vidazing_logger.rb +++ b/test/test_vidazing_logger.rb @@ -32,23 +32,3 @@ def teardown FileUtils.rm_rf(LOG_DIR) end end - -# describe Thing do -# describe '.add_task' do -# let(:repo) { Thing.repo } - -# it 'adds a new task' do -# expect { Thing.add_task('speak @ Guru-SP') }.to change{ repo.count }.by(1) -# end - -# context 'when title is blank' do -# subject(:add_blank_task) { Thing.add_task('') } - -# it 'does not persist' do -# expect { add_blank_task }.to_not change{ repo.count } -# end - -# it { eq(false) } -# end -# end -# end diff --git a/vidazing_logger.gemspec b/vidazing_logger.gemspec index e8a1c5a..88aa8a9 100644 --- a/vidazing_logger.gemspec +++ b/vidazing_logger.gemspec @@ -3,7 +3,7 @@ $LOAD_PATH.push File.expand_path('lib', __dir__) require 'vidazing_logger/version' -Gem::Specification.new do |s| +Gem::Specification.new do |s| # rubocop:disable Metrics/BlockLength s.name = 'vidazing_logger' s.version = VidazingLogger::VERSION s.platform = Gem::Platform::RUBY @@ -15,11 +15,11 @@ Gem::Specification.new do |s| s.executables << 'vidazing_logger' s.rubygems_version = '2.5.2' - s.required_ruby_version = '>= 1.9.3' + s.required_ruby_version = '>= 2.2.0' - s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec)/}) } + s.files = `git ls-files -z`.split("\x0").reject \ + { |f| f.match(%r{^(test|spec)/}) } s.require_paths = ['lib'] - # s.test_files = ["test/test_vidazing_logger.rb"] s.add_runtime_dependency('logging', '2.2.2')