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