All Projects → jekyll → Mercenary

jekyll / Mercenary

Licence: mit
An easier way to build your command-line scripts in Ruby.

Programming Languages

ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to Mercenary

Argparse.jl
Package for parsing command-line arguments to Julia programs.
Stars: ✭ 131 (-8.39%)
Mutual labels:  command-line
Gossed
Push the standard output of ANY program to browsers as Server Sent Events
Stars: ✭ 138 (-3.5%)
Mutual labels:  command-line
Pueue
🌠 Manage your shell commands.
Stars: ✭ 2,471 (+1627.97%)
Mutual labels:  command-line
Cz Cli
The commitizen command line utility. #BlackLivesMatter
Stars: ✭ 12,671 (+8760.84%)
Mutual labels:  command-line
Brotab
Control your browser's tabs from the command line
Stars: ✭ 137 (-4.2%)
Mutual labels:  command-line
Marketplace Partners
Image validation, automation, and other tools for DigitalOcean Marketplace partners and Custom Image users
Stars: ✭ 139 (-2.8%)
Mutual labels:  command-line
Liblouis
Open-source braille translator and back-translator.
Stars: ✭ 129 (-9.79%)
Mutual labels:  command-line
Ping3
Pure Python3 version of ICMP ping, shipped with command-line command.
Stars: ✭ 141 (-1.4%)
Mutual labels:  command-line
Fblog
Small command-line JSON Log viewer
Stars: ✭ 137 (-4.2%)
Mutual labels:  command-line
Gitman
Language-agnostic dependency manager using Git.
Stars: ✭ 139 (-2.8%)
Mutual labels:  command-line
Entrypoint
Composable CLI Argument Parser for all modern .Net platforms.
Stars: ✭ 136 (-4.9%)
Mutual labels:  command-line
Git Tidy
Tidy up stale git branches.
Stars: ✭ 137 (-4.2%)
Mutual labels:  command-line
Fac
Easy-to-use CUI for fixing git conflicts
Stars: ✭ 1,738 (+1115.38%)
Mutual labels:  command-line
The Way
A command line code snippets manager
Stars: ✭ 132 (-7.69%)
Mutual labels:  command-line
Node Promptly
Simple command line prompting utility for nodejs
Stars: ✭ 140 (-2.1%)
Mutual labels:  command-line
Progressbar
A really basic thread-safe progress bar for Golang applications
Stars: ✭ 2,212 (+1446.85%)
Mutual labels:  command-line
Bashacks
Set of functions to increase productivity while hacking with Bash
Stars: ✭ 138 (-3.5%)
Mutual labels:  command-line
Swift For Scripting
📋A hand-curated collection of useful and informative Swift Scripting materials.
Stars: ✭ 142 (-0.7%)
Mutual labels:  command-line
Artisan Menu
📝 Artisan Menu - Use Artisan via an elegant console GUI
Stars: ✭ 141 (-1.4%)
Mutual labels:  command-line
Shpotify
A command-line interface to Spotify.
Stars: ✭ 1,782 (+1146.15%)
Mutual labels:  command-line

Mercenary

Lightweight and flexible library for writing command-line apps in Ruby.

Build Status

Installation

Add this line to your application's Gemfile:

gem 'mercenary'

And then execute:

$ bundle

Or install it yourself as:

$ gem install mercenary

Note: Mercenary may not work with Ruby < 1.9.3.

Usage

Creating programs and commands with Mercenary is easy:

Mercenary.program(:jekyll) do |p|
  p.version Jekyll::VERSION
  p.description 'Jekyll is a blog-aware, static site generator in Ruby'
  p.syntax "jekyll <subcommand> [options]"

  p.command(:new) do |c|
    c.syntax "new PATH" # do not include the program name or super commands
    c.description "Creates a new Jekyll site scaffold in PATH"
    c.option 'blank', '--blank', 'Initialize the new site without any content.'

    c.action do |args, options|
      Jekyll::Commands::New.process(args, blank: options['blank'])
    end
  end

  p.command(:build) do |c|
    c.syntax "build [options]"
    c.description "Builds your Jekyll site"

    c.option 'safe', '--safe', 'Run in safe mode'
    c.option 'source', '--source DIR', 'From where to collect the source files'
    c.option 'destination', '--dest DIR', 'To where the compiled files should be written'

    c.action do |_, options|
      Jekyll::Commands::Build.process(options)
    end
  end

  # Bring in command bundled in external gem
  begin
    require "jekyll-import"
    JekyllImport.init_with_program(p)
  rescue LoadError
  end

  p.default_command(:build)
