cli-template 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
[](https://circleci.com/gh/tongueroo/cli-template)
|
4
4
|
[](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
|