21
1
Fork 0
mirror of https://github.com/Evolix/chexpire.git synced 2024-05-05 02:05:09 +02:00

SystemCommand wrapper

This commit is contained in:
Colin Darie 2018-05-29 22:33:12 +02:00
parent 2a329ad934
commit 022d681c33
No known key found for this signature in database
GPG key ID: 4FB865FDBCA4BCC4
2 changed files with 58 additions and 0 deletions

View file

@ -0,0 +1,37 @@
require "null_logger"
class SystemCommand
attr_reader :program
attr_reader :args
attr_reader :logger
def initialize(program, args, logger: NullLogger.new)
@program = program
@args = Array.wrap(args)
@logger = logger
end
def execute
logger.log :before_command, syscmd
raw = `syscmd`
logger.log :after_command, raw
raw
end
def syscmd
escaped_args = args.map { |arg|
'"' + escape_arg(arg) + '"'
}
[program, escaped_args].join(" ")
end
private
def escape_arg(arg)
arg.to_s.gsub('"') { '\"' }
end
end

View file

@ -0,0 +1,21 @@
require "test_helper"
require "system_command"
class SystemCommandTest < ActiveSupport::TestCase
test "should execute and log a command" do
mock_logger = Minitest::Mock.new
expected = 'whois "example.org"'
mock_logger.expect(:log, nil, [:before_command, expected])
mock_logger.expect(:log, nil, [:after_command, "my result"])
command = SystemCommand.new("whois", "example.org", logger: mock_logger)
assert_equal expected, command.syscmd
command.stub(:`, "my result") do
assert_equal "my result", command.execute
end
mock_logger.verify
end
end