From: ljjarvis@... Date: 2015-05-29T12:00:07+00:00 Subject: [ruby-core:69417] [Ruby trunk - Feature #11191] Add #to_h method to OptionParser Issue #11191 has been updated by Lee Jarvis. > You want symbols, I'm guessing for kwargs? Sure, but not necessarily just for that. It's very common to see these config hashes contain symbol keys, so no reason to not provide them as such. ---------------------------------------- Feature #11191: Add #to_h method to OptionParser https://bugs.ruby-lang.org/issues/11191#change-52689 * Author: Lee Jarvis * Status: Feedback * Priority: Normal * Assignee: Nobuyoshi Nakada ---------------------------------------- Simply collecting configuration values is a very popular use for OptionParser. Code like this is quite common: ~~~ruby config = {} opts = OptionParser.new do |o| o.on "-h", "--host=HOST", "hostname" do |h| config[:host] = h end o.on "-p", "--port=PORT", "port", Integer do |p| config[:port] = p end o.on "-v", "--verbose" do config[:verbose] = true end o.on "-q", "--quiet" do config[:quiet] = true end end opts.parse! # do something with config values ~~~ This boilerplate is one of the reasons I built Slop: https://github.com/leejarvis/slop I'd like to add a `to_h` method to OptionParser which returns a Hash containing the switch name and switch argument values. This would reduce the above example to: ~~~ruby opts = OptionParser.new do |o| o.on "-h", "--host=HOST", "hostname" o.on "-p", "--port=PORT", "port", Integer o.on "-v", "--verbose" o.on "-q", "--quiet" end ~~~ With this example, the output would look something like: ~~~ruby opts.parse %w(--host localhost --port 8000 --verbose) puts opts.to_h #=> {:host=>"localhost", :port=>8000, :verbose=>true, :quiet=>nil} ~~~ I've attached a patch that implements this functionality in quite a basic way. I'm very keen to hear what others think. ---Files-------------------------------- 0001-Add-to_h-method-to-OptionParser.patch (2.97 KB) -- https://bugs.ruby-lang.org/