Sha256: 77cdaf97de41946386c9ece938b97c0a6edd84b474af75b70fce5269bdbdc7e5
Contents?: true
Size: 1.68 KB
Versions: 2
Compression:
Stored size: 1.68 KB
Contents
require "open3" module Bard class Command < Struct.new(:command, :on, :home) class Error < RuntimeError; end def self.run! command, on: :local, home: false, verbose: false, quiet: false new(command, on, home).run! verbose:, quiet: end def self.run command, on: :local, home: false, verbose: false, quiet: false new(command, on, home).run verbose:, quiet: end def self.exec! command, on: :local, home: false new(command, on, home).exec! end def run! verbose: false, quiet: false if !run(verbose:, quiet:) raise Error.new(full_command) end end def run verbose: false, quiet: false if verbose system full_command(quiet: quiet) else stdout, stderr, status = Open3.capture3(full_command) failed = status.to_i.nonzero? if failed && !quiet $stdout.puts stdout $stderr.puts stderr end !failed && stdout end end def exec! exec full_command end private def full_command quiet: false if on.to_sym == :local command else remote_command quiet: false end end def remote_command quiet: false ssh_key = on.ssh_key ? "-i #{on.ssh_key} " : "" cmd = command if on.env cmd = "#{on.env} #{command}" end unless home cmd = "cd #{on.path} && #{cmd}" end uri = on.ssh_uri cmd = "ssh -tt #{ssh_key} -p#{uri.port} #{uri.user}@#{uri.host} '#{cmd}'" if on.gateway uri = on.ssh_uri(:gateway) cmd = "ssh -tt -p#{uri.port} #{uri.user}@#{uri.host} \"#{cmd}\"" end cmd += " 2>&1" if quiet cmd end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
bard-1.0.3 | lib/bard/command.rb |
bard-1.0.2 | lib/bard/command.rb |