gli_aziz_light 2.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +17 -0
- data/CONTRIBUTING.md +23 -0
- data/Gemfile +8 -0
- data/LICENSE.txt +201 -0
- data/ObjectModel.graffle +1191 -0
- data/README.rdoc +109 -0
- data/Rakefile +126 -0
- data/bin/gli +59 -0
- data/bin/report_on_rake_results +10 -0
- data/bin/test_all_rubies.sh +6 -0
- data/features/gli_executable.feature +90 -0
- data/features/gli_init.feature +232 -0
- data/features/step_definitions/gli_executable_steps.rb +18 -0
- data/features/step_definitions/gli_init_steps.rb +11 -0
- data/features/step_definitions/todo_steps.rb +88 -0
- data/features/support/env.rb +53 -0
- data/features/todo.feature +413 -0
- data/features/todo_legacy.feature +128 -0
- data/gli.cheat +95 -0
- data/gli.gemspec +34 -0
- data/gli.rdoc +73 -0
- data/lib/gli.rb +35 -0
- data/lib/gli/app.rb +286 -0
- data/lib/gli/app_support.rb +341 -0
- data/lib/gli/command.rb +171 -0
- data/lib/gli/command_finder.rb +41 -0
- data/lib/gli/command_line_option.rb +34 -0
- data/lib/gli/command_line_token.rb +63 -0
- data/lib/gli/command_support.rb +181 -0
- data/lib/gli/commands/compound_command.rb +42 -0
- data/lib/gli/commands/doc.rb +231 -0
- data/lib/gli/commands/help.rb +95 -0
- data/lib/gli/commands/help_modules/arg_name_formatter.rb +20 -0
- data/lib/gli/commands/help_modules/command_finder.rb +60 -0
- data/lib/gli/commands/help_modules/command_help_format.rb +156 -0
- data/lib/gli/commands/help_modules/global_help_format.rb +70 -0
- data/lib/gli/commands/help_modules/help_completion_format.rb +31 -0
- data/lib/gli/commands/help_modules/list_formatter.rb +23 -0
- data/lib/gli/commands/help_modules/one_line_wrapper.rb +18 -0
- data/lib/gli/commands/help_modules/options_formatter.rb +49 -0
- data/lib/gli/commands/help_modules/text_wrapper.rb +53 -0
- data/lib/gli/commands/help_modules/tty_only_wrapper.rb +23 -0
- data/lib/gli/commands/help_modules/verbatim_wrapper.rb +16 -0
- data/lib/gli/commands/initconfig.rb +74 -0
- data/lib/gli/commands/rdoc_document_listener.rb +116 -0
- data/lib/gli/commands/scaffold.rb +401 -0
- data/lib/gli/dsl.rb +226 -0
- data/lib/gli/exceptions.rb +71 -0
- data/lib/gli/flag.rb +68 -0
- data/lib/gli/gli_option_block_parser.rb +84 -0
- data/lib/gli/gli_option_parser.rb +156 -0
- data/lib/gli/option_parser_factory.rb +81 -0
- data/lib/gli/option_parsing_result.rb +21 -0
- data/lib/gli/options.rb +23 -0
- data/lib/gli/switch.rb +35 -0
- data/lib/gli/terminal.rb +101 -0
- data/lib/gli/version.rb +5 -0
- data/test/apps/README.md +2 -0
- data/test/apps/todo/Gemfile +2 -0
- data/test/apps/todo/README.rdoc +6 -0
- data/test/apps/todo/Rakefile +23 -0
- data/test/apps/todo/bin/todo +63 -0
- data/test/apps/todo/lib/todo/commands/create.rb +24 -0
- data/test/apps/todo/lib/todo/commands/list.rb +63 -0
- data/test/apps/todo/lib/todo/commands/ls.rb +47 -0
- data/test/apps/todo/lib/todo/commands/make.rb +52 -0
- data/test/apps/todo/lib/todo/version.rb +3 -0
- data/test/apps/todo/test/tc_nothing.rb +14 -0
- data/test/apps/todo/todo.gemspec +23 -0
- data/test/apps/todo/todo.rdoc +5 -0
- data/test/apps/todo_legacy/Gemfile +2 -0
- data/test/apps/todo_legacy/README.rdoc +6 -0
- data/test/apps/todo_legacy/Rakefile +23 -0
- data/test/apps/todo_legacy/bin/todo +61 -0
- data/test/apps/todo_legacy/lib/todo/commands/create.rb +24 -0
- data/test/apps/todo_legacy/lib/todo/commands/list.rb +63 -0
- data/test/apps/todo_legacy/lib/todo/commands/ls.rb +47 -0
- data/test/apps/todo_legacy/lib/todo/version.rb +3 -0
- data/test/apps/todo_legacy/test/tc_nothing.rb +14 -0
- data/test/apps/todo_legacy/todo.gemspec +23 -0
- data/test/apps/todo_legacy/todo.rdoc +5 -0
- data/test/apps/todo_plugins/commands/third.rb +1 -0
- data/test/config.yaml +10 -0
- data/test/fake_std_out.rb +30 -0
- data/test/init_simplecov.rb +8 -0
- data/test/option_test_helper.rb +13 -0
- data/test/tc_command.rb +508 -0
- data/test/tc_compound_command.rb +22 -0
- data/test/tc_doc.rb +325 -0
- data/test/tc_flag.rb +62 -0
- data/test/tc_gli.rb +773 -0
- data/test/tc_help.rb +387 -0
- data/test/tc_options.rb +43 -0
- data/test/tc_subcommand_parsing.rb +104 -0
- data/test/tc_subcommands.rb +260 -0
- data/test/tc_switch.rb +55 -0
- data/test/tc_terminal.rb +100 -0
- data/test/tc_verbatim_wrapper.rb +36 -0
- data/test/test_helper.rb +20 -0
- metadata +330 -0
data/README.rdoc
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
= Git-Like Interface Command Line Parser
|
2
|
+
|
3
|
+
GLI is the best way to make a "command-suite" command-line application, e.g. one like <tt>git</tt> (for the best way to make a
|
4
|
+
simpler command-line application, check out methadone[http://www.github.com/davetron5000/methadone]).
|
5
|
+
|
6
|
+
GLI allows you to make a very polished, easy-to-maintain command-line application without a lot
|
7
|
+
of syntax, but without restricting you in any way from the power of +OptionParser+.
|
8
|
+
|
9
|
+
* {Overview}[http://davetron5000.github.com/gli]
|
10
|
+
* {Source on Github}[http://github.com/davetron5000/gli]
|
11
|
+
* RDoc[http://davetron5000.github.com/gli/rdoc/index.html]
|
12
|
+
|
13
|
+
{<img src="https://secure.travis-ci.org/davetron5000/gli.png?branch=gli-2" alt="Build Status" />}[https://travis-ci.org/davetron5000/gli]
|
14
|
+
|
15
|
+
== Use
|
16
|
+
|
17
|
+
Install if you need to:
|
18
|
+
|
19
|
+
gem install gli
|
20
|
+
|
21
|
+
The simplest way to get started is to create a scaffold project
|
22
|
+
|
23
|
+
gli init todo list add complete
|
24
|
+
|
25
|
+
This will create a basic scaffold project in <tt>./todo</tt> with:
|
26
|
+
|
27
|
+
* executable in <tt>./todo/bin/todo</tt>. This file demonstrates most of what you need to describe your command line interface.
|
28
|
+
* an empty test in <tt>./todo/test/default_test.rb</tt> that can bootstrap your tests
|
29
|
+
* an empty feature in <tt>./todo/features/todo.feature</tt> that can bootstrap testing your CLI via Aruba.
|
30
|
+
* a gemspec shell
|
31
|
+
* a README shell
|
32
|
+
* Rakefile that can generate RDoc, package your Gem and run tests
|
33
|
+
* A <tt>Gemfile</tt> suitable for use with Bundler to manage development-time dependencies
|
34
|
+
|
35
|
+
Now, you are ready to go:
|
36
|
+
|
37
|
+
> cd todo
|
38
|
+
> bundle exec bin/todo help
|
39
|
+
NAME
|
40
|
+
todo - Describe your application here
|
41
|
+
|
42
|
+
SYNOPSIS
|
43
|
+
todo [global options] command [command options] [arguments...]
|
44
|
+
|
45
|
+
VERSION
|
46
|
+
0.0.1
|
47
|
+
|
48
|
+
GLOBAL OPTIONS
|
49
|
+
-f, --flagname=The name of the argument - Describe some flag here (default: the default)
|
50
|
+
--help - Show this message
|
51
|
+
-s, --[no-]switch - Describe some switch here
|
52
|
+
|
53
|
+
COMMANDS
|
54
|
+
add - Describe add here
|
55
|
+
complete - Describe complete here
|
56
|
+
help - Shows a list of commands or help for one command
|
57
|
+
list - Describe list here
|
58
|
+
|
59
|
+
> bundle exec bin/todo help list
|
60
|
+
NAME
|
61
|
+
list - Describe list here
|
62
|
+
|
63
|
+
SYNOPSIS
|
64
|
+
todo [global options] list [command options] Describe arguments to list here
|
65
|
+
|
66
|
+
COMMAND OPTIONS
|
67
|
+
-f arg - Describe a flag to list (default: default)
|
68
|
+
-s - Describe a switch to list
|
69
|
+
|
70
|
+
All you need to do is fill in the documentation and your code; the help system, command-line parsing and many other awesome features are all handled for you.
|
71
|
+
|
72
|
+
Get a more detailed walkthrough on the {main site}[http://davetron5000.github.com/gli]
|
73
|
+
|
74
|
+
== Supported Platforms
|
75
|
+
|
76
|
+
Known to work on
|
77
|
+
|
78
|
+
* 1.8.7
|
79
|
+
* 1.9.2
|
80
|
+
* 1.9.3
|
81
|
+
* 2.0.0
|
82
|
+
* Ruby Enterprise Edition 1.8.7
|
83
|
+
* Rubinius 1.0.1
|
84
|
+
* JRuby 1.6.4
|
85
|
+
|
86
|
+
If you're interested in other versions of Ruby, let me know, and I'll add them to my test suite
|
87
|
+
|
88
|
+
== Documentation
|
89
|
+
|
90
|
+
Extensive documentation is {available at the wiki}[https://github.com/davetron5000/gli/wiki].
|
91
|
+
|
92
|
+
API Documentation is available {here}[http://davetron5000.github.com/gli/rdoc/index.html]. Recommend starting with GLI::DSL or GLI::App.
|
93
|
+
|
94
|
+
== Credits
|
95
|
+
|
96
|
+
Author:: Dave Copeland (mailto:davetron5000 at g mail dot com)
|
97
|
+
Copyright:: Copyright (c) 2010 by Dave Copeland
|
98
|
+
License:: Distributes under the Apache License, see LICENSE.txt in the source distro
|
99
|
+
|
100
|
+
== Links
|
101
|
+
|
102
|
+
* [http://davetron5000.github.com/gli] - RubyDoc
|
103
|
+
* [http://www.github.com/davetron5000/gli] - Source on GitHub
|
104
|
+
* [http://www.github.com/davetron5000/gli/wiki] - Documentation Wiki
|
105
|
+
* [http://www.github.com/davetron5000/gli/wiki/Changelog] - Changelog
|
106
|
+
|
107
|
+
= <code>gli</code> CLI documentation
|
108
|
+
|
109
|
+
:include:gli.rdoc
|
data/Rakefile
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'sdoc'
|
2
|
+
require 'bundler'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'rdoc/task'
|
6
|
+
require 'cucumber'
|
7
|
+
require 'cucumber/rake/task'
|
8
|
+
|
9
|
+
include Rake::DSL
|
10
|
+
|
11
|
+
CLEAN << "log"
|
12
|
+
CLOBBER << FileList['**/*.rbc']
|
13
|
+
|
14
|
+
|
15
|
+
task :rdoc => [:build_rdoc, :hack_css]
|
16
|
+
Rake::RDocTask.new(:build_rdoc) do |rd|
|
17
|
+
rd.main = "README.rdoc"
|
18
|
+
rd.rdoc_files = FileList["lib/**/*.rb","README.rdoc"] -
|
19
|
+
FileList["lib/gli/commands/help_modules/*.rb"] -
|
20
|
+
["lib/gli/commands/help.rb",
|
21
|
+
"lib/gli/commands/scaffold.rb",
|
22
|
+
"lib/gli/support/*.rb",
|
23
|
+
"lib/gli/app_support.rb",
|
24
|
+
"lib/gli/option_parser_factory.rb",
|
25
|
+
"lib/gli/gli_option_parser.rb",
|
26
|
+
"lib/gli/command_support.rb",]
|
27
|
+
rd.title = 'GLI - Git Like Interface for your command-line apps'
|
28
|
+
rd.options << '-f' << 'sdoc'
|
29
|
+
rd.template = 'direct'
|
30
|
+
end
|
31
|
+
|
32
|
+
FONT_FIX = {
|
33
|
+
"0.82em" => "16px",
|
34
|
+
"0.833em" => "16px",
|
35
|
+
"0.85em" => "16px",
|
36
|
+
"1.15em" => "20px",
|
37
|
+
"1.1em" => "20px",
|
38
|
+
"1.2em" => "20px",
|
39
|
+
"1.4em" => "24px",
|
40
|
+
"1.5em" => "24px",
|
41
|
+
"1.6em" => "32px",
|
42
|
+
"1em" => "16px",
|
43
|
+
"2.1em" => "38px",
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
task :hack_css do
|
48
|
+
maincss = File.open('html/css/main.css').readlines
|
49
|
+
File.open('html/css/main.css','w') do |file|
|
50
|
+
file.puts '@import url(http://fonts.googleapis.com/css?family=Karla:400,700,400italic,700italic|Alegreya);'
|
51
|
+
|
52
|
+
maincss.each do |line|
|
53
|
+
if line.strip == 'font-family: "Helvetica Neue", Arial, sans-serif;'
|
54
|
+
file.puts 'font-family: Karla, "Helvetica Neue", Arial, sans-serif;'
|
55
|
+
elsif line.strip == 'font-family: monospace;'
|
56
|
+
file.puts 'font-family: Monaco, monospace;'
|
57
|
+
elsif line =~ /^pre\s*$/
|
58
|
+
file.puts "pre {
|
59
|
+
font-family: Monaco, monospace;
|
60
|
+
margin-bottom: 1em;
|
61
|
+
}
|
62
|
+
pre.original"
|
63
|
+
elsif line =~ /^\s*font-size:\s*(.*)\s*;/
|
64
|
+
if FONT_FIX[$1]
|
65
|
+
file.puts "font-size: #{FONT_FIX[$1]};"
|
66
|
+
else
|
67
|
+
file.puts line.chomp
|
68
|
+
end
|
69
|
+
else
|
70
|
+
file.puts line.chomp
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
Bundler::GemHelper.install_tasks
|
77
|
+
|
78
|
+
desc 'run unit tests'
|
79
|
+
Rake::TestTask.new do |t|
|
80
|
+
t.libs << "test"
|
81
|
+
t.test_files = FileList['test/init_simplecov.rb','test/tc_*.rb']
|
82
|
+
end
|
83
|
+
|
84
|
+
CUKE_RESULTS = 'results.html'
|
85
|
+
CLEAN << CUKE_RESULTS
|
86
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
87
|
+
opts = "features --format html -o #{CUKE_RESULTS} --format progress -x"
|
88
|
+
opts += " --tags #{ENV['TAGS']}" if ENV['TAGS']
|
89
|
+
t.cucumber_opts = opts
|
90
|
+
t.fork = false
|
91
|
+
end
|
92
|
+
Cucumber::Rake::Task.new('features:wip') do |t|
|
93
|
+
tag_opts = ' --tags ~@pending'
|
94
|
+
tag_opts = ' --tags @wip'
|
95
|
+
t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
|
96
|
+
t.fork = false
|
97
|
+
end
|
98
|
+
|
99
|
+
begin
|
100
|
+
require 'rcov/rcovtask'
|
101
|
+
task :clobber_coverage do
|
102
|
+
rm_rf "coverage"
|
103
|
+
end
|
104
|
+
|
105
|
+
desc 'Measures test coverage'
|
106
|
+
task :coverage => :rcov do
|
107
|
+
puts "coverage/index.html contains what you need"
|
108
|
+
end
|
109
|
+
|
110
|
+
Rcov::RcovTask.new do |t|
|
111
|
+
t.libs << 'lib'
|
112
|
+
t.test_files = FileList['test/tc_*.rb']
|
113
|
+
end
|
114
|
+
rescue LoadError
|
115
|
+
begin
|
116
|
+
require 'simplecov'
|
117
|
+
rescue LoadError
|
118
|
+
$stderr.puts "neither rcov nor simplecov are installed; you won't be able to check code coverage"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
desc 'Publish rdoc on github pages and push to github'
|
123
|
+
task :publish_rdoc => [:rdoc,:publish]
|
124
|
+
|
125
|
+
task :default => [:test,:features]
|
126
|
+
|
data/bin/gli
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'gli'
|
4
|
+
require 'gli/commands/scaffold'
|
5
|
+
|
6
|
+
include GLI::App
|
7
|
+
|
8
|
+
program_desc 'create scaffolding for a GLI-powered application'
|
9
|
+
|
10
|
+
version GLI::VERSION
|
11
|
+
|
12
|
+
switch :v, :desc => 'Be verbose'
|
13
|
+
|
14
|
+
switch :n, :desc => 'Dry run; don''t change the disk'
|
15
|
+
|
16
|
+
desc 'Root dir of project'
|
17
|
+
long_desc <<EOS
|
18
|
+
This is the directory where the project''s directory will be made, so if you
|
19
|
+
specify a project name ''foo'' and the root dir of ''.'', the directory
|
20
|
+
''./foo'' will be created'
|
21
|
+
EOS
|
22
|
+
|
23
|
+
flag :r,:root, :default_value => '.'
|
24
|
+
|
25
|
+
desc 'Create a new GLI-based project'
|
26
|
+
long_desc <<EOS
|
27
|
+
This will create a scaffold command line project that uses GLI
|
28
|
+
for command line processing. Specifically, this will create
|
29
|
+
an executable ready to go, as well as a lib and test directory, all
|
30
|
+
inside the directory named for your project
|
31
|
+
EOS
|
32
|
+
arg_name 'project_name [command[ command]*]'
|
33
|
+
command [:init,:scaffold] do |c|
|
34
|
+
|
35
|
+
c.switch :e,:ext, :desc => 'Create an ext dir'
|
36
|
+
|
37
|
+
c.switch :notest, :desc => 'Do not create a test or features dir', :negatable => false
|
38
|
+
|
39
|
+
c.switch :force, :desc => 'Overwrite/ignore existing files and directories'
|
40
|
+
|
41
|
+
c.switch :rvmrc, :desc => 'Create an .rvmrc based on your current RVM setup'
|
42
|
+
|
43
|
+
c.action do |g,o,args|
|
44
|
+
if args.length < 1
|
45
|
+
raise 'You must specify the name of your project'
|
46
|
+
end
|
47
|
+
GLI::Commands::Scaffold.create_scaffold(g[:r],!o[:notest],o[:e],args[0],args[1..-1],o[:force],g[:n],o[:rvmrc])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
pre do |global,command,options,args|
|
52
|
+
puts "Executing #{command.name}" if global[:v]
|
53
|
+
true
|
54
|
+
end
|
55
|
+
|
56
|
+
post do |global,command,options,args|
|
57
|
+
puts "Executed #{command.name}" if global[:v]
|
58
|
+
end
|
59
|
+
exit run(ARGV)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'yaml'
|
3
|
+
require 'rainbow'
|
4
|
+
|
5
|
+
results = YAML::load(STDIN)
|
6
|
+
success = results["successes"] || []
|
7
|
+
errors = results["errors"] || []
|
8
|
+
success.each { |ruby| puts ruby.color(:green) }
|
9
|
+
errors.each { |ruby| puts ruby.color(:red) }
|
10
|
+
exit -1 unless errors.empty?
|
@@ -0,0 +1,6 @@
|
|
1
|
+
echo tests
|
2
|
+
rvm 1.9.2@gli-dev,1.9.3@gli-dev,1.8.7@gli-dev,jruby@gli-dev,rbx@gli-dev,ree@gli-dev --yaml rake test | bin/report_on_rake_results
|
3
|
+
rake clobber > /dev/null 2>&1
|
4
|
+
echo features
|
5
|
+
rvm 1.9.2@gli-dev,1.9.3@gli-dev,1.8.7@gli-dev,jruby@gli-dev,rbx@gli-dev,ree@gli-dev --yaml rake features | bin/report_on_rake_results
|
6
|
+
rake clobber > /dev/null 2>&1
|
@@ -0,0 +1,90 @@
|
|
1
|
+
Feature: The GLI executable works as intended
|
2
|
+
As a developer who wants to make a GLI-powered command-line app
|
3
|
+
When I use the app provided by GLI
|
4
|
+
I get a reasonably working application
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given I have GLI installed
|
8
|
+
And my terminal size is "80x24"
|
9
|
+
|
10
|
+
Scenario Outline: Getting Help for GLI
|
11
|
+
When I run `gli <command>`
|
12
|
+
Then the exit status should be 0
|
13
|
+
And the output should contain:
|
14
|
+
"""
|
15
|
+
NAME
|
16
|
+
gli - create scaffolding for a GLI-powered application
|
17
|
+
|
18
|
+
SYNOPSIS
|
19
|
+
gli [global options] command [command options] [arguments...]
|
20
|
+
|
21
|
+
VERSION
|
22
|
+
"""
|
23
|
+
And the output should contain:
|
24
|
+
"""
|
25
|
+
GLOBAL OPTIONS
|
26
|
+
--help - Show this message
|
27
|
+
-n - Dry run; dont change the disk
|
28
|
+
-r, --root=arg - Root dir of project (default: .)
|
29
|
+
-v - Be verbose
|
30
|
+
--version - Display the program version
|
31
|
+
|
32
|
+
COMMANDS
|
33
|
+
help - Shows a list of commands or help for one command
|
34
|
+
init, scaffold - Create a new GLI-based project
|
35
|
+
"""
|
36
|
+
|
37
|
+
Examples:
|
38
|
+
|command|
|
39
|
+
| |
|
40
|
+
|help |
|
41
|
+
|
42
|
+
|
43
|
+
Scenario Outline: Getting help on scaffolding
|
44
|
+
When I run `gli help <command>`
|
45
|
+
Then the exit status should be 0
|
46
|
+
And the output should contain:
|
47
|
+
"""
|
48
|
+
NAME
|
49
|
+
init - Create a new GLI-based project
|
50
|
+
|
51
|
+
SYNOPSIS
|
52
|
+
gli [global options] init [command options] project_name [command[ command]*]
|
53
|
+
|
54
|
+
DESCRIPTION
|
55
|
+
This will create a scaffold command line project that uses GLI for command
|
56
|
+
line processing. Specifically, this will create an executable ready to go,
|
57
|
+
as well as a lib and test directory, all inside the directory named for your
|
58
|
+
project
|
59
|
+
|
60
|
+
COMMAND OPTIONS
|
61
|
+
-e, --[no-]ext - Create an ext dir
|
62
|
+
--[no-]force - Overwrite/ignore existing files and directories
|
63
|
+
--notest - Do not create a test or features dir
|
64
|
+
"""
|
65
|
+
|
66
|
+
Examples:
|
67
|
+
|command |
|
68
|
+
|init |
|
69
|
+
|scaffold |
|
70
|
+
|
71
|
+
|
72
|
+
Scenario: GLI correctly identifies non-existent command
|
73
|
+
When I run `gli foobar`
|
74
|
+
Then the exit status should not be 0
|
75
|
+
And the stderr should contain "error: Unknown command 'foobar'"
|
76
|
+
|
77
|
+
Scenario: GLI correctly identifies non-existent global flag
|
78
|
+
When I run `gli -q help`
|
79
|
+
Then the exit status should not be 0
|
80
|
+
And the stderr should contain "error: Unknown option -q"
|
81
|
+
|
82
|
+
Scenario: GLI correctly identifies non-existent command flag
|
83
|
+
When I run `gli init -q`
|
84
|
+
Then the exit status should not be 0
|
85
|
+
And the stderr should contain "error: Unknown option -q"
|
86
|
+
|
87
|
+
Scenario: The _doc command doesn't blow up
|
88
|
+
Given the file "gli.rdoc" doesn't exist
|
89
|
+
When I run `gli _doc`
|
90
|
+
Then a file named "gli.rdoc" should exist
|
@@ -0,0 +1,232 @@
|
|
1
|
+
Feature: The scaffold GLI generates works
|
2
|
+
As a developer who wants to make a GLI-powered command-line app
|
3
|
+
When I generate a GLI-powered app
|
4
|
+
Things work out of the box
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given I have GLI installed
|
8
|
+
And GLI's libs are in my path
|
9
|
+
And my terminal size is "80x24"
|
10
|
+
|
11
|
+
Scenario: Scaffold generates and things look good
|
12
|
+
When I run `gli init --rvmrc todo add complete list`
|
13
|
+
Then the exit status should be 0
|
14
|
+
And the output should contain exactly:
|
15
|
+
"""
|
16
|
+
Creating dir ./todo/lib...
|
17
|
+
Creating dir ./todo/bin...
|
18
|
+
Creating dir ./todo/test...
|
19
|
+
Created ./todo/bin/todo
|
20
|
+
Created ./todo/README.rdoc
|
21
|
+
Created ./todo/todo.rdoc
|
22
|
+
Created ./todo/todo.gemspec
|
23
|
+
Created ./todo/test/default_test.rb
|
24
|
+
Created ./todo/test/test_helper.rb
|
25
|
+
Created ./todo/Rakefile
|
26
|
+
Created ./todo/Gemfile
|
27
|
+
Created ./todo/features
|
28
|
+
Created ./todo/lib/todo/version.rb
|
29
|
+
Created ./todo/lib/todo.rb
|
30
|
+
Created ./todo/.rvmrc
|
31
|
+
|
32
|
+
"""
|
33
|
+
And the following directories should exist:
|
34
|
+
|todo |
|
35
|
+
|todo/bin |
|
36
|
+
|todo/test |
|
37
|
+
|todo/lib |
|
38
|
+
And the following files should exist:
|
39
|
+
|todo/bin/todo |
|
40
|
+
|todo/README.rdoc |
|
41
|
+
|todo/todo.rdoc |
|
42
|
+
|todo/todo.gemspec |
|
43
|
+
|todo/test/default_test.rb |
|
44
|
+
|todo/test/test_helper.rb |
|
45
|
+
|todo/Rakefile |
|
46
|
+
|todo/Gemfile |
|
47
|
+
|todo/lib/todo/version.rb |
|
48
|
+
|todo/lib/todo.rb |
|
49
|
+
|todo/.rvmrc |
|
50
|
+
When I cd to "todo"
|
51
|
+
And I make sure todo's lib dir is in my lib path
|
52
|
+
And I run `bin/todo`
|
53
|
+
Then the output should contain:
|
54
|
+
"""
|
55
|
+
NAME
|
56
|
+
todo - Describe your application here
|
57
|
+
|
58
|
+
SYNOPSIS
|
59
|
+
todo [global options] command [command options] [arguments...]
|
60
|
+
|
61
|
+
VERSION
|
62
|
+
0.0.1
|
63
|
+
|
64
|
+
GLOBAL OPTIONS
|
65
|
+
-f, --flagname=The name of the argument - Describe some flag here (default:
|
66
|
+
the default)
|
67
|
+
--help - Show this message
|
68
|
+
-s, --[no-]switch - Describe some switch here
|
69
|
+
--version - Display the program version
|
70
|
+
|
71
|
+
COMMANDS
|
72
|
+
add - Describe add here
|
73
|
+
complete - Describe complete here
|
74
|
+
help - Shows a list of commands or help for one command
|
75
|
+
list - Describe list here
|
76
|
+
|
77
|
+
"""
|
78
|
+
And I run `bin/todo --help`
|
79
|
+
Then the output should contain:
|
80
|
+
"""
|
81
|
+
NAME
|
82
|
+
todo - Describe your application here
|
83
|
+
|
84
|
+
SYNOPSIS
|
85
|
+
todo [global options] command [command options] [arguments...]
|
86
|
+
|
87
|
+
VERSION
|
88
|
+
0.0.1
|
89
|
+
|
90
|
+
GLOBAL OPTIONS
|
91
|
+
-f, --flagname=The name of the argument - Describe some flag here (default:
|
92
|
+
the default)
|
93
|
+
--help - Show this message
|
94
|
+
-s, --[no-]switch - Describe some switch here
|
95
|
+
--version - Display the program version
|
96
|
+
|
97
|
+
COMMANDS
|
98
|
+
add - Describe add here
|
99
|
+
complete - Describe complete here
|
100
|
+
help - Shows a list of commands or help for one command
|
101
|
+
list - Describe list here
|
102
|
+
|
103
|
+
"""
|
104
|
+
When I run `bin/todo help add`
|
105
|
+
Then the output should contain:
|
106
|
+
"""
|
107
|
+
NAME
|
108
|
+
add - Describe add here
|
109
|
+
"""
|
110
|
+
And the output should contain:
|
111
|
+
"""
|
112
|
+
SYNOPSIS
|
113
|
+
todo [global options] add [command options] Describe arguments to add here
|
114
|
+
"""
|
115
|
+
And the output should contain:
|
116
|
+
"""
|
117
|
+
COMMAND OPTIONS
|
118
|
+
-f arg - Describe a flag to add (default: default)
|
119
|
+
-s - Describe a switch to add
|
120
|
+
"""
|
121
|
+
When I run `rake test`
|
122
|
+
Then the output should contain:
|
123
|
+
"""
|
124
|
+
.
|
125
|
+
"""
|
126
|
+
And the output should contain:
|
127
|
+
"""
|
128
|
+
|
129
|
+
1 tests, 1 assertions, 0 failures, 0 errors
|
130
|
+
"""
|
131
|
+
Given todo's libs are no longer in my load path
|
132
|
+
When I run `rake features`
|
133
|
+
Then the output should contain:
|
134
|
+
"""
|
135
|
+
1 scenario (1 passed)
|
136
|
+
"""
|
137
|
+
And the output should contain:
|
138
|
+
"""
|
139
|
+
2 steps (2 passed)
|
140
|
+
"""
|
141
|
+
|
142
|
+
Scenario Outline: Scaffold generates and respects flags to create ext dir and avoid test dir
|
143
|
+
When I run `<command>`
|
144
|
+
Then the exit status should be 0
|
145
|
+
And the output should contain exactly:
|
146
|
+
"""
|
147
|
+
Creating dir ./todo/lib...
|
148
|
+
Creating dir ./todo/bin...
|
149
|
+
Creating dir ./todo/ext...
|
150
|
+
Created ./todo/bin/todo
|
151
|
+
Created ./todo/README.rdoc
|
152
|
+
Created ./todo/todo.rdoc
|
153
|
+
Created ./todo/todo.gemspec
|
154
|
+
Created ./todo/Rakefile
|
155
|
+
Created ./todo/Gemfile
|
156
|
+
Created ./todo/lib/todo/version.rb
|
157
|
+
Created ./todo/lib/todo.rb
|
158
|
+
|
159
|
+
"""
|
160
|
+
And the following directories should exist:
|
161
|
+
|todo |
|
162
|
+
|todo/bin |
|
163
|
+
|todo/ext |
|
164
|
+
|todo/lib |
|
165
|
+
And the following directories should not exist:
|
166
|
+
|todo/test|
|
167
|
+
And the following files should exist:
|
168
|
+
|todo/bin/todo |
|
169
|
+
|todo/README.rdoc |
|
170
|
+
|todo/todo.rdoc |
|
171
|
+
|todo/todo.gemspec |
|
172
|
+
|todo/Rakefile |
|
173
|
+
|todo/Gemfile |
|
174
|
+
|todo/lib/todo/version.rb |
|
175
|
+
|todo/lib/todo.rb |
|
176
|
+
|
177
|
+
Examples:
|
178
|
+
| command |
|
179
|
+
| gli init -e --notest todo add complete list |
|
180
|
+
| gli init todo add complete list -e --notest |
|
181
|
+
|
182
|
+
Scenario: Running commands the normal way
|
183
|
+
Given I successfully run `gli init todo add complete compute list`
|
184
|
+
And I cd to "todo"
|
185
|
+
And I make sure todo's lib dir is in my lib path
|
186
|
+
When I successfully run `bin/todo add`
|
187
|
+
Then the output should contain "add command ran"
|
188
|
+
When I successfully run `bin/todo complete`
|
189
|
+
Then the output should contain "complete command ran"
|
190
|
+
When I run `bin/todo foobar`
|
191
|
+
Then the stderr should contain "error: Unknown command 'foobar'"
|
192
|
+
And the exit status should not be 0
|
193
|
+
|
194
|
+
Scenario: Running commands using short form
|
195
|
+
Given I successfully run `gli init todo add complete compute list`
|
196
|
+
And I cd to "todo"
|
197
|
+
And I make sure todo's lib dir is in my lib path
|
198
|
+
When I successfully run `bin/todo a`
|
199
|
+
Then the output should contain "add command ran"
|
200
|
+
When I successfully run `bin/todo l`
|
201
|
+
Then the output should contain "list command ran"
|
202
|
+
When I successfully run `bin/todo compl`
|
203
|
+
Then the output should contain "complete command ran"
|
204
|
+
|
205
|
+
Scenario: Ambiguous commands give helpful output
|
206
|
+
Given I successfully run `gli init todo add complete compute list`
|
207
|
+
And I cd to "todo"
|
208
|
+
And I make sure todo's lib dir is in my lib path
|
209
|
+
When I run `bin/todo comp`
|
210
|
+
Then the stderr should contain "Ambiguous command 'comp'. It matches complete,compute"
|
211
|
+
And the exit status should not be 0
|
212
|
+
|
213
|
+
Scenario: Running generated command without bundler gives a helpful error message
|
214
|
+
Given I successfully run `gli init todo add complete compute list`
|
215
|
+
And I cd to "todo"
|
216
|
+
When I run `bin/todo comp`
|
217
|
+
Then the exit status should not be 0
|
218
|
+
Then the stderr should contain "In development, you need to use `bundle exec bin/todo` to run your app"
|
219
|
+
And the stderr should contain "At install-time, RubyGems will make sure lib, etc. are in the load path"
|
220
|
+
And the stderr should contain "Feel free to remove this message from bin/todo now"
|
221
|
+
|
222
|
+
Scenario: Running commands with a dash in the name
|
223
|
+
Given I successfully run `gli init todo-app add complete compute list`
|
224
|
+
And I cd to "todo-app"
|
225
|
+
And I make sure todo's lib dir is in my lib path
|
226
|
+
When I successfully run `bin/todo-app add`
|
227
|
+
Then the output should contain "add command ran"
|
228
|
+
When I successfully run `bin/todo-app complete`
|
229
|
+
Then the output should contain "complete command ran"
|
230
|
+
When I run `bin/todo-app foobar`
|
231
|
+
Then the stderr should contain "error: Unknown command 'foobar'"
|
232
|
+
And the exit status should not be 0
|