cli-template 3.5.1 → 4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45ad7e02c673bacf1fe9a65104f9d54a1ffa76bbc4014d4b9435789c460671b8
4
- data.tar.gz: 7aca4368ee8502b178e77a9003e7eb40c08c3b60a0e2bd70bb11434dcfc2181d
3
+ metadata.gz: b53337284c8b96dbc2542077b822c17bc84aef700324434f2516f3dc1e49fec8
4
+ data.tar.gz: 8919ffcd06b6080fb07e098f495180379c8de7fecf6f7463d22292eb15c89c14
5
5
  SHA512:
6
- metadata.gz: a1685a9f2fe64d485e5dfea66fc9eb749036986cef7d89c3e31bede04f7c148ca7f767145cb431aa884d3b79a0b03ba8189baf806f547c18a32eda8509b732f2
7
- data.tar.gz: 51f589a255e1f5f4411d2466d372febb81cc3015e1198b5738697fd7c953a25a172e00a4cc0bf69287a0a1f00f2c7d3be7c39507ca05692b4dea52b3a8b37fd3
6
+ metadata.gz: 463553b6d137103f0fdcb7c0ee79e5f8852116442940f3d86385e7e05473cbc0360cb0f90bb94ceeff6e5ea73745a9f74ef717620e5d4861266196cb3c4c27a8
7
+ data.tar.gz: be52eb5f0f27e5bb0e1cd9c5b789df36829329eb82bae2a09a9fc401196a5c8fdcc563a6c7d502e031a0afd4ff4254339c3149ef98fcaca7375160580e0775b5
@@ -3,6 +3,9 @@
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
+ ## [4.0.0]
7
+ - use zeitwerk for autoload
8
+
6
9
  ## [3.5.1]
7
10
  - #4 from sco11morgan/move-activesupport-to-dev
8
11
  - ensure docs/_includes is created
data/Gemfile CHANGED
@@ -3,4 +3,10 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in cli-template.gemspec
4
4
  gemspec
5
5
 
6
- gem "codeclimate-test-reporter", group: :test, require: nil
6
+ # Some gems are included because the generated project contains these gems
7
+ # We use bundle exec to run specs in circleci.
8
+ # This workaround ensures those gems are also installed with the first bundle install.
9
+ group :test do
10
+ gem "codeclimate-test-reporter", require: nil
11
+ gem "cli_markdown"
12
+ end
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'cli-template/version'
4
+ require 'cli_template/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "cli-template"
@@ -18,8 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "thor"
22
21
  spec.add_dependency "rainbow"
22
+ spec.add_dependency "thor"
23
+ spec.add_dependency "zeitwerk"
23
24
 
24
25
  spec.add_development_dependency "activesupport"
25
26
  spec.add_development_dependency "bundler"
@@ -3,7 +3,7 @@
3
3
  require 'rubygems'
4
4
 
5
5
  $:.unshift(File.expand_path('../../lib', __FILE__))
6
- require 'cli-template'
7
- require 'cli-template/cli'
6
+ require 'cli_template'
7
+ require 'cli_template/cli'
8
8
 
9
9
  CliTemplate::CLI.start(ARGV)
@@ -1,12 +1 @@
1
- $:.unshift(File.expand_path("../", __FILE__))
2
- require "cli-template/version"
3
-
4
- module CliTemplate
5
- autoload :Help, 'cli-template/help'
6
- autoload :CLI, 'cli-template/cli'
7
- autoload :Command, 'cli-template/command'
8
- autoload :Version, 'cli-template/version'
9
- autoload :Sequence, 'cli-template/sequence'
10
- autoload :New, 'cli-template/new'
11
- autoload :Helper, 'cli-template/helper'
12
- end
1
+ require_relative "cli_template"
@@ -0,0 +1,8 @@
1
+ $:.unshift(File.expand_path("../", __FILE__))
2
+ require "cli_template/version"
3
+ require "cli_template/autoloader"
4
+ CliTemplate::Autoloader.setup
5
+
6
+ module CliTemplate
7
+ class Error < StandardError; end
8
+ end
@@ -0,0 +1,22 @@
1
+ require "zeitwerk"
2
+
3
+ module CliTemplate
4
+ class Autoloader
5
+ class Inflector < Zeitwerk::Inflector
6
+ def camelize(basename, _abspath)
7
+ map = { cli: "CLI", version: "VERSION" }
8
+ map[basename.to_sym] || super
9
+ end
10
+ end
11
+
12
+ class << self
13
+ def setup
14
+ loader = Zeitwerk::Loader.new
15
+ loader.inflector = Inflector.new
16
+ loader.push_dir(File.dirname(__dir__)) # lib
17
+ loader.ignore("#{File.dirname(__dir__)}/cli-template.rb")
18
+ loader.setup
19
+ end
20
+ end
21
+ end
22
+ end
@@ -11,6 +11,7 @@ module CliTemplate
11
11
  [:repo, desc: "GitHub repo to use. Format: user/repo"],
