class Ironment::Optparse

Constants

BASE_HELP_TEXT
EXEC_HELP_TEXT
HELP_OPTIONS
TRUST_HELP_TEXT
UNTRUST_HELP_TEXT
VERSION_OPTIONS

Public Class Methods

new(options = {}) click to toggle source
# File lib/ironment/optparse.rb, line 6
def initialize(options = {})
  @argv = options[:argv] || ARGV
  @stdout = options[:stdout] || $stdout
  @stderr = options[:stderr] || $stderr
  @cl = options[:cl] || CL.new
end

Private Class Methods

unindent(s) click to toggle source
# File lib/ironment/optparse/help_texts.rb, line 6
def unindent(s)
  s.gsub(/^#{s.scan(/^[ \t]+(?=\S)/).min}/, '')
end

Public Instance Methods

parse() click to toggle source
# File lib/ironment/optparse.rb, line 13
def parse
  if include_version?(@argv)
    @stdout.puts "Ironment #{VERSION}"
    return
  end

  unknown_options = options(@argv) - HELP_OPTIONS - VERSION_OPTIONS

  if !unknown_options.empty?
    @stderr.puts "Unknown option: #{unknown_options.first}"
    return 1
  end

  case @argv.first
  when "help"
    case @argv[1]
    when "exec"
      @stdout.puts EXEC_HELP_TEXT
    when "trust"
      @stdout.puts TRUST_HELP_TEXT
    when "untrust"
      @stdout.puts UNTRUST_HELP_TEXT
    when "help", nil
      @stdout.puts BASE_HELP_TEXT
    else
      @stderr.puts "Unknown command: #{@argv[1]}"
      return 1
    end
  when "trust"
    return @stdout.puts TRUST_HELP_TEXT if include_help?(@argv)
    @argv.drop(1).each do |arg|
      @cl.trust arg
    end
  when "untrust"
    return @stdout.puts UNTRUST_HELP_TEXT if include_help?(@argv)
    @argv.drop(1).each do |arg|
      @cl.untrust arg
    end
  when "exec"
    return @stdout.puts EXEC_HELP_TEXT if include_help?(@argv)
    @cl.exec_with_environment *@argv.drop(1)
  else
    return @stdout.puts BASE_HELP_TEXT if include_help?(@argv)
    return @stdout.puts BASE_HELP_TEXT if @argv.empty?
    @cl.exec_with_environment *@argv
  end
end

Private Instance Methods

include_help?(argv) click to toggle source
# File lib/ironment/optparse.rb, line 63
def include_help?(argv)
  !(options(argv) & HELP_OPTIONS).empty?
end
include_version?(argv) click to toggle source
# File lib/ironment/optparse.rb, line 67
def include_version?(argv)
  !(options(argv) & VERSION_OPTIONS).empty?
end
options(argv) click to toggle source
# File lib/ironment/optparse.rb, line 71
def options(argv)
  if ["help", "exec", "trust", "untrust"].include?(argv.first)
    argv = argv.drop(1)
  end

  argv.take_while do |arg|
    arg.start_with?("-")
  end
end