kamaze-project 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/lib/kamaze-project.rb +1 -30
  4. data/lib/kamaze/project.rb +37 -31
  5. data/lib/kamaze/project/autoload.rb +38 -0
  6. data/lib/kamaze/project/boot/core_ext.rb +8 -8
  7. data/lib/kamaze/project/boot/listen.rb +11 -13
  8. data/lib/kamaze/project/bundled.rb +79 -0
  9. data/lib/kamaze/project/concern.rb +17 -2
  10. data/lib/kamaze/project/concern/cli.rb +4 -1
  11. data/lib/kamaze/project/concern/cli/with_exit_on_failure.rb +2 -6
  12. data/lib/kamaze/project/concern/env.rb +14 -12
  13. data/lib/kamaze/project/concern/helper.rb +1 -2
  14. data/lib/kamaze/project/concern/mode.rb +1 -1
  15. data/lib/kamaze/project/concern/observable.rb +12 -11
  16. data/lib/kamaze/project/concern/sh.rb +7 -7
  17. data/lib/kamaze/project/concern/tasks.rb +36 -10
  18. data/lib/kamaze/project/concern/tools.rb +2 -3
  19. data/lib/kamaze/project/config.rb +1 -1
  20. data/lib/kamaze/project/core_ext/object.rb +17 -8
  21. data/lib/kamaze/project/core_ext/pp.rb +14 -16
  22. data/lib/kamaze/project/debug.rb +40 -49
  23. data/lib/kamaze/project/dsl.rb +9 -5
  24. data/lib/kamaze/project/dsl/definition.rb +6 -12
  25. data/lib/kamaze/project/dsl/setup.rb +1 -3
  26. data/lib/kamaze/project/helper.rb +1 -1
  27. data/lib/kamaze/project/helper/inflector.rb +9 -27
  28. data/lib/kamaze/project/helper/project.rb +1 -1
  29. data/lib/kamaze/project/helper/project/config.rb +1 -1
  30. data/lib/kamaze/project/inflector.rb +15 -0
  31. data/lib/kamaze/project/observable.rb +1 -4
  32. data/lib/kamaze/project/observer.rb +1 -1
  33. data/lib/kamaze/project/resources/Vagrantfile +1 -1
  34. data/lib/kamaze/project/struct.rb +1 -1
  35. data/lib/kamaze/project/tasks/cs.rb +1 -1
  36. data/lib/kamaze/project/tasks/cs/control.rb +1 -1
  37. data/lib/kamaze/project/tasks/cs/correct.rb +1 -1
  38. data/lib/kamaze/project/tasks/cs/pre_commit.rb +4 -6
  39. data/lib/kamaze/project/tasks/doc.rb +2 -4
  40. data/lib/kamaze/project/tasks/doc/watch.rb +4 -6
  41. data/lib/kamaze/project/tasks/gem.rb +15 -6
  42. data/lib/kamaze/project/tasks/gem/build.rb +33 -17
  43. data/lib/kamaze/project/tasks/gem/compile.rb +1 -1
  44. data/lib/kamaze/project/tasks/gem/gemspec.rb +12 -11
  45. data/lib/kamaze/project/tasks/gem/install.rb +1 -1
  46. data/lib/kamaze/project/tasks/gem/push.rb +16 -17
  47. data/lib/kamaze/project/tasks/misc/gitignore.rb +1 -1
  48. data/lib/kamaze/project/tasks/shell.rb +1 -1
  49. data/lib/kamaze/project/tasks/sources.rb +1 -1
  50. data/lib/kamaze/project/tasks/sources/license.rb +1 -1
  51. data/lib/kamaze/project/tasks/test.rb +3 -5
  52. data/lib/kamaze/project/tasks/vagrant.rb +1 -1
  53. data/lib/kamaze/project/tasks/version/edit.rb +1 -1
  54. data/lib/kamaze/project/tools.rb +18 -6
  55. data/lib/kamaze/project/tools/base_tool.rb +6 -2
  56. data/lib/kamaze/project/tools/console.rb +4 -13
  57. data/lib/kamaze/project/tools/console/output.rb +14 -6
  58. data/lib/kamaze/project/tools/console/output/buffer.rb +8 -3
  59. data/lib/kamaze/project/tools/gemspec.rb +11 -21
  60. data/lib/kamaze/project/tools/gemspec/builder.rb +43 -31
  61. data/lib/kamaze/project/tools/gemspec/concern.rb +6 -1
  62. data/lib/kamaze/project/tools/gemspec/concern/reading.rb +2 -5
  63. data/lib/kamaze/project/tools/gemspec/packager.rb +10 -10
  64. data/lib/kamaze/project/tools/gemspec/packer.rb +11 -15
  65. data/lib/kamaze/project/tools/gemspec/packer/command.rb +1 -1
  66. data/lib/kamaze/project/tools/gemspec/reader.rb +22 -14
  67. data/lib/kamaze/project/tools/gemspec/reader/decorator.rb +3 -6
  68. data/lib/kamaze/project/tools/gemspec/writer.rb +43 -19
  69. data/lib/kamaze/project/tools/gemspec/writer/dep_gen.rb +9 -6
  70. data/lib/kamaze/project/tools/gemspec/writer/dependency.rb +1 -1
  71. data/lib/kamaze/project/tools/git.rb +13 -31
  72. data/lib/kamaze/project/tools/git/hooks.rb +12 -6
  73. data/lib/kamaze/project/tools/git/hooks/base_hook.rb +3 -11
  74. data/lib/kamaze/project/tools/git/hooks/pre_commit.rb +3 -7
  75. data/lib/kamaze/project/tools/git/status.rb +13 -9
  76. data/lib/kamaze/project/tools/git/status/decorator.rb +1 -1
  77. data/lib/kamaze/project/tools/git/status/file.rb +2 -1
  78. data/lib/kamaze/project/tools/git/status/files_array.rb +1 -1
  79. data/lib/kamaze/project/tools/git/status/index.rb +1 -1
  80. data/lib/kamaze/project/tools/git/status/worktree.rb +1 -1
  81. data/lib/kamaze/project/tools/git/util.rb +1 -1
  82. data/lib/kamaze/project/tools/licenser.rb +2 -2
  83. data/lib/kamaze/project/tools/packager.rb +12 -22
  84. data/lib/kamaze/project/tools/packager/filesystem.rb +11 -3
  85. data/lib/kamaze/project/tools/packager/filesystem/operator.rb +19 -11
  86. data/lib/kamaze/project/tools/packager/filesystem/operator/utils.rb +22 -16
  87. data/lib/kamaze/project/tools/process_locker.rb +67 -38
  88. data/lib/kamaze/project/tools/rspec.rb +5 -3
  89. data/lib/kamaze/project/tools/rubocop.rb +30 -41
  90. data/lib/kamaze/project/tools/rubocop/arguments.rb +1 -1
  91. data/lib/kamaze/project/tools/rubocop/config.rb +2 -4
  92. data/lib/kamaze/project/tools/shell.rb +7 -8
  93. data/lib/kamaze/project/tools/vagrant.rb +6 -16
  94. data/lib/kamaze/project/tools/vagrant/composer.rb +1 -1
  95. data/lib/kamaze/project/tools/vagrant/composer/file.rb +1 -1
  96. data/lib/kamaze/project/tools/vagrant/remote.rb +1 -1
  97. data/lib/kamaze/project/tools/vagrant/shell.rb +1 -1
  98. data/lib/kamaze/project/tools/vagrant/writer.rb +1 -1
  99. data/lib/kamaze/project/tools/yardoc.rb +14 -18
  100. data/lib/kamaze/project/tools/yardoc/file.rb +7 -7
  101. data/lib/kamaze/project/tools/yardoc/watchable.rb +9 -15
  102. data/lib/kamaze/project/tools/yardoc/watcher.rb +28 -35
  103. data/lib/kamaze/project/tools_provider.rb +28 -40
  104. data/lib/kamaze/project/tools_provider/resolver.rb +1 -1
  105. data/lib/kamaze/project/version.rb +5 -91
  106. data/lib/kamaze/project/version.yml +6 -6
  107. metadata +23 -51
  108. data/.rubocop.yml +0 -37
  109. data/bin/plop +0 -5