end

All commands have the following default options:

  • -h/--help - show a help message
  • -v/--version - show the program version
  • -t/--trace - show the full backtrace when an error occurs

API

Mercenary

.program

Creates and executes a program. Accepts two arguments:

  • name - program name as a Symbol
  • block - the specification for the program, passed the program instance as an argument.

Example is above, under the heading Usage.

Program

Program is a subclass of Command, so it has all of the methods documented below as well as those for Command.

#config

Fetches the program configuration hash.

Command

#new

Create a new command. Accepts one argument:

  • name - the name of your command, as a symbol

#version

Sets or gets the version of the command. Accepts an optional argument:

  • version - (optional) the version to set for the command. If present, this becomes the new version for the command and persists.

#syntax

Sets or gets the syntax of the command. Built on parent syntaxes if a parent exists. Accepts one optional argument:

  • syntax - (optional) the syntax to set for the command. Will inherit from the parent commands or program. Usually in the form of "command_name <SUBCOMMAND> [OPTIONS]"

When a parent command exists, say supercommand, with syntax set as supercommand <SUBCOMMAND> [OPTIONS], the syntax of the command in question will be supercommand command_name <SUBCOMMAND> [OPTIONS] with both <SUBCOMMAND> and [OPTIONS] stripped out. Any text between < and > or between [ and ] will be stripped from parent command syntaxes. The purpose of this chaining is to reduce redundancy.

#description

Sets or gets the description of the command. Accepts one optional argument:

  • desc - (optional) the description to set for the command. If provided, will override any previous description set for the command.

#default_command

Sets or gets the default subcommand of the command to execute in the event no subcommand is passed during execution. Accepts one optional argument:

  • command_name - (optional) the Symbol name of the subcommand to be executed. Raises an ArgumentError if the subcommand doesn't exist. Overwrites previously-set default commands.

#option

Adds a new option to the command. Accepts many arguments:

  • config_key - the configuration key that the value of this option maps to.
  • *options - all the options, globbed, to be passed to OptionParser, namely the switches and the option description. Usually in the format "-s", "--switch", "Sets the 'switch' flag".

Valid option calls:

cmd.option 'config_key', '-c', 'Sets the "config" flag'
cmd.option 'config_key', '--config', 'Sets the "config" flag'
cmd.option 'config_key', '-c', '--config', 'Sets the "config" flag.'
cmd.option 'config_key', '-c FILE', '--config FILE', 'The config file.'
cmd.option 'config_key', '-c FILE1[,FILE2[,FILE3...]]', '--config FILE1[,FILE2[,FILE3...]]', Array, 'The config files.'

Notice that you can specify either a short switch, a long switch, or both. If you want to accept an argument, you have to specify it in the switch strings. The class of the argument defaults to String, but you can optionally set a different class to create, e.g. Array, if you are expecting a particular class in your code from this option's value. The description is also optional, but it's highly recommended to include a description.

#alias

Specifies an alias for this command such that the alias may be used in place of the command during execution. Accepts one argument:

  • cmd_name - the alias name for this command as a Symbol

Example:

cmd.alias(:my_alias)
# Now `cmd` is now also executable via "my_alias"

#action

Specifies a block to be executed in the event the command is specified at runtime. The block is given two arguments:

  • args - the non-switch arguments given from the command-line
  • options - the options hash built via the switches passed

Note that actions are additive, meaning any new call to #action will result in another action to be executed at runtime. Actions will be executed in the order they are specified in.

Example:

cmd.action do |args, options|
  # do something!
end

#logger

Access the logger for this command. Useful for outputting information to STDOUT. Accepts one optional argument:

  • level - (optional) the severity threshold at which to begin logging. Uses Ruby's built-in Logger levels.

Log level defaults to Logger::INFO.

Examples:

cmd.logger(Logger::DEBUG)
cmd.logger.debug "My debug message."
cmd.logger.info "My informative message."
cmd.logger.warn "ACHTUNG!!"
cmd.logger.error "Something terrible has happened."
cmd.logger.fatal "I can't continue doing what I'm doing."

#command

Creates a new subcommand for the current command. Accepts two arguments:

  • cmd_name - the command name, as a Symbol
  • block - the specification of the subcommand in a block

Example:

my_command.command(:my_subcommand) do |subcmd|
  subcmd.description 'My subcommand'
  subcmd.syntax 'my_subcommand [OPTIONS]'
  # ...
end

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].