Module: OptionParserGenerator
- Defined in:
- lib/optsparser_generator.rb
Overview
Small lib for generating an OptionParser from an OpenStruct
Defined Under Namespace
Classes: OptionCollision, WrongArgumentType
Constant Summary collapse
- SPECIAL_POSTFIXES =
Special postfixes for Hash keys
[ '--help', '--values', '--short', '--class', '--proc' ].freeze
Class Method Summary collapse
-
.[](ostruct, **options) ⇒ Object
Does the magic.
-
.parse(ostruct, argv, **opt) ⇒ OpenStruct
Shorthand when parsing is only needed once.
-
.parse!(ostruct, argv = ARGV, **opt) ⇒ OpenStruct
Same as parse, removes parsed elements from argv.
Class Method Details
.[](ostruct, **options) ⇒ Object
TODO:
write documentation :(
TODO:
split this up
Does the magic
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/optsparser_generator.rb', line 58 def self.[](ostruct, **) defaults = handle_arguments(ostruct) optparser = OptionParser.new do |opts| defaults.each_pair do |key, val| trigger = key.to_s.tr('_', '-') next if trigger.end_with?(*SPECIAL_POSTFIXES) arguments = generate_arguments(defaults, key, val) case val when FalseClass, TrueClass uneven_no = /\Ano(-no-no)*-(?!no)/ =~ trigger if trigger.start_with?('no-') trigger.gsub!(/\A(no-)+/, '') # removes no- prefixes check_collisions(trigger, key, defaults) unless [:ignore_collisions] end arguments.unshift "--[no-]#{trigger}" block = lambda do |bool| # inverted when it starts with no_ bool ^ uneven_no end else klass = val.class klass = klass.equal?(Fixnum) ? Integer : klass klass = defaults.special_value(key, 'class') || klass arguments.push klass values = defaults.special_value(key, 'values') arguments.push values if values arguments.unshift "--#{trigger}=ARG" block = lambda do |str| str end end if (proc = defaults.special_value(key, 'proc')) block = proc end opts.on(*arguments) do |arg| opts.instance_variable_get(:@out)[key] = block.call(arg) end end unless [:generate_no_help] opts.on('-h', '--help') do puts opts exit end end end # add default values optparser.instance_variable_set(:@defaults, defaults) optparser.extend(OptParsePatch) end |
.parse(ostruct, argv, **opt) ⇒ OpenStruct
Shorthand when parsing is only needed once.
Generates an OptionParser and calls parse on it
164 165 166 |
# File 'lib/optsparser_generator.rb', line 164 def self.parse(ostruct, argv, **opt) self[ostruct, opt].parse(argv) end |
.parse!(ostruct, argv = ARGV, **opt) ⇒ OpenStruct
Same as parse, removes parsed elements from argv
171 172 173 |
# File 'lib/optsparser_generator.rb', line 171 def self.parse!(ostruct, argv = ARGV, **opt) self[ostruct, opt].parse!(argv) end |