@@ -1,20 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
7
7
  # There is NO WARRANTY, to the extent permitted by law.
8
8
 
9
- require 'pathname'
10
- require 'fileutils'
11
- require 'rake/file_utils'
12
-
13
9
  require_relative '../operator'
14
10
 
15
11
  # Utilities related to files/paths manipulations
16
12
  module Kamaze::Project::Tools::Packager::Filesystem::Operator::Utils
17
- include FileUtils
13
+ autoload(:Pathname, 'pathname')
14
+
15
+ lambda do
16
+ require 'fileutils'
17
+ require 'rake/file_utils'
18
+
19
+ include FileUtils
20
+ end.call
18
21
 
19
22
  protected
20
23
 
@@ -24,11 +27,11 @@ module Kamaze::Project::Tools::Packager::Filesystem::Operator::Utils
24
27
  # @return [Pathname]
25
28
  def purge(dir, options = {})
26
29
  options = { verbose: true }.merge(options)
27
- dir = ::Pathname.new(dir)
30
+ dir = Pathname.new(dir)
28
31
 
29
32
  if dir.exist?
30
33
  ls(dir).each do |entry|
31
- rm_rf(dir.join(entry), options)
34
+ rm_rf(dir.join(entry), **options)
32
35
  end
33
36
  end
