cli-template 3.0.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.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +58 -0
  3. data/.gitignore +17 -0
  4. data/.rspec +4 -0
  5. data/CHANGELOG.md +48 -0
  6. data/Gemfile +6 -0
  7. data/Guardfile +11 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +58 -0
  10. data/Rakefile +32 -0
  11. data/cli-template.gemspec +32 -0
  12. data/exe/cli-template +9 -0
  13. data/lib/cli-template.rb +12 -0
  14. data/lib/cli-template/cli.rb +17 -0
  15. data/lib/cli-template/command.rb +47 -0
  16. data/lib/cli-template/help.rb +9 -0
  17. data/lib/cli-template/help/new.md +4 -0
  18. data/lib/cli-template/helpers.rb +12 -0
  19. data/lib/cli-template/new.rb +74 -0
  20. data/lib/cli-template/sequence.rb +45 -0
  21. data/lib/cli-template/version.rb +3 -0
  22. data/lib/templates/skeleton/%project_name%.gemspec.tt +30 -0
  23. data/lib/templates/skeleton/.gitignore +16 -0
  24. data/lib/templates/skeleton/.rspec +2 -0
  25. data/lib/templates/skeleton/CHANGELOG.md +7 -0
  26. data/lib/templates/skeleton/Gemfile.tt +6 -0
  27. data/lib/templates/skeleton/Guardfile +19 -0
  28. data/lib/templates/skeleton/LICENSE.txt +22 -0
  29. data/lib/templates/skeleton/README.md.tt +47 -0
  30. data/lib/templates/skeleton/Rakefile +6 -0
  31. data/lib/templates/skeleton/exe/%project_name%.tt +14 -0
  32. data/lib/templates/skeleton/lib/%project_name%.rb.tt +10 -0
  33. data/lib/templates/skeleton/lib/%underscored_name%/cli.rb.tt +170 -0
  34. data/lib/templates/skeleton/lib/%underscored_name%/command.rb.tt +164 -0
  35. data/lib/templates/skeleton/lib/%underscored_name%/help.rb.tt +9 -0
  36. data/lib/templates/skeleton/lib/%underscored_name%/help/hello.md.tt +3 -0
  37. data/lib/templates/skeleton/lib/%underscored_name%/help/sub/goodbye.md.tt +3 -0
  38. data/lib/templates/skeleton/lib/%underscored_name%/main.rb.tt +21 -0
  39. data/lib/templates/skeleton/lib/%underscored_name%/rake_command.rb.tt +63 -0
  40. data/lib/templates/skeleton/lib/%underscored_name%/sub.rb.tt +12 -0
  41. data/lib/templates/skeleton/lib/%underscored_name%/version.rb.tt +3 -0
  42. data/lib/templates/skeleton/spec/lib/cli_spec.rb.tt +24 -0
  43. data/lib/templates/skeleton/spec/spec_helper.rb.tt +29 -0
  44. data/spec/lib/cli_spec.rb +61 -0
  45. data/spec/spec_helper.rb +33 -0
  46. metadata +217 -0
