Sha256: 8f929c9860819ce659244eb9355d11876a240d2b2926a2481ceb1e89d41161c5

Contents?: true

Size: 1.52 KB

Versions: 137

Compression:

Stored size: 1.52 KB

Contents

require 'rbbt/util/simpleopt/accessor'

module SOPT
  def self.fix_shortcut(short, long)
    return short unless short and shortcuts.include?(short)

    chars = long.chars.to_a
    current = [chars.shift]
    short = current * ""

    if (shortcuts.include?(short) and not shortcuts[short] == long) and long.index "-" or long.index "_"
      parts = long.split(/[_-]/)
      acc = parts.collect{|s| s[0] } * ""
      return acc unless shortcuts.include? acc
    end

    while shortcuts.include?(short) and not shortcuts[short] == long
      while shortcuts[short].index current * ""
        next_letter = chars.shift
        return nil if next_letter.nil?
        current << next_letter
      end
      short = current * ""
    end

    return nil if shortcuts.include? short

    short
  end

  def self.register(short, long, asterisk, description)
    short = fix_shortcut(short, long)
    shortcuts[short] = long if short
    inputs << long
    input_shortcuts[long] = short
    input_descriptions[long] = description
    input_types[long] = asterisk ? :string : :boolean
  end

  def self.parse(opt_str)
    info = {}

    inputs = []
    if opt_str.include? "\n"
      re = /\n+/
    else
      re = /:/
    end
    opt_str.split(re).each do |entry|
      entry.strip!
      next if entry.empty?
      names, _sep, description = entry.partition /\s+/
      short, long, asterisk = names.match(/\s*(?:-(.+))?(?:--(.+?))([*])?$/).values_at 1,2,3 

      inputs << long
      register short, long, asterisk, description
    end
    inputs
  end
end

Version data entries

137 entries across 137 versions & 1 rubygems

Version Path
rbbt-util-5.21.96 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.95 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.94 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.93 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.92 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.91 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.90 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.89 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.87 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.86 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.85 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.84 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.83 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.81 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.80 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.78 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.77 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.76 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.75 lib/rbbt/util/simpleopt/parse.rb
rbbt-util-5.21.74 lib/rbbt/util/simpleopt/parse.rb