34
37
 
@@ -40,13 +43,12 @@ module Kamaze::Project::Tools::Packager::Filesystem::Operator::Utils
40
43
  # @param [String|Pathname] basedir
41
44
  # @param [Array<>] entries
42
45
  # @param [Hash] options
46
+ #
43
47
  # @return [Pathname]
44
48
  def skel_dirs(basedir, entries, options = {})
45
- basedir = ::Pathname.new(basedir)
46
-
47
- map_dirs(entries).each { |dir| mkdir_p(basedir.join(dir), options) }
48
-
49
- basedir
49
+ Pathname.new(basedir).tap do
50
+ map_dirs(entries).each { |dir| mkdir_p(basedir.join(dir), **options) }
51
+ end
50
52
  end
51
53
 
52
54
  # List entries
@@ -54,9 +56,11 @@ module Kamaze::Project::Tools::Packager::Filesystem::Operator::Utils
54
56
  # @param [String] dir
55
57
  # @return [Array<Pathname>]
56
58
  def ls(dir)
57
- ::Pathname.new(dir).entries
58
- .map { |path| ::Pathname.new(path) }
59
- .delete_if { |path| ['.', '..'].include?(path.basename.to_s) }
59
+ # @formatter:off
60
+ Pathname.new(dir).entries
61
+ .map { |path| ::Pathname.new(path) }
62
+ .delete_if { |path| ['.', '..'].include?(path.basename.to_s) }
63
+ # @formatter:on
60
64
  end
61
65
 
62
66
  # Extract directories from given paths
@@ -64,10 +68,12 @@ module Kamaze::Project::Tools::Packager::Filesystem::Operator::Utils
64
68
  # @param [Array<String>] paths
65
69
  # @return [Array<Pathname>]
66
70
  def map_dirs(paths)
71
+ # @formatter:off
67
72
  paths.map { |path| ::Pathname.new(path) }
68
73
  .map(&:dirname)
69
74
  .delete_if { |path| ['.', '..'].include?(path.basename.to_s) }
70
75
  .uniq.sort
76
+ # @formatter:on
71
77
  end
72
78
 
73
79
  # @return [Array<Symbol>]
@@ -1,27 +1,45 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
7
7
  # There is NO WARRANTY, to the extent permitted by law.
8
8
 
9
9
  require_relative '../tools'