@@ -0,0 +1,9 @@
1
+ module <%= project_class_name %>::Help
2
+ class << self
3
+ def text(namespaced_command)
4
+ path = namespaced_command.to_s.gsub(':','/')
5
+ path = File.expand_path("../help/#{path}.md", __FILE__)
6
+ IO.read(path) if File.exist?(path)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ Examples:
2
+
3
+ <%= project_name %> hello
@@ -0,0 +1,3 @@
1
+ Examples:
2
+
3
+ <%= project_name %> sub:goodbye
@@ -0,0 +1,21 @@
1
+ require "thor"
2
+
3
+ module <%= project_class_name %>
4
+ class Main < Command
5
+ class_option :verbose, type: :boolean
6
+ class_option :noop, type: :boolean
7
+
8
+ desc "hello NAME", "say hello to NAME"
9
+ long_desc Help.text(:hello)
10
+ option :from, desc: "from person"
11
+ def hello(name="you")
12
+ puts "from: #{options[:from]}" if options[:from]
13
+ puts "Hello #{name}"
14
+ end
15
+
16
+ desc "version", "prints version"
17
+ def version
18
+ puts VERSION
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,63 @@
1
+ require "rake"
2
+
3
+ class <%= project_class_name %>::RakeCommand
4
+ class << self
5
+ # Same signature as <%= project_class_name %>::Command.perform.
6
+ def perform(namespaced_command, thor_args)
7
+ if thor_args.first == "help"
8
+ puts help_message(namespaced_command)
9
+ return
10
+ end
11
+
12
+ require_rake
13
+
14
+ ARGV.unshift(namespaced_command) # Prepend the task, so Rake knows how to run it.
15
+
16
+ rake.standard_exception_handling do
17
+ rake.init("<%= project_name %>")
18
+ rake.load_rakefile
19
+ rake.top_level
20
+ end
21
+ end
22
+
23
+ # Useful for CLI.lookup.
24
+ def namespaced_commands
25
+ formatted_rake_tasks(true).map(&:first)
26
+ end
27
+
28
+ def formatted_rake_tasks(all=false)
29
+ rake_tasks(all).map do |t|
30
+ comment = "# #{t.comment}" if t.comment
31
+ [ t.name_with_args, comment ]
32
+ end
33
+ end
34
+
35
+ def rake_tasks(all=false)
36
+ require_rake
37
+
38
+ Rake::TaskManager.record_task_metadata = true
39
+ rake.instance_variable_set(:@name, "<%= project_name %>")
40
+ load "Rakefile" if File.exist?("Rakefile")
41
+ tasks = rake.tasks
42
+ tasks = tasks.select(&:comment) unless all
43
+ tasks
44
+ end
45
+
46
+ def help_message(namespaced_command)
47
+ task = rake_tasks(true).find { |t| t.name == namespaced_command }
48
+ message = "Help provided by rake task:\n\n"
49
+ message << "<%= project_name %> #{task.name_with_args.dup}\n"
50
+ message << " #{task.full_comment}"
51
+ message
52
+ end
53
+
54
+ private
55
+ def rake
56
+ Rake.application
57
+ end
58
+
59
+ def require_rake
60
+ require "rake" # Defer booting Rake until we know it's needed.
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,12 @@
1
+ module <%= project_class_name %>
2
+ class Sub < Command
3
+
4
+ desc "goodbye NAME", "say goodbye to NAME"
5
+ long_desc Help.text("sub:goodbye")
6
+ option :from, desc: "from person"
7
+ def goodbye(name="you")
8
+ puts "from: #{options[:from]}" if options[:from]
9
+ puts "Goodbye #{name}"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module <%= project_class_name %>
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,24 @@
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
@@ -0,0 +1,29 @@
1
+ ENV["TEST"] = "1"
2
+
3
+ # CodeClimate test coverage: https://docs.codeclimate.com/docs/configuring-test-coverage
4
+ # require 'simplecov'
5
+ # SimpleCov.start
6
+
7
+ require "pp"
8
+
9
+ root = File.expand_path("../../", __FILE__)
10
+ require "#{root}/lib/<%= project_name %>"
11
+
12
+ module Helpers
13
+ def execute(cmd)
14
+ puts "Running: #{cmd}" if show_command?
15
+ out = `#{cmd}`
16
+ puts out if show_command?
17
+ out
18
+ end
19
+
20
+ # Added SHOW_COMMAND because DEBUG is also used by other libraries like
21
+ # bundler and it shows its internal debugging logging also.
22
+ def show_command?
23
+ ENV['DEBUG'] || ENV['SHOW_COMMAND']
24
+ end
25
+ end
26
+
27
+ RSpec.configure do |c|
28
+ c.include Helpers
29
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ # This spec tests the generator with various forms of project names:
4
+ #
5
+ # hello, my_cli, my-cli, MyCLI
6
+ #
7
+ # The tests shell out and execute the new command to ensures a high level of
8
+ # confidence that the CLI generator works in real life.
9
+ #
10
+ # It also executes the generates specs of the new project to ensure specs
11
+ # also pass.
12
+ #
13
+ # Because it shells out tests take about 20 seconds to run this spec file.
14
+ describe CliTemplate::CLI do
15
+ before(:all) do
16
+ @args = "--noop"
17
+ end
18
+
19
+ describe "new" do
20
+ context("simple single name") do
21
+ it "should generate" do
22
+ out = execute("cd tmp && ../exe/cli-template new hello #{@args}")
23
+ expect(out).to include("Creating new project called hello")
24
+ expect(out).to include("You have successfully created a CLI project")
25
+ out = execute("cd tmp/hello && rake")
26
+ expect(out).to include("0 failures")
27
+ end
28
+ end
29
+
30
+ context("underscored name") do
31
+ it "should generate" do
32
+ out = execute("cd tmp && ../exe/cli-template new my_cli #{@args}")
33
+ expect(out).to include("Creating new project called my_cli")
34
+ expect(out).to include("You have successfully created a CLI project")
35
+ out = execute("cd tmp/my_cli && rake")
36
+ expect(out).to include("0 failures")
37
+ end
38
+ end
39
+
40
+ context("dasherized name") do
41
+ it "should generate" do
42
+ out = execute("cd tmp && ../exe/cli-template new my-cli #{@args}")
43
+ expect(out).to include("Creating new project called my-cli")
44
+ expect(out).to include("You have successfully created a CLI project")
45
+ out = execute("cd tmp/my-cli && rake")
46
+ expect(out).to include("0 failures")
47
+ end
48
+ end
49
+
50
+ # CamelCase is ugly :(
51
+ context("simple CamelCase name") do
52
+ it "should generate" do
53
+ out = execute("cd tmp && ../exe/cli-template new MyCli #{@args}")
54
+ expect(out).to include("Creating new project called MyCli")
55
+ expect(out).to include("You have successfully created a CLI project")
56
+ out = execute("cd tmp/MyCli && rake")
57
+ expect(out).to include("0 failures")
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,33 @@
1
+ ENV['TEST'] = '1'
2
+
3
+ # CodeClimate test coverage: https://docs.codeclimate.com/docs/configuring-test-coverage
4
+ # require 'simplecov'
5
+ # SimpleCov.start
6
+
7
+ require "pp"
8
+
9
+ root = File.expand_path('../../', __FILE__)
10
+ require "#{root}/lib/cli-template"
11
+
12
+ module Helpers
13
+ def execute(cmd)
14
+ puts "Running: #{cmd}" if show_command?
15
+ out = `#{cmd}`
16
+ puts out if show_command?
17
+ out
18
+ end
19
+
20
+ # Added SHOW_COMMAND because DEBUG is also used by other libraries like
21
+ # bundler and it shows its internal debugging logging also.
22
+ def show_command?
23
+ ENV['DEBUG'] || ENV['SHOW_COMMAND']
24
+ end
25
+ end
26
+
27
+ RSpec.configure do |c|
28
+ c.include Helpers
29
+ c.before(:all) do
30
+ FileUtils.rm_rf("tmp")
31
+ FileUtils.mkdir_p("tmp")
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,217 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cli-template
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tung Nguyen
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-02-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: colorize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard-bundler
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: byebug
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Generate a CLI tool quickly
140
+ email:
141
+ - tongueroo@gmail.com
142
+ executables:
143
+ - cli-template
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".circleci/config.yml"
148
+ - ".gitignore"
149
+ - ".rspec"
150
+ - CHANGELOG.md
151
+ - Gemfile
152
+ - Guardfile
153
+ - LICENSE.txt
154
+ - README.md
155
+ - Rakefile
156
+ - cli-template.gemspec
157
+ - exe/cli-template
158
+ - lib/cli-template.rb
159
+ - lib/cli-template/cli.rb
160
+ - lib/cli-template/command.rb
161
+ - lib/cli-template/help.rb
162
+ - lib/cli-template/help/new.md
163
+ - lib/cli-template/helpers.rb
164
+ - lib/cli-template/new.rb
165
+ - lib/cli-template/sequence.rb
166
+ - lib/cli-template/version.rb
167
+ - lib/templates/skeleton/%project_name%.gemspec.tt
168
+ - lib/templates/skeleton/.gitignore
169
+ - lib/templates/skeleton/.rspec
170
+ - lib/templates/skeleton/CHANGELOG.md
171
+ - lib/templates/skeleton/Gemfile.tt
172
+ - lib/templates/skeleton/Guardfile
173
+ - lib/templates/skeleton/LICENSE.txt
174
+ - lib/templates/skeleton/README.md.tt
175
+ - lib/templates/skeleton/Rakefile
176
+ - lib/templates/skeleton/exe/%project_name%.tt
177
+ - lib/templates/skeleton/lib/%project_name%.rb.tt
178
+ - lib/templates/skeleton/lib/%underscored_name%/cli.rb.tt
179
+ - lib/templates/skeleton/lib/%underscored_name%/command.rb.tt
180
+ - lib/templates/skeleton/lib/%underscored_name%/help.rb.tt
181
+ - lib/templates/skeleton/lib/%underscored_name%/help/hello.md.tt
182
+ - lib/templates/skeleton/lib/%underscored_name%/help/sub/goodbye.md.tt
183
+ - lib/templates/skeleton/lib/%underscored_name%/main.rb.tt
184
+ - lib/templates/skeleton/lib/%underscored_name%/rake_command.rb.tt
185
+ - lib/templates/skeleton/lib/%underscored_name%/sub.rb.tt
186
+ - lib/templates/skeleton/lib/%underscored_name%/version.rb.tt
187
+ - lib/templates/skeleton/spec/lib/cli_spec.rb.tt
188
+ - lib/templates/skeleton/spec/spec_helper.rb.tt
189
+ - spec/lib/cli_spec.rb
190
+ - spec/spec_helper.rb
191
+ homepage: https://gitub.com/tongueroo/cli-template
192
+ licenses:
193
+ - MIT
194
+ metadata: {}
195
+ post_install_message:
196
+ rdoc_options: []
197
+ require_paths:
198
+ - lib
199
+ required_ruby_version: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ required_rubygems_version: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ requirements: []
210
+ rubyforge_project:
211
+ rubygems_version: 2.7.3
212
+ signing_key:
213
+ specification_version: 4
214
+ summary: Generate a CLI tool quickly
215
+ test_files:
216
+ - spec/lib/cli_spec.rb
217
+ - spec/spec_helper.rb