12
12
  [:force, type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files."],
13
13
  [:git, type: :boolean, default: true, desc: "Git initialize the project"],
14
+ [:subcommand, type: :boolean, default: false, desc: "Include subcommand example"],
14
15
  ]
15
16
  end
16
17
 
@@ -56,7 +57,6 @@ Test the CLI:
56
57
  cd #{project_name}
57
58
  bundle
58
59
  exe/#{project_name} hello # top-level commands
59
- exe/#{project_name} sub:goodbye # sub commands
60
60
  bundle exec rspec
61
61
 
62
62
  To publish your CLI as a gem:
@@ -38,7 +38,34 @@ private
38
38
 
39
39
  def copy_project
40
40
  puts "Creating new project called #{project_name}."
41
- directory ".", project_name
41
+ directory ".", project_name, copy_options
42
+ if project_name.include?("-")
43
+ dashed_path = "#{project_name}/lib/#{project_name}.rb"
44
+ underscored_path = "#{project_name}/lib/#{underscored_name}.rb"
45
+
46
+ FileUtils.mv(dashed_path, underscored_path)
47
+ IO.write(dashed_path, <<~EOL)
48
+ require_relative "#{underscored_name}"
49
+ EOL
50
+ end
51
+ end
52
+
53
+ def copy_options
54
+ excludes = if @options[:subcommand]
55
+ []
56
+ else
57
+ %w[
58
+ help/sub
59
+ sub.rb
60
+ ]
61
+ end
62
+
63
+ if excludes.empty?
64
+ {}
65
+ else
66
+ pattern = Regexp.new(excludes.join('|'))
67
+ {exclude_pattern: pattern }
68
+ end
42
69
  end
43
70
 
44
71
  def git_installed?
@@ -1,3 +1,3 @@
1
1
  module CliTemplate
2
- VERSION = "3.5.1"
2
+ VERSION = "4.0.0"
3
3
  end
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "rainbow"
22
22
  spec.add_dependency "rake"
23
23
  spec.add_dependency "activesupport"
24
+ spec.add_dependency "zeitwerk"
24
25
 
25
26
  spec.add_development_dependency "bundler"
26
27
  spec.add_development_dependency "byebug"
@@ -11,27 +11,15 @@ describe <%= project_class_name %>::CLI do
11
11
  expect(out).to include("from: Tung\nHello world")
12
12
  end
13
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
14
  it "completions" do
20
15
  out = execute("exe/<%= project_name %> completions")
21
16
  expect(out).to include("hello")
22
- expect(out).to include("sub:goodbye")
23
17
 
24
18
  out = execute("exe/<%= project_name %> completions hello")
25
19
  expect(out).to include("name")
26
20
 
27
21
  out = execute("exe/<%= project_name %> completions hello name")
28
22
  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
23
  end
36
24
  end
37
25
  end
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency "activesupport"
23
23
  spec.add_dependency "rainbow"
24
24
  spec.add_dependency "thor"
25
+ spec.add_dependency "zeitwerk"
25
26
 
26
27
  spec.add_development_dependency "bundler"
27
28
  spec.add_development_dependency "byebug"
@@ -1,4 +1,4 @@
1
- Copyright (c) 2018 Tung Nguyen
1
+ Copyright (c) <%= Time.now.strftime("%Y") %> Tung Nguyen
2
2
 
3
3
  MIT License
4
4
 
@@ -3,7 +3,7 @@
3
3
  # Trap ^C
4
4
  Signal.trap("INT") {
5
5
  puts "\nCtrl-C detected. Exiting..."
6
- sleep 1
6
+ sleep 0.1
7
7
  exit
8
8
  }
9
9
 
@@ -2,13 +2,9 @@ $:.unshift(File.expand_path("../", __FILE__))
2
2
  require "<%= underscored_name %>/version"
3
3
  require "rainbow/ext/string"
4
4
 
5
+ require "<%= underscored_name %>/autoloader"
6
+ <%= project_class_name %>::Autoloader.setup
7
+
5
8
  module <%= project_class_name %>
6
9
  class Error < StandardError; end
7
-
8
- autoload :CLI, "<%= underscored_name %>/cli"
9
- autoload :Command, "<%= underscored_name %>/command"
10
- autoload :Completer, "<%= underscored_name %>/completer"
11
- autoload :Completion, "<%= underscored_name %>/completion"
12
- autoload :Help, "<%= underscored_name %>/help"
13
- autoload :Sub, "<%= underscored_name %>/sub"
14
10
  end