10
- require 'etc'
11
- require 'fileutils'
12
- require 'pathname'
13
- require 'tmpdir'
14
- require 'process_lock'
15
-
16
- module Kamaze::Project::Tools
17
- class ProcessLocker < BaseTool
18
- end
19
- end
20
10
 
21
11
  # Process Locker
22
12
  #
23
13
  # @see https://github.com/ianheggie/process_lock
24
14
  class Kamaze::Project::Tools::ProcessLocker < Kamaze::Project::Tools::BaseTool
15
+ autoload(:Digest, 'digest')
16
+
17
+ # @formatter:off
18
+ {
19
+ Etc: 'etc',
20
+ FileUtils: 'fileutils',
21
+ Pathname: 'pathname',
22
+ ProcessLock: 'process_lock',
23
+ }.each { |s, fp| autoload(s, fp) }
24
+ # @formatter:on
25
+
26
+ # @return [String]
27
+ attr_reader :lockdir
28
+
29
+ def mutable_attributes
30
+ [:lockdir]
31
+ end
32
+
33
+ # Set name for lockdir.
34
+ #
35
+ # @see #tmpdir
36
+ # @see #setup
37
+ def lockdir=(lockdir)
38
+ inflector.classify(lockdir).yield_self { |s| inflector.underscore(s) }.tap do |name|
39
+ @lockdir = name
40
+ end
41
+ end
42
+
25
43
  # Manage lock on given block
26
44
  #
27
45
  # @return [Object]
@@ -37,26 +55,31 @@ class Kamaze::Project::Tools::ProcessLocker < Kamaze::Project::Tools::BaseTool
37
55
  def lock!(lockname)
38
56
  mklock(lockname).acquire! { yield }
39
57
  rescue ProcessLock::AlreadyLocked
58
+ # noinspection RubyResolve
40
59
  raise Errno::EALREADY if mklock(lockname).alive?
60
+
41
61
  raise
42
62
  end
43
63
 
64
+ # Get tmpdir where lock files are stored.
65
+ #
44
66
  # @return [Pathname]
45
67
  def tmpdir
46
- tmp = Pathname.new(Dir.tmpdir)
47
- uid = Etc.getpwnam(Etc.getlogin).uid
48
- dir = [inflector.underscore(self.class.name).tr('/', '-'), uid].join('.')
68
+ require 'tmpdir' unless Dir.respond_to?(:tmpdir)
49
69
 
50
- tmp.join(dir)
70
+ Pathname.new(Dir.tmpdir).join('%<libname>s.%<uid>s' % { # @formatter:off
71
+ libname: inflector.underscore(self.class.name).split('/')[0..1].join('-'),
72
+ uid: Etc.getpwnam(Etc.getlogin).uid, # @formatter:on
73
+ }, lockdir)
51
74
  end
52
75
 
53
76
  class << self
54
77
  def method_missing(method, *args, &block)
55
78
  if respond_to_missing?(method)
56
- self.new.public_send(method, *args, &block)
57
- else
58
- super
79
+ return self.new.public_send(method, *args, &block)
59
80
  end
81
+
82
+ super
60
83
  end
61
84
 
62
85
  def respond_to_missing?(method, include_private = false)
@@ -68,12 +91,29 @@ class Kamaze::Project::Tools::ProcessLocker < Kamaze::Project::Tools::BaseTool
68
91
 
69
92
  protected
70
93
 
94
+ # @return [Dry::Inflector]
95
+ attr_reader :inflector
96
+
97
+ # @return [Module<FileUtils>]
98
+ attr_reader :fs
99
+
100
+ def setup
101
+ @fs ||= FileUtils
102
+ @inflector ||= Kamaze::Project::Inflector.new
103
+
104
+ unless lockdir # rubocop:disable Style/GuardClause
105
+ self.lockdir = lambda do
106
+ return Kamaze::Project.instance.name if Kamaze::Project.instance
107
+
108
+ Digest::SHA1.hexdigest(__FILE__) # Does not avoid collision if package is globally installed
109
+ end.call
110
+ end
111
+ end
112
+
71
113
  # @param [String] lockname
