class EacRubyUtils::Envs::SshEnv

Constants

HOSTNAME_PATTERN
USER_HOSTNAME_PATTERN
USER_PATTERN

Attributes

uri[R]

Public Class Methods

new(uri) click to toggle source
# File lib/eac_ruby_utils/envs/ssh_env.rb, line 41
def initialize(uri)
  @uri = self.class.parse_uri(uri).freeze
end
parse_uri(uri) click to toggle source
# File lib/eac_ruby_utils/envs/ssh_env.rb, line 20
def parse_uri(uri)
  uri_by_url(uri) || uri_by_user_hostname(uri) || raise("URI has no SSH scheme: #{uri}")
end

Private Class Methods

uri_by_url(url) click to toggle source
# File lib/eac_ruby_utils/envs/ssh_env.rb, line 26
def uri_by_url(url)
  r = ::Addressable::URI.parse(url)
  r.scheme == 'ssh' && r.host.present? ? r : nil
end
uri_by_user_hostname(user_hostname) click to toggle source
# File lib/eac_ruby_utils/envs/ssh_env.rb, line 31
def uri_by_user_hostname(user_hostname)
  m = USER_HOSTNAME_PATTERN.match(user_hostname)
  m ? ::Addressable::URI.new(scheme: 'ssh', host: m[2], user: m[1]) : nil
rescue Addressable::URI::InvalidURIError
  nil
end

Public Instance Methods

command_line(line) click to toggle source
# File lib/eac_ruby_utils/envs/ssh_env.rb, line 49
def command_line(line)
  "#{ssh_command_line} #{Shellwords.escape(line)}"
end
to_s() click to toggle source
# File lib/eac_ruby_utils/envs/ssh_env.rb, line 45
def to_s
  uri.to_s
end

Private Instance Methods

ssh_command_line() click to toggle source
# File lib/eac_ruby_utils/envs/ssh_env.rb, line 55
def ssh_command_line
  (%w[ssh] +
    %w[nodasho dasho port].flat_map { |m| send("ssh_command_line_#{m}_args") } +
    [user_hostname_uri])
    .map { |a| Shellwords.escape(a) }.join(' ')
end
ssh_command_line_port_args() click to toggle source
# File lib/eac_ruby_utils/envs/ssh_env.rb, line 62
def ssh_command_line_port_args
  uri.port.if_present([]) do |v|
    ['-p', v]
  end
end
user_hostname_uri() click to toggle source
# File lib/eac_ruby_utils/envs/ssh_env.rb, line 68
def user_hostname_uri
  r = uri.host
  r = "#{uri.user}@#{r}" if uri.user.present?
  r
end