cli-template 3.5.1 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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