mirror of
https://github.com/Evolix/chexpire.git
synced 2024-05-17 07:58:39 +02:00
38 lines
580 B
Ruby
38 lines
580 B
Ruby
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
|