@@ -0,0 +1,24 @@
1
+ require "zeitwerk"
2
+
3
+ module <%= project_class_name %>
4
+ class Autoloader
5
+ class Inflector < Zeitwerk::Inflector
6
+ def camelize(basename, _abspath)
7
+ map = { cli: "CLI", version: "VERSION" }
8
+ map[basename.to_sym] || super
9
+ end
10
+ end
11
+
12
+ class << self
13
+ def setup
14
+ loader = Zeitwerk::Loader.new
15
+ loader.inflector = Inflector.new
16
+ loader.push_dir(File.dirname(__dir__)) # lib
17
+ <% if project_name.include?('-') -%>
18
+ loader.ignore("#{File.dirname(__dir__)}/<%= project_name %>.rb")
19
+ <% end -%>
20
+ loader.setup
21
+ end
22
+ end
23
+ end
24
+ end
@@ -10,10 +10,11 @@ module <%= project_class_name %>
10
10
  puts "from: #{options[:from]}" if options[:from]
11
11
  puts "Hello #{name}"
12
12
  end
13
-
13
+ <% if options[:subcommand] -%>
14
14
  desc "sub SUBCOMMAND", "sub subcommands"
15
15
  long_desc Help.text(:sub)
16
16
  subcommand "sub", Sub
17
+ <% end -%>
17
18
 
18
19
  desc "completion *PARAMS", "Prints words for auto-completion."
19
20
  long_desc Help.text("completion")
@@ -70,8 +70,6 @@ Auto-completion accounts for each of these type of commands.
70
70
  =end
71
71
  module <%= project_class_name %>
72
72
  class Completer
73
- autoload :Script, '<%= underscored_name %>/completer/script'
74
-
75
73
  def initialize(command_class, *params)
76
74
  @params = params
77
75
  @current_command = @params[0]
@@ -11,22 +11,12 @@ describe <%= project_class_name %>::CLI do
11
11
  expect(out).to include("from: Tung\nHello world")
12
12
  end
13
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
14
  commands = {
20
15
  "hell" => "hello",
21
16
  "hello" => "name",
22
17
  "hello -" => "--from",
23
18
  "hello name" => "--from",
24
19
  "hello name --" => "--from",
25
- "sub goodb" => "goodbye",
26
- "sub goodbye" => "name",
27
- "sub goodbye name" => "--from",
28
- "sub goodbye name --" => "--from",
29
- "sub goodbye name --from" => "--help",
30
20
  }
31
21
  commands.each do |command, expected_word|
32
22
  it "completion #{command}" do
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cli-template
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.1
4
+ version: 4.0.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: 2019-05-29 00:00:00.000000000 Z
11
+ date: 2019-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rainbow
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'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: thor
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -25,7 +39,7 @@ dependencies:
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
- name: rainbow
42
+ name: zeitwerk
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
@@ -156,14 +170,16 @@ files:
156
170
  - cli-template.gemspec
157
171
  - exe/cli-template
158
172
  - 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/helper.rb
164
- - lib/cli-template/new.rb
165
- - lib/cli-template/sequence.rb
166
- - lib/cli-template/version.rb
173
+ - lib/cli_template.rb
174
+ - lib/cli_template/autoloader.rb
175
+ - lib/cli_template/cli.rb
176
+ - lib/cli_template/command.rb
177
+ - lib/cli_template/help.rb
178
+ - lib/cli_template/help/new.md
179
+ - lib/cli_template/helper.rb
180
+ - lib/cli_template/new.rb
181
+ - lib/cli_template/sequence.rb
182
+ - lib/cli_template/version.rb
167
183
  - lib/templates/colon_namespaces/%project_name%.gemspec.tt
168
184
  - lib/templates/colon_namespaces/.gitignore
169
185
  - lib/templates/colon_namespaces/.rspec
@@ -199,11 +215,12 @@ files:
199
215
  - lib/templates/default/CHANGELOG.md
200
216
  - lib/templates/default/Gemfile.tt
201
217
  - lib/templates/default/Guardfile
202
- - lib/templates/default/LICENSE.txt
218
+ - lib/templates/default/LICENSE.txt.tt
203
219
  - lib/templates/default/README.md.tt
204
220
  - lib/templates/default/Rakefile.tt
205
221
  - lib/templates/default/exe/%project_name%.tt
206
222
  - lib/templates/default/lib/%project_name%.rb.tt
223
+ - lib/templates/default/lib/%underscored_name%/autoloader.rb.tt
207
224
  - lib/templates/default/lib/%underscored_name%/cli.rb.tt
208
225
  - lib/templates/default/lib/%underscored_name%/command.rb.tt
209
226
  - lib/templates/default/lib/%underscored_name%/completer.rb.tt
@@ -239,7 +256,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
239
256
  - !ruby/object:Gem::Version
240
257
  version: '0'
241
258
  requirements: []
242
- rubygems_version: 3.0.2
259
+ rubygems_version: 3.0.3
243
260
  signing_key:
244
261
  specification_version: 4
245
262
  summary: Generate a CLI tool quickly