Refactor and simplify CLI and Env:
* Do not modify Env logger from CLI; * Add verbose attribute to Env; * Implement Env#verbose?; * Remove Env#log_level and Env#log_level=; * Refactor related specs, improve some wording.
This commit is contained in:
parent
0db2d90b72
commit
39427c35c3
@ -36,7 +36,7 @@ module Producer
|
|||||||
@arguments = arguments.inject([]) do |m, e|
|
@arguments = arguments.inject([]) do |m, e|
|
||||||
case e
|
case e
|
||||||
when '-v'
|
when '-v'
|
||||||
env.log_level = Logger::INFO
|
env.verbose = true
|
||||||
when '-n'
|
when '-n'
|
||||||
env.dry_run = true
|
env.dry_run = true
|
||||||
else
|
else
|
||||||
|
@ -2,14 +2,14 @@ module Producer
|
|||||||
module Core
|
module Core
|
||||||
class Env
|
class Env
|
||||||
attr_reader :input, :output, :registry, :logger
|
attr_reader :input, :output, :registry, :logger
|
||||||
attr_accessor :target, :dry_run
|
attr_accessor :target, :verbose, :dry_run
|
||||||
|
|
||||||
def initialize(input: $stdin, output: $stdout, remote: nil, registry: {})
|
def initialize(input: $stdin, output: $stdout, remote: nil, registry: {})
|
||||||
|
@verbose = @dry_run = false
|
||||||
@input = input
|
@input = input
|
||||||
@output = output
|
@output = output
|
||||||
@registry = registry
|
|
||||||
@remote = remote
|
@remote = remote
|
||||||
@dry_run = false
|
@registry = registry
|
||||||
end
|
end
|
||||||
|
|
||||||
def remote
|
def remote
|
||||||
@ -27,7 +27,7 @@ module Producer
|
|||||||
def logger
|
def logger
|
||||||
@logger ||= begin
|
@logger ||= begin
|
||||||
logger = Logger.new(output)
|
logger = Logger.new(output)
|
||||||
logger.level = Logger::ERROR
|
logger.level = verbose? ? Logger::INFO : Logger::ERROR
|
||||||
logger.formatter = LoggerFormatter.new
|
logger.formatter = LoggerFormatter.new
|
||||||
logger
|
logger
|
||||||
end
|
end
|
||||||
@ -37,12 +37,8 @@ module Producer
|
|||||||
logger.info message
|
logger.info message
|
||||||
end
|
end
|
||||||
|
|
||||||
def log_level
|
def verbose?
|
||||||
logger.level
|
@verbose
|
||||||
end
|
|
||||||
|
|
||||||
def log_level=(level)
|
|
||||||
logger.level = level
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def dry_run?
|
def dry_run?
|
||||||
|
@ -108,15 +108,15 @@ module Producer::Core
|
|||||||
end
|
end
|
||||||
|
|
||||||
context 'verbose' do
|
context 'verbose' do
|
||||||
it 'sets env logger level to INFO' do
|
it 'enables env verbose mode' do
|
||||||
expect(cli.env.log_level).to eq Logger::INFO
|
expect(cli.env).to be_verbose
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'dry run' do
|
context 'dry run' do
|
||||||
let(:options) { %w[-n] }
|
let(:options) { %w[-n] }
|
||||||
|
|
||||||
it 'enables env dry run' do
|
it 'enables env dry run mode' do
|
||||||
expect(cli.env).to be_dry_run
|
expect(cli.env).to be_dry_run
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -3,10 +3,10 @@ require 'spec_helper'
|
|||||||
module Producer::Core
|
module Producer::Core
|
||||||
describe Env do
|
describe Env do
|
||||||
let(:output) { StringIO.new }
|
let(:output) { StringIO.new }
|
||||||
subject(:env) { Env.new(output: output) }
|
subject(:env) { described_class.new(output: output) }
|
||||||
|
|
||||||
describe '#initialize' do
|
describe '#initialize' do
|
||||||
it 'assigns $stdin as the default output' do
|
it 'assigns $stdin as the default input' do
|
||||||
expect(env.input).to be $stdin
|
expect(env.input).to be $stdin
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -18,12 +18,16 @@ module Producer::Core
|
|||||||
expect(env.registry).to be_empty
|
expect(env.registry).to be_empty
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'assigns verbose as false' do
|
||||||
|
expect(env.verbose).to be false
|
||||||
|
end
|
||||||
|
|
||||||
it 'assigns dry run as false' do
|
it 'assigns dry run as false' do
|
||||||
expect(env.dry_run).to be false
|
expect(env.dry_run).to be false
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when output is not given as argument' do
|
context 'when output is not given as argument' do
|
||||||
subject(:env) { Env.new }
|
subject(:env) { described_class.new }
|
||||||
|
|
||||||
it 'assigns $stdout as the default output' do
|
it 'assigns $stdout as the default output' do
|
||||||
expect(env.output).to be $stdout
|
expect(env.output).to be $stdout
|
||||||
@ -60,31 +64,12 @@ module Producer::Core
|
|||||||
describe '#target' do
|
describe '#target' do
|
||||||
let(:target) { double 'target' }
|
let(:target) { double 'target' }
|
||||||
|
|
||||||
it 'returns the defined target' do
|
it 'returns the assigned target' do
|
||||||
env.target = target
|
env.target = target
|
||||||
expect(env.target).to be target
|
expect(env.target).to be target
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#logger' do
|
|
||||||
it 'returns a logger' do
|
|
||||||
expect(env.logger).to be_a Logger
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'uses env output' do
|
|
||||||
env.logger.error 'some message'
|
|
||||||
expect(output.string).to include 'some message'
|
|
||||||
end
|
|
||||||
|
|
||||||
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
|
describe '#remote' do
|
||||||
it 'builds a Remote with the current target' do
|
it 'builds a Remote with the current target' do
|
||||||
env.target = 'some_hostname.example'
|
env.target = 'some_hostname.example'
|
||||||
@ -118,6 +103,33 @@ module Producer::Core
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#logger' do
|
||||||
|
it 'returns a logger' do
|
||||||
|
expect(env.logger).to be_a Logger
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'uses env output' do
|
||||||
|
env.logger.error 'some message'
|
||||||
|
expect(output.string).to include 'some message'
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has a log level of ERROR' do
|
||||||
|
expect(env.logger.level).to eq Logger::ERROR
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'uses our formatter' do
|
||||||
|
expect(env.logger.formatter).to be_a LoggerFormatter
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when verbose mode is enabled' do
|
||||||
|
before { env.verbose = true }
|
||||||
|
|
||||||
|
it 'has a log level of INFO' do
|
||||||
|
expect(env.logger.level).to eq Logger::INFO
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#log' do
|
describe '#log' do
|
||||||
it 'logs an info message through the assigned logger' do
|
it 'logs an info message through the assigned logger' do
|
||||||
expect(env.logger).to receive(:info).with 'message'
|
expect(env.logger).to receive(:info).with 'message'
|
||||||
@ -125,24 +137,17 @@ module Producer::Core
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#log_level' do
|
describe '#verbose?' do
|
||||||
it 'returns the logger level' do
|
it 'returns true when verbose is enabled' do
|
||||||
expect(env.log_level).to eq env.logger.level
|
env.verbose = true
|
||||||
end
|
expect(env).to be_verbose
|
||||||
end
|
|
||||||
|
|
||||||
describe '#log_level=' do
|
|
||||||
it 'sets the logger level' do
|
|
||||||
env.log_level = Logger::DEBUG
|
|
||||||
expect(env.logger.level).to eq Logger::DEBUG
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#dry_run?' do
|
describe '#dry_run?' do
|
||||||
before { env.dry_run = true }
|
|
||||||
|
|
||||||
it 'returns true when dry run is enabled' do
|
it 'returns true when dry run is enabled' do
|
||||||
expect(env.dry_run?).to be true
|
env.dry_run = true
|
||||||
|
expect(env).to be_dry_run
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user