MCLI
Creating command line tools is a 🍰 . This gem is basically a wrapper around the ruby OptionParser class. It turns your ruby objects into parsers.
Installation
Add this line to your application's Gemfile:
gem 'mcli'And then execute:
$ bundle
Or install it yourself as:
$ gem install mcli
Usage
- Require MCLI
 
require 'mcli'- Create a 
MCLI::Commandsubclass 
class MyCommand < MCLI::Command
end- Call the Command Runner
 
MCLI.runExamples
Arguments
#args.rb#!/usr/bin/env ruby
require 'mcli'
class Args < MCLI::Command
  register_as :args
  def run
    puts "The passed args are: #{args.inspect}"
  end
end
MCLI.run$ ./args.rb args first second
The passed args are: ["first", "second"]Options with aliases
#options.rb#!/usr/bin/env ruby
require 'mcli'
class Options < MCLI::Command
  register_as :options
  option :say, alias: :s
  def run
    puts "Saying: #{options[:say]}"
  end
end
MCLI.run$ ./options.rb options --say 'hello'
Saying: hello
$ ./options.rb options -s 'hello'
Saying: helloOptions with defaults
#options.rb#!/usr/bin/env ruby
require 'mcli'
class Options < MCLI::Command
  register_as :options
  option :say, alias: :s, default: 'hello'
  def run
    puts "Saying: #{options[:say]}"
  end
end
MCLI.run$ ./options.rb options --say hi
Saying: hi
$ ./options.rb options -s hi
Saying: hi
$ ./options.rb options
Saying: helloRequired Options
#options.rb#!/usr/bin/env ruby
require 'mcli'
class Options < MCLI::Command
  register_as :options
  option :say, alias: :s, required: true
  def run
    puts "Saying: #{options[:say]}"
  end
end
MCLI.run$ ./options.rb options --say hi
Saying: hi
$ ./options.rb options -s hi
Saying: hi
$ ./options.rb options
mcli/lib/mcli/command.rb:25:in `block in parse': missing argument:  (OptionParser::MissingArgument)
  mcli/lib/mcli/command.rb:23:in `map'
  mcli/lib/mcli/command.rb:23:in `parse'
  mcli/lib/mcli/command.rb:62:in `block in call'
  mcli/lib/mcli/command.rb:60:in `tap'
  mcli/lib/mcli/command.rb:60:in `call'
  mcli/lib/mcli.rb:17:in `run'
  from options.rb `<main>'
Boolean Options
#options.rb#!/usr/bin/env ruby
require 'mcli'
class Options < MCLI::Command
  register_as :options
  option :heads, alias: :h, boolean: true
  def run
    puts "Heads: #{options[:heads]}"
  end
end
MCLI.run$ ./options.rb options --heads
Heads: true
$ ./options.rb options --no-heads
Heads: falseCapturing all arguments
#capture.rb#!/usr/bin/env ruby
require 'mcli'
class Capture < MCLI::Command
  register_as :capture
  capture_all!
  def run
    puts "#{arg.inspect}"
  end
end
MCLI.run$ ./capture.rb capture --toast=cool one two -a ok three
["--toast=cool", "one", "two", "-a", "ok", "three"]Register a command as the root command
#root.rb#!/usr/bin/env ruby
require 'mcli'
class Root < MCLI::Command
  register_as_root
  option 'option'
  def run
    puts "#{arg.inspect}"
    puts "#{options[:root]}"
  end
end
MCLI.run$ ./root.rb arg --option opt
[arg]
optRegister nested commands
#nestable.rb#!/usr/bin/env ruby
require 'mcli'
class Nestable < MCLI::Command
  register_as :nestable
  capture_all!
  def run
    NestedGroup.call(args)
  end
  class NestedGroup < MCLI::CommandGroup
  end
end
class NestedCommand < MCLI::Command
  register_as :command, to: Nestable::Group
  capture_all!
  def run
    puts args.inspect
  end
end
MCLI.run$ ./nestable.rb nestable command --toast=cool one two -a ok three
["--toast=cool", "one", "two", "-a", "ok", "three"]Development
After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/thomas07vt/mcli.
License
The gem is available as open source under the terms of the MIT License.