Coder Social home page Coder Social logo

docopt.cr's Introduction

docopt.cr

docopt for crystal-lang

Installation

Add this to your application's shard.yml:

dependencies:
  docopt:
    github: chenkovsky/docopt.cr

Usage

require "docopt"
describe "Docopt" do
  # TODO: Write tests

  it "works" do
    doc = <<-DOC
    Naval Fate.

    Usage:
      naval_fate ship new <name>...
      naval_fate ship <name> move <x> <y> [--speed=<kn>]
      naval_fate ship shoot <x> <y>
      naval_fate mine (set|remove) <x> <y> [--moored|--drifting]
      naval_fate -h | --help
      naval_fate --version

    Options:
      -h --help     Show this screen.
      --version     Show version.
      --speed=<kn>  Speed in knots [default: 10].
      --moored      Moored (anchored) mine.
      --drifting    Drifting mine.
    DOC
    std = {"ship" => true, "new" => false, "<name>" => ["A"], "move" => true, "<x>" => "a", "<y>" => "b", "--speed" => "3", "shoot" => false, "mine" => false, "set" => false, "remove" => false, "--moored" => nil, "--drifting" => nil, "-h" => nil, "--help" => false, "--version" => nil}
    ans = Docopt.docopt(doc, argv = ["ship", "A", "move", "a", "b", "--speed=3"])
    ans["<name>"].should eq(std["<name>"])
  end
  it "one or more" do
    doc = <<-DOC
    test
    Usage:
        naval [--files=files...]
    DOC
    ans = Docopt.docopt(doc, argv = ["--files=a.txt", "--files=b.txt"])
    farr = ans["--files"] as Array(String)
    "a.txt".should eq(farr[0])
    "b.txt".should eq(farr[1])
  end
end

TODO: Write usage instructions here

Development

TODO: Write development instructions here

Contributing

  1. Fork it ( https://github.com/chenkovsky/docopt.cr/fork )
  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 a new Pull Request

Contributors

  • chenkovsky chenkovsky.chen - creator, maintainer

docopt.cr's People

Contributors

chenkovsky avatar noraj avatar nuxlli avatar rhass avatar yb66 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

docopt.cr's Issues

Spec fail

Hi @chenkovsky!

Do you still maintain this? The specs fail to compile with Crystal 0.22.0 (2017-04-20) LLVM 4.0.0 on macOS with a long error trace...

Cheers,
Tim

Getting error

Getting this

in ./src/app-test.cr:1: while requiring "docopt.cr": Error reading file: Is a directory

require "docopt.cr"

It seems that your module should be renamed to docopt. I did this in the lib folder and it started to work :)

Color codes breaks doc parsing

With docopt.rb I can put some colorization on my docopt help message.

Eg. code

https://github.com/noraj/haiti/blob/a8fefceb94d32d2b00fdbb31ad46c725451b588d/bin/haiti#L11-L50

Eg. output

But with docopt.cr it breaks the parsing.

Eg. colors on usage:

    doc = <<-DOCOPT
    #{"miniss".colorize.light_magenta} v#{Miniss::VERSION.colorize.bold}

    #{"Usage:".colorize.light_cyan}
      miniss [--tcp | --udp] [--ipv4 | --ipv6] [--debug --no-color]
      miniss -h | --help
      miniss --version

    #{"Options:".colorize.light_cyan}
      -u --udp      Show UDP sockets.
      -t --tcp      Show TCP sockets.
      -4 --ipv4     Show IPv4 sockets.
      -6 --ipv6     Show IPv6 sockets.
      --debug       Display arguments.
      --no-color    Disable colorized output.
      -h --help     Show this screen.
      --version     Show version.

    #{"Examples:".colorize.light_cyan}
      miniss --udp
      miniss -t6

    #{"Project:".colorize.light_cyan}
      #{"author".colorize.underline} (https://pwn.by/noraj / https://twitter.com/noraj_rawsec)
      #{"source".colorize.underline} (https://github.com/noraj/miniss)
      #{"documentation".colorize.underline} (https://noraj.github.io/miniss)
    DOCOPT
    args = Docopt.docopt(doc, version: Miniss::VERSION)

image

Why no colors on usage:

    doc = <<-DOCOPT
    #{"miniss".colorize.light_magenta} v#{Miniss::VERSION.colorize.bold}

    Usage:
      miniss [--tcp | --udp] [--ipv4 | --ipv6] [--debug --no-color]
      miniss -h | --help
      miniss --version

    #{"Options:".colorize.light_cyan}
      -u --udp      Show UDP sockets.
      -t --tcp      Show TCP sockets.
      -4 --ipv4     Show IPv4 sockets.
      -6 --ipv6     Show IPv6 sockets.
      --debug       Display arguments.
      --no-color    Disable colorized output.
      -h --help     Show this screen.
      --version     Show version.

    #{"Examples:".colorize.light_cyan}
      miniss --udp
      miniss -t6

    #{"Project:".colorize.light_cyan}
      #{"author".colorize.underline} (https://pwn.by/noraj / https://twitter.com/noraj_rawsec)
      #{"source".colorize.underline} (https://github.com/noraj/miniss)
      #{"documentation".colorize.underline} (https://noraj.github.io/miniss)
    DOCOPT
    args = Docopt.docopt(doc, version: Miniss::VERSION)

image

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.