cli-template 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +11 -1
- data/lib/cli-template/sequence.rb +1 -1
- data/lib/cli-template/version.rb +1 -1
- data/lib/templates/{skeleton → default}/%project_name%.gemspec.tt +0 -0
- data/lib/templates/{skeleton → default}/.gitignore +0 -0
- data/lib/templates/{skeleton → default}/.rspec +0 -0
- data/lib/templates/{skeleton → default}/CHANGELOG.md +0 -0
- data/lib/templates/{skeleton → default}/Gemfile.tt +0 -0
- data/lib/templates/{skeleton → default}/Guardfile +0 -0
- data/lib/templates/{skeleton → default}/LICENSE.txt +0 -0
- data/lib/templates/{skeleton → default}/README.md.tt +0 -0
- data/lib/templates/{skeleton → default}/Rakefile +0 -0
- data/lib/templates/{skeleton → default}/exe/%project_name%.tt +0 -0
- data/lib/templates/{skeleton → default}/lib/%project_name%.rb.tt +2 -0
- data/lib/templates/{skeleton → default}/lib/%underscored_name%/cli.rb.tt +13 -7
- data/lib/templates/{skeleton → default}/lib/%underscored_name%/command.rb.tt +26 -13
- data/lib/templates/default/lib/%underscored_name%/completer.rb.tt +138 -0
- data/lib/templates/default/lib/%underscored_name%/completer/script.rb.tt +6 -0
- data/lib/templates/default/lib/%underscored_name%/completer/script.sh.tt +16 -0
- data/lib/templates/default/lib/%underscored_name%/completions.rb.tt +9 -0
- data/lib/templates/{skeleton → default}/lib/%underscored_name%/help.rb.tt +0 -0
- data/lib/templates/default/lib/%underscored_name%/help/completions.md.tt +18 -0
- data/lib/templates/default/lib/%underscored_name%/help/completions/script.md.tt +3 -0
- data/lib/templates/default/lib/%underscored_name%/help/hello.md.tt +5 -0
- data/lib/templates/default/lib/%underscored_name%/help/sub/goodbye.md.tt +5 -0
- data/lib/templates/{skeleton → default}/lib/%underscored_name%/main.rb.tt +6 -0
- data/lib/templates/{skeleton → default}/lib/%underscored_name%/rake_command.rb.tt +0 -0
- data/lib/templates/{skeleton → default}/lib/%underscored_name%/sub.rb.tt +0 -0
- data/lib/templates/{skeleton → default}/lib/%underscored_name%/version.rb.tt +0 -0
- data/lib/templates/default/spec/lib/cli_spec.rb.tt +37 -0
- data/lib/templates/{skeleton → default}/spec/spec_helper.rb.tt +0 -0
- metadata +30 -24
- data/lib/templates/skeleton/lib/%underscored_name%/help/hello.md.tt +0 -3
- data/lib/templates/skeleton/lib/%underscored_name%/help/sub/goodbye.md.tt +0 -3
- data/lib/templates/skeleton/spec/lib/cli_spec.rb.tt +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5cec11731996364ad6e192824c457ce0800423eb72ac4782bdf72bfb8fd32155
|
4
|
+
data.tar.gz: 8a5748d23604d64f35a5ecc98d6fbf1610cde7ac848c8480be36629d4dd3d5b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ad85e072ea3ca0c17b63c568034d0d962b3d12baa8c848efa585c6d21aa3bd8c49c2f6305ca73fd63002fbafd1a7c600037e0952419336ffcf2420562ffcc36
|
7
|
+
data.tar.gz: 33a433e8b3b050a39f9fd11563d6c12843e7979d18a0f0401a5d1b61813e6dd419cb6b0f6fd57a1d18ed1328c045f2ded87968a061915787940211d6e9fdcaa4
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
5
|
|
6
|
+
## [3.1.0]
|
7
|
+
- Merge pull request #1 from tongueroo/completions: support for TAB auto-completion
|
8
|
+
- add completions command to starter project
|
9
|
+
- add completions:script command
|
10
|
+
|
6
11
|
## [3.0.0]
|
7
12
|
- tool is now called cli-template
|
8
13
|
- namespaced commands support
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[![CircleCI](https://circleci.com/gh/tongueroo/cli-template.svg?style=svg)](https://circleci.com/gh/tongueroo/cli-template)
|
4
4
|
[![Maintainability](https://api.codeclimate.com/v1/badges/c6c4f26aaafccab10baf/maintainability)](https://codeclimate.com/github/tongueroo/cli-template/maintainability)
|
5
5
|
|
6
|
-
`cli-template` is a generator tool that builds a starter CLI project based on [Thor](http://whatisthor.com/). It is the successor tool to [thor_template](https://github.com/tongueroo/thor_template), which is also a tool that generates CLI projects. The main difference is `cli-template`
|
6
|
+
`cli-template` is a generator tool that builds a starter CLI project based on [Thor](http://whatisthor.com/). It is the successor tool to [thor_template](https://github.com/tongueroo/thor_template), which is also a tool that generates CLI projects. The main difference is `cli-template` uses colons for namespaced commands. The usage section demonstrates a namespaced command below.
|
7
7
|
|
8
8
|
The predecessor tool is covered in this original blog post, [Build Thor CLI Project in Under a Second](https://blog.boltops.com/2017/09/14/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.
|
9
9
|
|
@@ -43,6 +43,16 @@ And run:
|
|
43
43
|
rake release
|
44
44
|
```
|
45
45
|
|
46
|
+
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.
|
47
|
+
|
48
|
+
## Auto Completion
|
49
|
+
|
50
|
+
The generated CLI tool supports TAB auto-completion. To enable auto, you can add this to your `~/.bashrc` or `~/.profile`:
|
51
|
+
|
52
|
+
eval $(mycli completions:script)
|
53
|
+
|
54
|
+
Remember to re-load your shell. Note, the auto completion will only work once you tool is installed and it's binary is avaialble in your PATH.
|
55
|
+
|
46
56
|
## Installation
|
47
57
|
|
48
58
|
```sh
|
data/lib/cli-template/version.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -7,4 +7,6 @@ module <%= project_class_name %>
|
|
7
7
|
autoload :RakeCommand, "<%= underscored_name %>/rake_command"
|
8
8
|
autoload :CLI, "<%= underscored_name %>/cli"
|
9
9
|
autoload :Sub, "<%= underscored_name %>/sub"
|
10
|
+
autoload :Completions, "<%= underscored_name %>/completions"
|
11
|
+
autoload :Completer, "<%= underscored_name %>/completer"
|
10
12
|
end
|
@@ -33,8 +33,8 @@ class <%= project_class_name %>::CLI
|
|
33
33
|
|
34
34
|
# thor_args normalized the args Array to work with our Thor command
|
35
35
|
# subclasses.
|
36
|
-
# 1. The namespace is
|
37
|
-
# 2.
|
36
|
+
# 1. The namespace is stripped
|
37
|
+
# 2. The help is shifted in front if a help flag is detected
|
38
38
|
def thor_args
|
39
39
|
args = @given_args.clone
|
40
40
|
|
@@ -69,8 +69,12 @@ class <%= project_class_name %>::CLI
|
|
69
69
|
end
|
70
70
|
|
71
71
|
# 1. look up Thor tasks
|
72
|
-
# 2. look up Rake tasks
|
72
|
+
# 2. look up Rake tasks - currently disabled
|
73
73
|
# 3. help menu with all commands when both Thor and Rake tasks are not found
|
74
|
+
#
|
75
|
+
# Example:
|
76
|
+
#
|
77
|
+
# lookup("sub:hello") => Sub
|
74
78
|
def lookup(full_command)
|
75
79
|
thor_task_found = <%= project_class_name %>::Command.namespaced_commands.include?(full_command)
|
76
80
|
if thor_task_found
|
@@ -131,10 +135,12 @@ class <%= project_class_name %>::CLI
|
|
131
135
|
shell.say "Commands:"
|
132
136
|
shell.print_table(thor_list, :indent => 2, :truncate => true)
|
133
137
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
+
# TODO: commenting out for now, feels weird to show the rake tasks
|
139
|
+
# automatically also by default. Maybe add an option for this.
|
140
|
+
# unless rake_list.empty?
|
141
|
+
# shell.say "\nCommands via rake:"
|
142
|
+
# shell.print_table(rake_list, :indent => 2, :truncate => true)
|
143
|
+
# end
|
138
144
|
|
139
145
|
shell.say "\n"
|
140
146
|
shell.say main_help_body
|
@@ -22,10 +22,8 @@ module <%= project_class_name %>
|
|
22
22
|
# ["help"]
|
23
23
|
# ["dynamodb:migrate"]
|
24
24
|
#
|
25
|
-
# Same signature as RakeCommand.perform.
|
26
|
-
#
|
27
|
-
# To call a thor task via ruby.
|
28
|
-
# Signature is a little weird with the repetition, examples:
|
25
|
+
# Same signature as RakeCommand.perform. Signature is a little weird
|
26
|
+
# with some repetition. Examples:
|
29
27
|
#
|
30
28
|
# <%= project_class_name %>::Main.perform("hello", ["hello"])
|
31
29
|
# <%= project_class_name %>::Main.perform("dynamodb:migrate", ["migrate"])
|
@@ -66,22 +64,33 @@ module <%= project_class_name %>
|
|
66
64
|
next
|
67
65
|
end
|
68
66
|
|
69
|
-
|
70
|
-
special_cases = {
|
71
|
-
"<%= project_class_name %>::Cli" => "<%= project_class_name %>::CLI",
|
72
|
-
"<%= project_class_name %>::Version" => "<%= project_class_name %>::VERSION",
|
73
|
-
}
|
74
|
-
class_name = special_cases[class_name] || class_name
|
67
|
+
class_name = class_map[class_name] || class_name
|
75
68
|
|
76
69
|
puts "eager_load! loading path: #{path} class_name: #{class_name}" if debug?
|
77
70
|
class_name.constantize # dont have to worry about order.
|
78
71
|
end
|
79
72
|
end
|
80
73
|
|
74
|
+
# Special class mapping cases. This is because ActiveSupport's autoloading
|
75
|
+
# forces a specific naming convention.
|
76
|
+
def class_map
|
77
|
+
map = {
|
78
|
+
"<%= project_class_name %>::Cli" => "<%= project_class_name %>::CLI",
|
79
|
+
"<%= project_class_name %>::Version" => "<%= project_class_name %>::VERSION",
|
80
|
+
"<%= project_class_name %>::Completion" => "<%= project_class_name %>::Completions",
|
81
|
+
}
|
82
|
+
map.merge(additional_class_map)
|
83
|
+
map
|
84
|
+
end
|
85
|
+
|
86
|
+
# Override this if you need add addtional class mappings.
|
87
|
+
def additional_class_map
|
88
|
+
{}
|
89
|
+
end
|
90
|
+
|
81
91
|
# Fully qualifed task names. Examples:
|
82
|
-
#
|
83
|
-
#
|
84
|
-
# dynamodb:migrate:down
|
92
|
+
# hello
|
93
|
+
# sub:goodbye
|
85
94
|
def namespaced_commands
|
86
95
|
eager_load!
|
87
96
|
subclasses.map do |klass|
|
@@ -124,12 +133,16 @@ module <%= project_class_name %>
|
|
124
133
|
list.sort_by! { |array| array[0] }
|
125
134
|
end
|
126
135
|
|
136
|
+
# Example:
|
137
|
+
# klass_from_namespace(nil) => Main
|
138
|
+
# klass_from_namespace("sub") => Sub
|
127
139
|
def klass_from_namespace(namespace)
|
128
140
|
if namespace.nil?
|
129
141
|
<%= project_class_name %>::Main
|
130
142
|
else
|
131
143
|
class_name = namespace.gsub(':','/')
|
132
144
|
class_name = "<%= project_class_name %>::#{class_name.classify}"
|
145
|
+
class_name = class_map[class_name] || class_name
|
133
146
|
class_name.constantize
|
134
147
|
end
|
135
148
|
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
# Code Explanation. This is mainly focused on the run method.
|
2
|
+
#
|
3
|
+
# There are 3 main branches of logic for completions:
|
4
|
+
#
|
5
|
+
# 1. top-level commands - when there are zero completed words
|
6
|
+
# 2. params completions - when a command has some required params
|
7
|
+
# 3. options completions - when we have finished auto-completing the top-level command and required params, the rest of the completion words will be options
|
8
|
+
#
|
9
|
+
# Terms:
|
10
|
+
#
|
11
|
+
# params - these are params in the command itself. Example: for the method `scale(service, count)` the params would be `service, count`.
|
12
|
+
# options - these are cli options flags. Examples: --noop, --verbose
|
13
|
+
#
|
14
|
+
# When we are done processing method params, the completions will be only options. When the detected params size is greater than the arity we are have finished auto-completing the parameters in the method declaration. For example, say you had a method for a CLI command with the following form:
|
15
|
+
#
|
16
|
+
# scale(service, count) = arity of 2
|
17
|
+
#
|
18
|
+
# <%= project_name %> scale service count [TAB] # there are 3 params including the "scale" command
|
19
|
+
#
|
20
|
+
# So the completions will be something like:
|
21
|
+
#
|
22
|
+
# --noop --verbose etc
|
23
|
+
#
|
24
|
+
# A note about artity values:
|
25
|
+
#
|
26
|
+
# We are using the arity of the command method to determine if we have finish auto-completing the params completions. When the ruby method has a splat param, it's arity will be negative. Here are some example methods and their arities.
|
27
|
+
#
|
28
|
+
# ship(service) = 1
|
29
|
+
# scale(service, count) = 2
|
30
|
+
# ships(*services) = -1
|
31
|
+
# foo(example, *rest) = -2
|
32
|
+
#
|
33
|
+
# Fortunately, negative and positive arity values are processed the same way. So we take simply take the abs of the arity.
|
34
|
+
#
|
35
|
+
# To test:
|
36
|
+
#
|
37
|
+
# <%= project_name %> completions
|
38
|
+
# <%= project_name %> completions hello
|
39
|
+
# <%= project_name %> completions hello name
|
40
|
+
# <%= project_name %> completions hello name --
|
41
|
+
# <%= project_name %> completions hello name --noop
|
42
|
+
#
|
43
|
+
# <%= project_name %> completions
|
44
|
+
# <%= project_name %> completions sub:goodbye
|
45
|
+
# <%= project_name %> completions sub:goodbye name
|
46
|
+
#
|
47
|
+
# Note when testing, the first top-level word must be an exact match
|
48
|
+
#
|
49
|
+
# <%= project_name %> completions hello # works fine
|
50
|
+
# <%= project_name %> completions he # incomplete, this will just break
|
51
|
+
#
|
52
|
+
# The completions assumes that the top-level word that is being passed in
|
53
|
+
# from completor/scripts.sh will always match exactly. This must be the
|
54
|
+
# case. For parameters, the word does not have to match exactly.
|
55
|
+
#
|
56
|
+
module <%= project_class_name %>
|
57
|
+
class Completer
|
58
|
+
autoload :Script, '<%= underscored_name %>/completer/script'
|
59
|
+
|
60
|
+
def initialize(*params)
|
61
|
+
@params = params
|
62
|
+
end
|
63
|
+
|
64
|
+
def current_command
|
65
|
+
@params[0]
|
66
|
+
end
|
67
|
+
|
68
|
+
# Example: sub:goodbye => "sub"
|
69
|
+
def namespace
|
70
|
+
return nil unless current_command
|
71
|
+
|
72
|
+
if current_command.include?(':')
|
73
|
+
words = current_command.split(':')
|
74
|
+
words.pop
|
75
|
+
words.join(':')
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Example: sub:goodbye => "goodbye"
|
80
|
+
def trailing_command
|
81
|
+
current_command.split(':').last
|
82
|
+
end
|
83
|
+
|
84
|
+
def run
|
85
|
+
if @params.size == 0
|
86
|
+
puts all_commands
|
87
|
+
return
|
88
|
+
end
|
89
|
+
|
90
|
+
# will only get to here if the top-level command has been fully auto-completed.
|
91
|
+
arity = command_class.instance_method(trailing_command).arity.abs
|
92
|
+
if @params.size <= arity
|
93
|
+
puts params_completions(current_command)
|
94
|
+
else
|
95
|
+
puts options_completions(current_command)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# all top-level commands
|
100
|
+
def all_commands
|
101
|
+
# Interesing, extra :help commands show up here but no whne using
|
102
|
+
# <%= project_class_name %>::Command.help_list in main_help -> thor_list
|
103
|
+
# We'll filter out :help for auto-completion.
|
104
|
+
commands = <%= project_class_name %>::Command.namespaced_commands
|
105
|
+
commands.reject { |c| c =~ /:help$/ }
|
106
|
+
end
|
107
|
+
|
108
|
+
def params_completions(current_command)
|
109
|
+
method_params = command_class.instance_method(trailing_command).parameters
|
110
|
+
# Example:
|
111
|
+
# >> Sub.instance_method(:goodbye).parameters
|
112
|
+
# => [[:req, :name]]
|
113
|
+
# >>
|
114
|
+
method_params.map!(&:last)
|
115
|
+
|
116
|
+
offset = @params.size - 1
|
117
|
+
offset_params = method_params[offset..-1]
|
118
|
+
method_params[offset..-1].first
|
119
|
+
end
|
120
|
+
|
121
|
+
def options_completions(current_command)
|
122
|
+
used = ARGV.select { |a| a.include?('--') } # so we can remove used options
|
123
|
+
|
124
|
+
method_options = command_class.all_commands[trailing_command].options.keys
|
125
|
+
class_options = command_class.class_options.keys
|
126
|
+
|
127
|
+
all_options = method_options + class_options
|
128
|
+
|
129
|
+
all_options.map! { |o| "--#{o.to_s.dasherize}" }
|
130
|
+
filtered_options = all_options - used
|
131
|
+
filtered_options
|
132
|
+
end
|
133
|
+
|
134
|
+
def command_class
|
135
|
+
@command_class ||= <%= project_class_name %>::Command.klass_from_namespace(namespace)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
_<%= project_name %>() {
|
2
|
+
COMPREPLY=()
|
3
|
+
local word="${COMP_WORDS[COMP_CWORD]}"
|
4
|
+
|
5
|
+
if [ "$COMP_CWORD" -eq 1 ]; then
|
6
|
+
local completions=$(<%= project_name %> completions)
|
7
|
+
COMPREPLY=( $(compgen -W "$completions" -- "$word") )
|
8
|
+
else
|
9
|
+
local words=("${COMP_WORDS[@]}")
|
10
|
+
unset words[0]
|
11
|
+
local completions=$(<%= project_name %> completions ${words[@]})
|
12
|
+
COMPREPLY=( $(compgen -W "$completions" -- "$word") )
|
13
|
+
fi
|
14
|
+
}
|
15
|
+
|
16
|
+
complete -F _<%= project_name %> <%= project_name %>
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Prints words for TAB auto-completion.
|
2
|
+
|
3
|
+
Examples:
|
4
|
+
|
5
|
+
<%= project_name %> completions
|
6
|
+
<%= project_name %> completions hello
|
7
|
+
<%= project_name %> completions hello name
|
8
|
+
|
9
|
+
To enable, TAB auto-completion add the following to your profile:
|
10
|
+
|
11
|
+
eval $(<%= project_name %> completions:script)
|
12
|
+
|
13
|
+
Auto-completion example usage:
|
14
|
+
|
15
|
+
<%= project_name %> [TAB]
|
16
|
+
<%= project_name %> hello [TAB]
|
17
|
+
<%= project_name %> hello name [TAB]
|
18
|
+
<%= project_name %> hello name --[TAB]
|
@@ -13,6 +13,12 @@ module <%= project_class_name %>
|
|
13
13
|
puts "Hello #{name}"
|
14
14
|
end
|
15
15
|
|
16
|
+
desc "completions *PARAMS", "prints words for auto-completion"
|
17
|
+
long_desc Help.text(:completions)
|
18
|
+
def completions(*params)
|
19
|
+
Completer.new(*params).run
|
20
|
+
end
|
21
|
+
|
16
22
|
desc "version", "prints version"
|
17
23
|
def version
|
18
24
|
puts VERSION
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe <%= project_class_name %>::CLI do
|
4
|
+
before(:all) do
|
5
|
+
@args = "--from Tung"
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "<%= project_name %>" do
|
9
|
+
it "hello" do
|
10
|
+
out = execute("exe/<%= project_name %> hello world #{@args}")
|
11
|
+
expect(out).to include("from: Tung\nHello world")
|
12
|
+
end
|
13
|
+
|
14
|
+
it "goodbye" do
|
15
|
+
out = execute("exe/<%= project_name %> sub:goodbye world #{@args}")
|
16
|
+
expect(out).to include("from: Tung\nGoodbye world")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "completions" do
|
20
|
+
out = execute("exe/<%= project_name %> completions")
|
21
|
+
expect(out).to include("hello")
|
22
|
+
expect(out).to include("sub:goodbye")
|
23
|
+
|
24
|
+
out = execute("exe/<%= project_name %> completions hello")
|
25
|
+
expect(out).to include("name")
|
26
|
+
|
27
|
+
out = execute("exe/<%= project_name %> completions hello name")
|
28
|
+
expect(out).to include("--from")
|
29
|
+
|
30
|
+
out = execute("exe/<%= project_name %> completions sub:goodbye")
|
31
|
+
expect(out).to include("name")
|
32
|
+
|
33
|
+
out = execute("exe/<%= project_name %> completions sub:goodbye name")
|
34
|
+
expect(out).to include("--from")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cli-template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -164,28 +164,34 @@ files:
|
|
164
164
|
- lib/cli-template/new.rb
|
165
165
|
- lib/cli-template/sequence.rb
|
166
166
|
- lib/cli-template/version.rb
|
167
|
-
- lib/templates/
|
168
|
-
- lib/templates/
|
169
|
-
- lib/templates/
|
170
|
-
- lib/templates/
|
171
|
-
- lib/templates/
|
172
|
-
- lib/templates/
|
173
|
-
- lib/templates/
|
174
|
-
- lib/templates/
|
175
|
-
- lib/templates/
|
176
|
-
- lib/templates/
|
177
|
-
- lib/templates/
|
178
|
-
- lib/templates/
|
179
|
-
- lib/templates/
|
180
|
-
- lib/templates/
|
181
|
-
- lib/templates/
|
182
|
-
- lib/templates/
|
183
|
-
- lib/templates/
|
184
|
-
- lib/templates/
|
185
|
-
- lib/templates/
|
186
|
-
- lib/templates/
|
187
|
-
- lib/templates/
|
188
|
-
- lib/templates/
|
167
|
+
- lib/templates/default/%project_name%.gemspec.tt
|
168
|
+
- lib/templates/default/.gitignore
|
169
|
+
- lib/templates/default/.rspec
|
170
|
+
- lib/templates/default/CHANGELOG.md
|
171
|
+
- lib/templates/default/Gemfile.tt
|
172
|
+
- lib/templates/default/Guardfile
|
173
|
+
- lib/templates/default/LICENSE.txt
|
174
|
+
- lib/templates/default/README.md.tt
|
175
|
+
- lib/templates/default/Rakefile
|
176
|
+
- lib/templates/default/exe/%project_name%.tt
|
177
|
+
- lib/templates/default/lib/%project_name%.rb.tt
|
178
|
+
- lib/templates/default/lib/%underscored_name%/cli.rb.tt
|
179
|
+
- lib/templates/default/lib/%underscored_name%/command.rb.tt
|
180
|
+
- lib/templates/default/lib/%underscored_name%/completer.rb.tt
|
181
|
+
- lib/templates/default/lib/%underscored_name%/completer/script.rb.tt
|
182
|
+
- lib/templates/default/lib/%underscored_name%/completer/script.sh.tt
|
183
|
+
- lib/templates/default/lib/%underscored_name%/completions.rb.tt
|
184
|
+
- lib/templates/default/lib/%underscored_name%/help.rb.tt
|
185
|
+
- lib/templates/default/lib/%underscored_name%/help/completions.md.tt
|
186
|
+
- lib/templates/default/lib/%underscored_name%/help/completions/script.md.tt
|
187
|
+
- lib/templates/default/lib/%underscored_name%/help/hello.md.tt
|
188
|
+
- lib/templates/default/lib/%underscored_name%/help/sub/goodbye.md.tt
|
189
|
+
- lib/templates/default/lib/%underscored_name%/main.rb.tt
|
190
|
+
- lib/templates/default/lib/%underscored_name%/rake_command.rb.tt
|
191
|
+
- lib/templates/default/lib/%underscored_name%/sub.rb.tt
|
192
|
+
- lib/templates/default/lib/%underscored_name%/version.rb.tt
|
193
|
+
- lib/templates/default/spec/lib/cli_spec.rb.tt
|
194
|
+
- lib/templates/default/spec/spec_helper.rb.tt
|
189
195
|
- spec/lib/cli_spec.rb
|
190
196
|
- spec/spec_helper.rb
|
191
197
|
homepage: https://gitub.com/tongueroo/cli-template
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
# to run specs with what"s remembered from vcr
|
4
|
-
# $ rake
|
5
|
-
#
|
6
|
-
# to run specs with new fresh data from aws api calls
|
7
|
-
# $ rake clean:vcr ; time rake
|
8
|
-
describe <%= project_class_name %>::CLI do
|
9
|
-
before(:all) do
|
10
|
-
@args = "--from Tung"
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "<%= project_name %>" do
|
14
|
-
it "should hello world" do
|
15
|
-
out = execute("exe/<%= project_name %> hello world #{@args}")
|
16
|
-
expect(out).to include("from: Tung\nHello world")
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should goodbye world" do
|
20
|
-
out = execute("exe/<%= project_name %> sub:goodbye world #{@args}")
|
21
|
-
expect(out).to include("from: Tung\nGoodbye world")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|