72
114
  # @return [ProcessLock]
73
115
  def mklock(lockname)
74
- lockfile = mktemp(lockname)
75
-
76
- ProcessLock.new(lockfile)
116
+ mktemp(lockname).yield_self { |lockfile| ProcessLock.new(lockfile) }
77
117
  end
78
118
 
79
119
  # Create a temporary file
@@ -81,28 +121,17 @@ class Kamaze::Project::Tools::ProcessLocker < Kamaze::Project::Tools::BaseTool
81
121
  # @param [String] lockname
82
122
  # @return [Pathname]
83
123
  def mktemp(lockname)
84
- lockname = Pathname.new(lockname.to_s).basename('.*')
85
-
86
- mktmpdir.join(lockname)
124
+ Pathname.new(lockname.to_s).basename('.*').yield_self { |fp| mktmpdir.join(fp) }
87
125
  end
88
126
 
89
127
  # Create ``tmpdir``
90
128
  #
91
- # @param [Hash] options
92
129
  # @return [Pathname]
93
- def mktmpdir(options = {})
94
- tmpdir = self.tmpdir
95
- options[:mode] ||= 0o700
130
+ def mktmpdir(**options)
131
+ self.tmpdir.tap do |tmpdir|
132
+ options[:mode] ||= 0o700
96
133
 
97
- FileUtils.mkdir_p(tmpdir, options)
98
-
99
- tmpdir
100
- end
101
-
102
- # @return [Dry::Inflector]
103
- def inflector
104
- require 'dry/inflector'
105
-
106
- Dry::Inflector.new
134
+ fs.mkdir_p(tmpdir, **options)
135
+ end
107
136
  end
108
137
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
@@ -67,10 +67,12 @@ class Kamaze::Project::Tools::Rspec < Kamaze::Project::Tools::BaseTool
67
67
  @arguments += ['--tag', tag]
68
68
  end
69
69
 
70
+ # @formatter:off
70
71
  {
71
- true => @arguments,
72
+ true => @arguments,
72
73
  false => @arguments.clone.concat(options_arguments).map(&:to_s).freeze
73
- }.fetch(caller_locations(1..1).first.path == __FILE__)
74
+ }.fetch(caller_locations(1..1).first&.path == __FILE__)
75
+ # @formatter:on
74
76
  end
75
77
 
76
78
  protected
@@ -1,30 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
7
7
  # There is NO WARRANTY, to the extent permitted by law.
8
8
 
9
9
  require_relative '../tools'
10
- require_relative '../concern/cli/with_exit_on_failure'
11
- require 'pathname'
12
-
13
- # rubocop:disable Style/Documentation
14
-
15
- module Kamaze::Project::Tools
16
- class Rubocop < BaseTool
17
- class Arguments < Array
18
- require_relative 'rubocop/arguments'
19
- end
20
-
21
- class Config
22
- require_relative 'rubocop/config'
23
- end
24
- end
25
- end
26
-
27
- # rubocop:enable Style/Documentation
28
10
 
29
11
  # Tool to run ``Rubocop::CLI``
30
12
  #
@@ -36,7 +18,17 @@ end
36
18
  # c.options = ['--fail-level', 'E']
37
19
  # end.run
38
20
  # ```
39
- class Kamaze::Project::Tools::Rubocop
21
+ class Kamaze::Project::Tools::Rubocop < Kamaze::Project::Tools::BaseTool
22
+ # @formatter:off
23
+ {
24
+ Arguments: 'arguments',
25
+ Config: 'config',
26
+ }.each { |s, fp| autoload(s, "#{__dir__}/rubocop/#{fp}") }
27
+ # @formatter:on
28
+
29
+ autoload(:Pathname, 'pathname')
30
+ autoload(:RuboCop, 'rubocop')
31
+
40
32
  include Kamaze::Project::Concern::Cli::WithExitOnFailure
41
33
 
42
34
  # Default arguments used by ``Rubocop::CLI``
@@ -50,17 +42,18 @@ class Kamaze::Project::Tools::Rubocop
50
42
  end
