Sha256: c068aadc9ad7e38795ce206953d652a9476d3f26ad80446dd729c1ac6c737e2c

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

require 'net/ssh'
require 'net/scp'
require 'optparse'

module PolySSH
  class Cli
    attr_reader :chain

    def self.start args
      app = self.new
      app.parse_cmdline args

      app.build_commands app.chain

      #app.run commands

    end

    def initialize
      @chain = NodeList.new
      @options = {}
    end

    def parse_cmdline args
      _parse_cmdline_options args
      _parse_cmdline_hops args

    end


    def build_commands chain
      commands = chain.accept(CommandBuilder.new)
      return commands
    end

    private 

    def _parse_cmdline_hops args
      puts args
      args_current = []
      args.each do |arg|
        case arg
        when /^-/
          args_current << arg
        when /^((.+)@)?([^:]+):?(\d+)?$/
          node_new = NodeEntry.new(
            user: $2,
            host: $3,
            port: $4 || 22,
            args: args_current
          )
          @chain << node_new
          args_current = []
        else
          STDERR.puts "ERROR: Unexpected argument #{arg}"
          exit 1
        end
      end
      return @chain
    end

    def _parse_cmdline_options args
      OptionParser.new do |opts|
        opts.banner = "Usage: example.rb [options]"

        opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
          @options[:verbose] = v
        end
        opts.on("-h", "--help", "Prints this help") do
          puts opts
          exit
        end

        opts.on("--", "--", "Close #{$0} options (other options will pass to ssh)") do |v|
          raise FinalOption
        end
      end.parse! args
    rescue FinalOption
    ensure
      return nil
    end
  end #class
end #module

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
polyssh-0.1.1 lib/polyssh/cli.rb