Sha256: 02a088b9894fea66670714ca10dbe36ced37ca6d9a629495a5da524bc1d81da6

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

require_relative 'config'

module BigFiles
  # Parse options passed to bigfiles command
  class OptionParser
    def initialize(source_finder_option_parser:, option_parser_class: ::OptionParser,
                   io_class: Kernel,
                   exiter: Kernel)
      @option_parser_class = option_parser_class
      @io_class = io_class
      @exiter = exiter
      @source_finder_option_parser = source_finder_option_parser
    end

    def setup_options(opts)
      options = {}
      opts.banner = 'Usage: bigfiles [options]'
      @source_finder_option_parser.add_options(opts, options)
      add_help_option(opts, options)
      add_num_files_option(opts, options)
      options
    end

    def add_num_files_option(opts, options)
      opts.on('-n', '--num-files number-here',
              Integer,
              "Top number of files to show--" \
              "default #{Config::NUM_FILES_DEFAULT}") do |n|
        options[:num_files] = n
      end
    end

    def add_help_option(opts, options)
      opts.on('-h', '--help', 'This message') { |_| options[:help] = true }
    end

    def parse_options(args)
      options = nil
      @option_parser_class.new do |opts|
        options = setup_options(opts)
        @option_parser = opts
      end.parse!(args)
      options
    end

    def usage
      @io_class.puts @option_parser
      @exiter.exit(1)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bigfiles-0.3.0 lib/bigfiles/option_parser.rb