GithubHelp home page GithubHelp logo

cli-template's Introduction

CLI Template

CircleCI Maintainability

BoltOps Badge

cli-template is a generator tool that builds a starter CLI project based on Thor. It is the successor tool to thor_template, which is also a tool that generates CLI projects.

The predecessor tool is covered in this original blog post, Build Thor CLI Project in Under a Second. It covers usage and also contains a video demo. An updated blog post will eventually be made, for now, refer to the original blog post.

The generated CLI project comes with:

  • example passing specs
  • auto-completion

Usage

cli-template new mycli
cd mycli
exe/mycli hello world

The above generated a starter CLI project called mycli with a working hello command. The created project also has starter specs for you ๐Ÿ˜

$ rake
Mycli::CLI
  mycli
    should hello world
    should goodbye world

Finished in 1.12 seconds (files took 0.71706 seconds to load)
2 examples, 0 failures

Subcommands

Use the --subcommand to have the generator also include a subcommand example.

cli-template new mycli --subcommand
cd mycli
exe/foo sub goodbye # subcommand example

Release

Once you are satisfied with the CLI tool, you can release it as a gem.

1. edit the mycli.gemspec
2. edit lib/mycli/version.rb
3. update the CHANGELOG.md

And run:

rake release

When installed as a gem, you no longer have to prepend exe in front of the command. For example, exe/mycli becomes the mycli command.

Different starter templates

There are 2 different templates that the tool generates from:

  1. basic thor project: A standard CLI tool based on basic usage of Thor.
  2. colon namespaced project: The generated CLI project still uses Thor but it does some manipulation in order to allow defining namespaced methods with colons instead of spaces. Example: mycli sub:command vs mycli sub command.

To use the different templates:

TEMPLATE=colon_namespaces cli-template new mycli
TEMPLATE=default cli-template new mycli
cli-template new mycli # same as TEMPLATE=default

Auto Completion

There is support for TAB completion in the newly generated CLI project for the default template. To enable auto completion, add this to ~/.bashrc or ~/.profile:

eval $(mycli completion_script)

Remember to re-load the shell. Note, the auto completion will only work if the cli command is avaialble in your PATH. You can do this by installing the gem. You can also create a wrapper bash script that calls to your development cli command like so:

cat > /usr/local/bin/mycli << 'EOL'
#!/bin/bash
exec ~/src/mycli/exe/mycli "$@"
EOL
chmod a+x /usr/local/bin/mycli

Experimental Auto Completion Support for colon_namespaces Template

The auto-completion for the colon_namespaces template CLI project is experimental. Ran into a few issues:

  1. Slow as to make auto-completion useless. This because the generated CLI invokes autoloading when it detects the methods for the completion words. Ideas on speeding this would be appreciated! Right now it takes about 1 second.
  2. Does not work with colons currently. Will have to look into this post Bash Command-Line Tab Completion Colon Character .
  3. Does not work with the last two characters are --.

Suggestions to are appreciated!

Installation

gem install cli-template

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.