Sha256: 76e64991dfe9cce04daf3b23b6d0b609af743cad6b034d0e3eb39a21a5a33fa4

Contents?: true

Size: 1.9 KB

Versions: 2

Compression:

Stored size: 1.9 KB

Contents

# Gems
require 'addressable/uri'
# Standard Libs
require 'optparse'
require 'pathname'
# Custom Libs
require 'opt_parse_validator/hacks'
require 'opt_parse_validator/opts'
require 'opt_parse_validator/version'
require 'opt_parse_validator/options_file'

# Gem namespace
module OptParseValidator
  # Validator
  class OptParser < OptionParser
    attr_reader :symbols_used, :opts

    def initialize(banner = nil, width = 32, indent = ' ' * 4)
      @results      = {}
      @symbols_used = []
      @opts         = []

      super(banner, width, indent)
    end

    # @param [ OptBase ] options
    #
    # @return [ void ]
    def add(*options)
      options.each { |option| add_option(option) }
    end

    # @param [ OptBase ] opt
    #
    # @return [ void ]
    def add_option(opt)
      fail "The option is not an OptBase, #{opt.class} supplied" unless opt.is_a?(OptBase)
      fail "The option #{opt.to_sym} is already used !" if @symbols_used.include?(opt.to_sym)

      @opts         << opt
      @symbols_used << opt.to_sym
      # Set the default option value if it exists
      @results[opt.to_sym] = opt.default unless opt.default.nil?

      on(*opt.option) do |arg|
        begin
          @results[opt.to_sym] = opt.normalize(opt.validate(arg))
        rescue => e
          # Adds the long option name to the message
          # e.g --proxy Invalid Scheme format.
          raise e.class, "#{opt.to_long} #{e}"
        end
      end
    end

    # @return [ Hash ]
    def results(argv = default_argv)
      load_options_files
      self.parse!(argv)
      post_processing

      @results
    end

    # Ensure that all required options are supplied
    # Should be overriden to modify the behavior
    #
    # @return [ Void ]
    def post_processing
      @opts.each do |opt|
        next unless opt.required? && !@results.key?(opt.to_sym)

        fail "The option #{opt.to_sym} is required"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
opt_parse_validator-0.0.8 lib/opt_parse_validator.rb
opt_parse_validator-0.0.7 lib/opt_parse_validator.rb