require 'open3'
module Runnable
class RunnableError < Exception; end
extend ActiveSupport::Concern
def logger
Rails.logger
end
def run(command, options = {})
message = "executing `#{command}`n"
stdout, stderr, status = Open3.capture3(command)
if status.success?
message << stdout
logger.info message
else
message << stderr
logger.error message
raise RunnableError.new(stderr)
end
end
end