class Metacrunch::Job::Dsl::Options

Attributes

options[R]

Public Class Methods

new(argv = ARGV, require_args: false, &block) click to toggle source
# File lib/metacrunch/job/dsl/options.rb, line 7
def initialize(argv = ARGV, require_args: false, &block)
  @options = {}
  dsl.instance_eval(&block)

  dsl.options.each do |key, opt_def|
    # Set default value
    @options[key] = opt_def[:default]

    # Register with OptionParser
    if opt_def[:args].present?
      option = parser.define(*opt_def[:args]) { |value| @options[key] = value }

      option.desc << "REQUIRED" if opt_def[:required]
      option.desc << "DEFAULT: #{opt_def[:default]}" if opt_def[:default].present?

      parser_options[key] = option
    end
  end

  # Finally parse CLI options with OptionParser
  parser.parse!(argv)

  # Make sure required options are present
  ensure_required_options!(@options)

  # Make sure args are present if required
  ensure_required_args!(argv) if require_args
rescue OptionParser::ParseError => e
  error(e.message)
end

Private Instance Methods

dsl() click to toggle source
# File lib/metacrunch/job/dsl/options.rb, line 48
def dsl
  @dsl ||= Dsl.new
end
ensure_required_args!(argv) click to toggle source
# File lib/metacrunch/job/dsl/options.rb, line 73
def ensure_required_args!(argv)
  if argv.blank?
    error("Required ARGS are missing.")
  end
end
ensure_required_options!(options) click to toggle source
# File lib/metacrunch/job/dsl/options.rb, line 62
def ensure_required_options!(options)
  dsl.options.each do |key, opt_def|
    if opt_def[:required] && options[key].blank?
      long_option = parser_options[key].long.try(:[], 0)
      short_option = parser_options[key].short.try(:[], 0)

      error("Required job option `#{long_option || short_option}` missing.")
    end
  end
end
error(message) click to toggle source
# File lib/metacrunch/job/dsl/options.rb, line 56
def error(message)
  puts ColorizedString["Error: #{message}\n"].red.bold
  puts parser.help
  exit(1)
end
parser() click to toggle source
# File lib/metacrunch/job/dsl/options.rb, line 40
    def parser
      @parser ||= OptionParser.new do |opts|
        opts.banner = <<-BANNER.strip_heredoc
          #{ColorizedString["Job options:"].bold}
        BANNER
      end
    end
parser_options() click to toggle source
# File lib/metacrunch/job/dsl/options.rb, line 52
def parser_options
  @parser_options ||= {}
end