51
43
 
52
44
  def prepare
53
- reset
45
+ self.tap do
46
+ reset
54
47
 
55
- if block_given?
56
- config = Config.new
57
- yield(config)
58
- arguments.concat(config.freeze.to_a)
59
- end
60
-
61
- arguments.freeze
48
+ if block_given?
49
+ Config.new.tap do |config|
50
+ yield(config)
51
+ arguments.concat(config.freeze.to_a)
52
+ end
53
+ end
62
54
 
63
- self
55
+ arguments.freeze
56
+ end
64
57
  end
65
58
 
66
59
  # Arguments used by ``CLI`` (during execution/``run``)
@@ -92,10 +85,8 @@ class Kamaze::Project::Tools::Rubocop
92
85
 
93
86
  if runnable?
94
87
  with_exit_on_failure do
95
- core.run(arguments.to_a).yield_self do |retcode|
96
- self.retcode = retcode
97
- reset
98
- end
88
+ core.run(arguments.to_a).tap { |retcode| self.retcode = retcode }
89
+ reset
99
90
  end
100
91
  end
101
92
 
@@ -107,23 +98,21 @@ class Kamaze::Project::Tools::Rubocop
107
98
  attr_writer :arguments
108
99
 
109
100
  def setup
110
- @defaults = Arguments.new(@defaults.to_a)
101
+ @defaults = Arguments.new((@defaults || ['--only-recognized-file-types']).to_a)
111
102
  end
112
103
 
113
104
  # Reset arguments + retcode
114
105
  #
115
106
  # @return [self]
116
107
  def reset
117
- @arguments = nil
118
- self.retcode = nil if retcode.to_i.zero?
119
-
120
- self
108
+ self.tap do
109
+ @arguments = nil
110
+ self.retcode = nil if retcode.to_i.zero?
111
+ end
121
112
  end
122
113
 
123
- # @return [YARD::CLI::Yardoc]
114
+ # @return [RuboCop::CLI]
124
115
  def core
125
- require 'rubocop'
126
-
127
116
  RuboCop::CLI.new
128
117
  end
129
118
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
@@ -26,9 +26,7 @@ class Kamaze::Project::Tools::Rubocop::Config
26
26
 
27
27
  # @return [Array<String>]
28
28
  def to_a
29
- filepaths = match_patterns(patterns)
30
-
31
- self.options.to_a.clone.concat(['--'] + filepaths)
29
+ self.options.to_a.clone.concat(['--']).concat(match_patterns(patterns))
32
30
  end
33
31
 
34
32
  protected
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
@@ -43,7 +43,7 @@ class Kamaze::Project::Tools::Shell < Kamaze::Project::Tools::BaseTool
43
43
 
44
44
  def setup
45
45
  @console ||= Kamaze.project.tools.fetch(:console)
46
- @provider ||= require_any(:pry) ? Pry : nil
46
+ @provider ||= require_any(:pry) ? Object.const_get(:Pry) : nil
47
47
  @banner ||= nil
48
48
  end
49
49
 
@@ -69,16 +69,15 @@ class Kamaze::Project::Tools::Shell < Kamaze::Project::Tools::BaseTool
69
69
  # Require any gem based on ``Gem::Specification``
70
70
  #
71
71
  # @param [String|Symbol] gem_name
72
- # @param [String|Symbol] req_name
72
+ # @param [Array|nil] requirements
73
73
  # @return [Boolean]
74
- def require_any(gem_name, req_name = nil)
74
+ def require_any(gem_name, requirements = nil)
75
75
  gem_name = gem_name.to_s
76
- req_name ||= gem_name
77
- spec = Gem::Specification
76
+ requirements ||= [gem_name]
78
77
 
79
- return false unless spec.find_all_by_name(gem_name).any?
78
+ return false unless Gem::Specification.find_all_by_name(gem_name).any?
80
79
 
81
- require req_name
80
+ requirements.each { |req| require req.to_s }
82
81
 
83
82
  true
84
83
  end