pdk 1.0.1 → 1.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 +26 -0
- data/README.md +11 -0
- data/lib/pdk/answer_file.rb +1 -1
- data/lib/pdk/cli.rb +16 -6
- data/lib/pdk/cli/bundle.rb +5 -3
- data/lib/pdk/cli/errors.rb +10 -1
- data/lib/pdk/cli/exec.rb +9 -4
- data/lib/pdk/cli/module.rb +14 -0
- data/lib/pdk/cli/module/generate.rb +40 -0
- data/lib/pdk/cli/new.rb +2 -1
- data/lib/pdk/cli/new/class.rb +1 -1
- data/lib/pdk/cli/new/defined_type.rb +27 -0
- data/lib/pdk/cli/new/module.rb +1 -11
- data/lib/pdk/cli/util.rb +3 -3
- data/lib/pdk/cli/util/command_redirector.rb +26 -0
- data/lib/pdk/cli/util/interview.rb +17 -6
- data/lib/pdk/cli/util/option_normalizer.rb +3 -3
- data/lib/pdk/cli/validate.rb +9 -9
- data/lib/pdk/generate.rb +1 -0
- data/lib/pdk/generators/defined_type.rb +49 -0
- data/lib/pdk/generators/module.rb +113 -23
- data/lib/pdk/generators/puppet_class.rb +2 -2
- data/lib/pdk/generators/puppet_object.rb +3 -3
- data/lib/pdk/module/metadata.rb +7 -7
- data/lib/pdk/module/templatedir.rb +3 -3
- data/lib/pdk/report/event.rb +43 -12
- data/lib/pdk/tests/unit.rb +51 -17
- data/lib/pdk/util.rb +3 -3
- data/lib/pdk/util/bundler.rb +5 -5
- data/lib/pdk/util/version.rb +5 -2
- data/lib/pdk/util/windows.rb +6 -0
- data/lib/pdk/validators/base_validator.rb +1 -1
- data/lib/pdk/validators/metadata/metadata_json_lint.rb +2 -2
- data/lib/pdk/validators/metadata/metadata_syntax.rb +2 -2
- data/lib/pdk/validators/puppet/puppet_lint.rb +1 -1
- data/lib/pdk/validators/puppet/puppet_syntax.rb +1 -1
- data/lib/pdk/validators/ruby/rubocop.rb +1 -1
- data/lib/pdk/version.rb +1 -1
- data/lib/puppet/util/windows/api_types.rb +9 -5
- data/locales/pdk.pot +314 -180
- metadata +16 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: daa54ac61ef8e82a47ab9d6b0cbd190b2261a8a9
|
4
|
+
data.tar.gz: f90e5b3f2c554d1da7594967e9b3a500f28f1869
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2d4b1f197c7ca9d8acd269aa4a1ad83760a6b3238cc6dcd2330bc91324687fe370aeccc6a5756bea99ff812f2f6603f7eac1541c21fd6a01660acddd0bb7d41
|
7
|
+
data.tar.gz: 81515d3bf458e1e432fe985c47cb1f481267886a0a525bb5209af81925e4868c7f27b5df35069bcb1b554d145f9d6f74a823b0ada33c8f2c1f431098319e4bff
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,32 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
5
|
|
6
|
+
## [v1.1.0](https://github.com/puppetlabs/pdk/tree/v1.1.0) (2017-09-13)
|
7
|
+
|
8
|
+
[Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.0.1...v1.1.0)
|
9
|
+
|
10
|
+
**Implemented enhancements:**
|
11
|
+
|
12
|
+
- \(PDK-369\) Improve error context for pdk test unit failures [\#294](https://github.com/puppetlabs/pdk/pull/294) ([rodjek](https://github.com/rodjek))
|
13
|
+
- \(PDK-415\) Convert user-input related problems from FATAL to ERROR [\#293](https://github.com/puppetlabs/pdk/pull/293) ([rodjek](https://github.com/rodjek))
|
14
|
+
- \(PDK-465\) Improve output from spec\_prep/spec\_clean failures [\#290](https://github.com/puppetlabs/pdk/pull/290) ([rodjek](https://github.com/rodjek))
|
15
|
+
- \(PDK-465\) Add vendored git to PATH for package installs [\#287](https://github.com/puppetlabs/pdk/pull/287) ([rodjek](https://github.com/rodjek))
|
16
|
+
- \(PDK-370\) Adds a 'pdk module generate' redirect to 'pdk new module'. [\#286](https://github.com/puppetlabs/pdk/pull/286) ([bmjen](https://github.com/bmjen))
|
17
|
+
- \(PDK-459\) Improve error message when the generation target exists [\#285](https://github.com/puppetlabs/pdk/pull/285) ([DavidS](https://github.com/DavidS))
|
18
|
+
- \(PDK-461\) Update childprocess to current version [\#282](https://github.com/puppetlabs/pdk/pull/282) ([DavidS](https://github.com/DavidS))
|
19
|
+
- \(PDK-459\) Add defined type generator [\#280](https://github.com/puppetlabs/pdk/pull/280) ([rodjek](https://github.com/rodjek))
|
20
|
+
- \(MAINT\) Copy-edited all the user-visible messages [\#276](https://github.com/puppetlabs/pdk/pull/276) ([jbondpdx](https://github.com/jbondpdx))
|
21
|
+
- \(PDK-365\) Inform and prompt user following new module generate [\#270](https://github.com/puppetlabs/pdk/pull/270) ([bmjen](https://github.com/bmjen))
|
22
|
+
- \(maint\) Debug output GEM\_HOME and GEM\_PATH before executing module commands [\#268](https://github.com/puppetlabs/pdk/pull/268) ([james-stocks](https://github.com/james-stocks))
|
23
|
+
- \(SDK-336\) Add operating system question to the new module interview [\#262](https://github.com/puppetlabs/pdk/pull/262) ([rodjek](https://github.com/rodjek))
|
24
|
+
|
25
|
+
**Fixed bugs:**
|
26
|
+
|
27
|
+
- Remove EOL style cop from default configuration [\#267](https://github.com/puppetlabs/pdk/issues/267)
|
28
|
+
- \(PDK-450\) remove stdlib dependency [\#278](https://github.com/puppetlabs/pdk/pull/278) ([DavidS](https://github.com/DavidS))
|
29
|
+
- \(PDK-420\) Ensure Puppet and Puppet::Util modules are defined [\#277](https://github.com/puppetlabs/pdk/pull/277) ([rodjek](https://github.com/rodjek))
|
30
|
+
- \(PDK-430\) Do not cache template-url answer if using the default template [\#265](https://github.com/puppetlabs/pdk/pull/265) ([rodjek](https://github.com/rodjek))
|
31
|
+
|
6
32
|
## [v1.0.1](https://github.com/puppetlabs/pdk/tree/v1.0.1) (2017-08-17)
|
7
33
|
|
8
34
|
[Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.0.0...v1.0.1)
|
data/README.md
CHANGED
@@ -56,6 +56,17 @@ pdk new class class_name
|
|
56
56
|
|
57
57
|
PDK creates the new class manifest and a test file (as `class_name_spec.rb`) in your module's `/spec/classes` directory.
|
58
58
|
|
59
|
+
### Generate a defined type
|
60
|
+
|
61
|
+
To generate a defined type in your module, use the `pdk new defined_type` command, specifying the name of your new defined type.
|
62
|
+
|
63
|
+
1. From the command line, in your module's directory, run:
|
64
|
+
```
|
65
|
+
pdk new defined_type defined_type_name
|
66
|
+
```
|
67
|
+
|
68
|
+
PDK creates the new defined\_type manifest and a test file (as `defined_type_name_spec.rb`) in your module's `/spec/defines` directory.
|
69
|
+
|
59
70
|
|
60
71
|
### Validating a module
|
61
72
|
|
data/lib/pdk/answer_file.rb
CHANGED
@@ -53,7 +53,7 @@ module PDK
|
|
53
53
|
# @raise (see #save_to_disk)
|
54
54
|
def update!(new_answers = {})
|
55
55
|
unless new_answers.is_a?(Hash)
|
56
|
-
raise PDK::CLI::FatalError, _('Answer file can
|
56
|
+
raise PDK::CLI::FatalError, _('Answer file can be updated only with a Hash')
|
57
57
|
end
|
58
58
|
|
59
59
|
answers.merge!(new_answers)
|
data/lib/pdk/cli.rb
CHANGED
@@ -2,6 +2,7 @@ require 'cri'
|
|
2
2
|
|
3
3
|
require 'pdk/cli/errors'
|
4
4
|
require 'pdk/cli/util'
|
5
|
+
require 'pdk/cli/util/command_redirector'
|
5
6
|
require 'pdk/cli/util/option_normalizer'
|
6
7
|
require 'pdk/cli/util/option_validator'
|
7
8
|
require 'pdk/cli/exec_group'
|
@@ -14,6 +15,10 @@ require 'pdk/util/version'
|
|
14
15
|
module PDK::CLI
|
15
16
|
def self.run(args)
|
16
17
|
@base_cmd.run(args)
|
18
|
+
rescue PDK::CLI::ExitWithError => e
|
19
|
+
PDK.logger.error(e.message)
|
20
|
+
|
21
|
+
exit e.exit_code
|
17
22
|
rescue PDK::CLI::FatalError => e
|
18
23
|
PDK.logger.fatal(e.message) if e.message
|
19
24
|
|
@@ -33,7 +38,11 @@ module PDK::CLI
|
|
33
38
|
end
|
34
39
|
|
35
40
|
def self.template_url_option(dsl)
|
36
|
-
dsl.option nil, 'template-url', _('Specifies the URL to the template to use when creating new modules
|
41
|
+
dsl.option nil, 'template-url', _('Specifies the URL to the template to use when creating new modules or classes.'), argument: :required, default: PDK::Generate::Module.default_template_url
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.skip_interview_option(dsl)
|
45
|
+
dsl.option nil, 'skip-interview', _('When specified, skips interactive querying of metadata.')
|
37
46
|
end
|
38
47
|
|
39
48
|
@base_cmd = Cri::Command.define do
|
@@ -43,21 +52,21 @@ module PDK::CLI
|
|
43
52
|
description _('The shortest path to better modules.')
|
44
53
|
default_subcommand 'help'
|
45
54
|
|
46
|
-
flag nil, :version, _('
|
55
|
+
flag nil, :version, _('Show version of pdk.') do |_, _|
|
47
56
|
puts PDK::Util::Version.version_string
|
48
57
|
exit 0
|
49
58
|
end
|
50
59
|
|
51
|
-
flag :h, :help, _('
|
60
|
+
flag :h, :help, _('Show help for this command.') do |_, c|
|
52
61
|
puts c.help
|
53
62
|
exit 0
|
54
63
|
end
|
55
64
|
|
56
65
|
format_desc = _(
|
57
66
|
"Specify desired output format. Valid formats are '%{available_formats}'. " \
|
58
|
-
'You may also specify a file to which the formatted output
|
67
|
+
'You may also specify a file to which the formatted output is sent, ' \
|
59
68
|
"for example: '--format=junit:report.xml'. This option may be specified " \
|
60
|
-
'multiple times
|
69
|
+
'multiple times if each option specifies a distinct target file.',
|
61
70
|
) % { available_formats: PDK::Report.formats.join("', '") }
|
62
71
|
|
63
72
|
option :f, :format, format_desc, argument: :required, multiple: true do |values|
|
@@ -68,7 +77,7 @@ module PDK::CLI
|
|
68
77
|
PDK.logger.enable_debug_output
|
69
78
|
end
|
70
79
|
|
71
|
-
option nil, 'answer-file', _('Path to an answer file'), argument: :required, hidden: true do |value|
|
80
|
+
option nil, 'answer-file', _('Path to an answer file.'), argument: :required, hidden: true do |value|
|
72
81
|
PDK.answer_file = value
|
73
82
|
end
|
74
83
|
end
|
@@ -77,6 +86,7 @@ module PDK::CLI
|
|
77
86
|
require 'pdk/cli/new'
|
78
87
|
require 'pdk/cli/test'
|
79
88
|
require 'pdk/cli/validate'
|
89
|
+
require 'pdk/cli/module'
|
80
90
|
|
81
91
|
@base_cmd.add_command Cri::Command.new_basic_help
|
82
92
|
end
|
data/lib/pdk/cli/bundle.rb
CHANGED
@@ -3,9 +3,11 @@ module PDK::CLI
|
|
3
3
|
@bundle_cmd = @base_cmd.define_command do
|
4
4
|
name 'bundle'
|
5
5
|
usage _('bundle -- [bundler_options]')
|
6
|
-
summary _('
|
7
|
-
description _('[experimental] For advanced users,
|
8
|
-
'Careless use of this command can lead to errors
|
6
|
+
summary _('(Experimental) Command pass-through to bundler')
|
7
|
+
description _('[experimental] For advanced users, pdk bundle runs arbitrary commands in the bundler environment that pdk manages.' \
|
8
|
+
'Careless use of this command can lead to errors that pdk can\'t help recover from.')
|
9
|
+
|
10
|
+
be_hidden
|
9
11
|
|
10
12
|
run do |_opts, args, _cmd|
|
11
13
|
PDK::CLI::Util.ensure_in_module!
|
data/lib/pdk/cli/errors.rb
CHANGED
@@ -3,7 +3,16 @@ module PDK
|
|
3
3
|
class FatalError < StandardError
|
4
4
|
attr_reader :exit_code
|
5
5
|
|
6
|
-
def initialize(msg = _('An unexpected error has occurred
|
6
|
+
def initialize(msg = _('An unexpected error has occurred. Try running the command again with --debug'), exit_code = 1)
|
7
|
+
@exit_code = exit_code
|
8
|
+
super(msg)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class ExitWithError < StandardError
|
13
|
+
attr_reader :exit_code
|
14
|
+
|
15
|
+
def initialize(msg, exit_code = 1)
|
7
16
|
@exit_code = exit_code
|
8
17
|
super(msg)
|
9
18
|
end
|
data/lib/pdk/cli/exec.rb
CHANGED
@@ -53,15 +53,15 @@ module PDK
|
|
53
53
|
|
54
54
|
def self.try_vendored_bin(vendored_bin_path, fallback)
|
55
55
|
unless PDK::Util.package_install?
|
56
|
-
PDK.logger.debug(_("PDK package installation not found
|
56
|
+
PDK.logger.debug(_("PDK package installation not found. Trying '%{fallback}' from the system PATH instead.") % { fallback: fallback })
|
57
57
|
return fallback
|
58
58
|
end
|
59
59
|
|
60
60
|
if File.exist?(File.join(PDK::Util.pdk_package_basedir, vendored_bin_path))
|
61
|
-
PDK.logger.debug(_("Using '%{vendored_bin_path}' from PDK package") % { vendored_bin_path: vendored_bin_path })
|
61
|
+
PDK.logger.debug(_("Using '%{vendored_bin_path}' from PDK package.") % { vendored_bin_path: vendored_bin_path })
|
62
62
|
File.join(PDK::Util.pdk_package_basedir, vendored_bin_path)
|
63
63
|
else
|
64
|
-
PDK.logger.debug(_("Could not find '%{vendored_bin_path}' in PDK package
|
64
|
+
PDK.logger.debug(_("Could not find '%{vendored_bin_path}' in PDK package. Trying '%{fallback}' from the system PATH instead.") % { fallback: fallback, vendored_bin_path: vendored_bin_path })
|
65
65
|
fallback
|
66
66
|
end
|
67
67
|
end
|
@@ -99,7 +99,7 @@ module PDK
|
|
99
99
|
|
100
100
|
def context=(new_context)
|
101
101
|
unless [:system, :module].include?(new_context)
|
102
|
-
raise ArgumentError, _("Expected execution context to be :system or :module but got '%{context}'") % { context: new_context }
|
102
|
+
raise ArgumentError, _("Expected execution context to be :system or :module but got '%{context}'.") % { context: new_context }
|
103
103
|
end
|
104
104
|
|
105
105
|
@context = new_context
|
@@ -154,6 +154,7 @@ module PDK
|
|
154
154
|
File.join(@process.environment['GEM_HOME'], 'bin'),
|
155
155
|
File.join(@process.environment['GEM_PATH'], 'bin'),
|
156
156
|
package_binpath,
|
157
|
+
PDK::Util.package_install? ? PDK::CLI::Exec.git_bindir : nil,
|
157
158
|
ENV['PATH'],
|
158
159
|
].compact.join(File::PATH_SEPARATOR)
|
159
160
|
|
@@ -217,6 +218,10 @@ module PDK
|
|
217
218
|
def run_process!
|
218
219
|
command_string = argv.join(' ')
|
219
220
|
PDK.logger.debug(_("Executing '%{command}'") % { command: command_string })
|
221
|
+
if context == :module
|
222
|
+
PDK.logger.debug(_("Command environment: GEM_HOME is '%{gem_home}' and GEM_PATH is '%{gem_path}'") % { gem_home: @process.environment['GEM_HOME'],
|
223
|
+
gem_path: @process.environment['GEM_PATH'] })
|
224
|
+
end
|
220
225
|
start_time = Time.now
|
221
226
|
begin
|
222
227
|
@process.start
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module PDK::CLI
|
2
|
+
@module_cmd = @base_cmd.define_command do
|
3
|
+
name 'module'
|
4
|
+
usage _('module [options]')
|
5
|
+
summary _('Perform administrative tasks on your module.')
|
6
|
+
description _('Perform tasks on the module project.')
|
7
|
+
default_subcommand 'help'
|
8
|
+
be_hidden
|
9
|
+
end
|
10
|
+
|
11
|
+
@module_cmd.add_command Cri::Command.new_basic_help
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'pdk/cli/module/generate'
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'tty-prompt'
|
2
|
+
|
3
|
+
module PDK::CLI
|
4
|
+
@module_generate_cmd = @module_cmd.define_command do
|
5
|
+
name 'generate'
|
6
|
+
usage _('generate [options] <module_name>')
|
7
|
+
summary _('This command is now \'pdk new module\'.')
|
8
|
+
be_hidden
|
9
|
+
|
10
|
+
PDK::CLI.template_url_option(self)
|
11
|
+
PDK::CLI.skip_interview_option(self)
|
12
|
+
|
13
|
+
run do |opts, args, _cmd|
|
14
|
+
require 'pdk/generators/module'
|
15
|
+
|
16
|
+
module_name = args[0]
|
17
|
+
|
18
|
+
if module_name.nil? || module_name.empty?
|
19
|
+
puts command.help
|
20
|
+
exit 1
|
21
|
+
end
|
22
|
+
|
23
|
+
PDK.logger.info(_('New modules are created using the ‘pdk new module’ command.'))
|
24
|
+
prompt = TTY::Prompt.new(help_color: :cyan)
|
25
|
+
redirect = PDK::CLI::Util::CommandRedirector.new(prompt)
|
26
|
+
redirect.target_command('pdk new module')
|
27
|
+
answer = redirect.run
|
28
|
+
|
29
|
+
if answer
|
30
|
+
opts[:name] = module_name
|
31
|
+
opts[:target_dir] = module_name
|
32
|
+
|
33
|
+
PDK.logger.info(_('Creating new module: %{modname}') % { modname: module_name })
|
34
|
+
PDK::Generate::Module.invoke(opts)
|
35
|
+
else
|
36
|
+
exit 1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/pdk/cli/new.rb
CHANGED
@@ -4,7 +4,7 @@ module PDK::CLI
|
|
4
4
|
name 'new'
|
5
5
|
usage _('new <type> [options]')
|
6
6
|
summary _('create a new module, etc.')
|
7
|
-
description _('Creates a new instance of <type> using
|
7
|
+
description _('Creates a new instance of <type> using relevant options.')
|
8
8
|
default_subcommand 'help'
|
9
9
|
end
|
10
10
|
|
@@ -12,4 +12,5 @@ module PDK::CLI
|
|
12
12
|
end
|
13
13
|
|
14
14
|
require 'pdk/cli/new/class'
|
15
|
+
require 'pdk/cli/new/defined_type'
|
15
16
|
require 'pdk/cli/new/module'
|
data/lib/pdk/cli/new/class.rb
CHANGED
@@ -20,7 +20,7 @@ module PDK::CLI
|
|
20
20
|
end
|
21
21
|
|
22
22
|
unless Util::OptionValidator.valid_class_name?(class_name)
|
23
|
-
raise PDK::CLI::
|
23
|
+
raise PDK::CLI::ExitWithError, _("'%{name}' is not a valid class name") % { name: class_name }
|
24
24
|
end
|
25
25
|
|
26
26
|
PDK::Generate::PuppetClass.new(module_dir, class_name, opts).run
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module PDK::CLI
|
2
|
+
@new_define_cmd = @new_cmd.define_command do
|
3
|
+
name 'defined_type'
|
4
|
+
usage _('defined_type [options] <name>')
|
5
|
+
summary _('Create a new defined type named <name> using given options')
|
6
|
+
|
7
|
+
PDK::CLI.template_url_option(self)
|
8
|
+
|
9
|
+
run do |opts, args, _cmd|
|
10
|
+
PDK::CLI::Util.ensure_in_module!
|
11
|
+
|
12
|
+
defined_type_name = args[0]
|
13
|
+
module_dir = Dir.pwd
|
14
|
+
|
15
|
+
if defined_type_name.nil? || defined_type_name.empty?
|
16
|
+
puts command.help
|
17
|
+
exit 1
|
18
|
+
end
|
19
|
+
|
20
|
+
unless Util::OptionValidator.valid_defined_type_name?(defined_type_name)
|
21
|
+
raise PDK::CLI::ExitWithError, _("'%{name}' is not a valid defined type name") % { name: defined_type_name }
|
22
|
+
end
|
23
|
+
|
24
|
+
PDK::Generate::DefinedType.new(module_dir, defined_type_name, opts).run
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/pdk/cli/new/module.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
module PDK::CLI
|
3
2
|
@new_module_cmd = @new_cmd.define_command do
|
4
3
|
name 'module'
|
@@ -6,12 +5,11 @@ module PDK::CLI
|
|
6
5
|
summary _('Create a new module named <module_name> using given options')
|
7
6
|
|
8
7
|
PDK::CLI.template_url_option(self)
|
8
|
+
PDK::CLI.skip_interview_option(self)
|
9
9
|
|
10
10
|
option nil, 'license', _('Specifies the license this module is written under. ' \
|
11
11
|
"This should be a identifier from https://spdx.org/licenses/. Common values are 'Apache-2.0', 'MIT', or 'proprietary'."), argument: :required
|
12
12
|
|
13
|
-
flag nil, 'skip-interview', _('When specified, skips interactive querying of metadata.')
|
14
|
-
|
15
13
|
run do |opts, args, _cmd|
|
16
14
|
require 'pdk/generators/module'
|
17
15
|
|
@@ -23,14 +21,6 @@ module PDK::CLI
|
|
23
21
|
exit 1
|
24
22
|
end
|
25
23
|
|
26
|
-
unless Util::OptionValidator.valid_module_name?(module_name)
|
27
|
-
error_msg = _(
|
28
|
-
"'%{module_name}' is not a valid module name.\n" \
|
29
|
-
'Module names must begin with a lowercase letter and can only include lowercase letters, digits, and underscores.',
|
30
|
-
) % { module_name: module_name }
|
31
|
-
raise PDK::CLI::FatalError, error_msg
|
32
|
-
end
|
33
|
-
|
34
24
|
opts[:name] = module_name
|
35
25
|
opts[:target_dir] = target_dir.nil? ? module_name : target_dir
|
36
26
|
|
data/lib/pdk/cli/util.rb
CHANGED
@@ -3,11 +3,11 @@ module PDK
|
|
3
3
|
module Util
|
4
4
|
# Ensures the calling code is being run from inside a module directory.
|
5
5
|
#
|
6
|
-
# @raise [PDK::CLI::
|
6
|
+
# @raise [PDK::CLI::ExitWithError] if the current directory or parents do
|
7
7
|
# not contain a `metadata.json` file.
|
8
8
|
def ensure_in_module!
|
9
|
-
message = _('This command must be run from inside a module (no metadata.json found)')
|
10
|
-
raise PDK::CLI::
|
9
|
+
message = _('This command must be run from inside a valid module (no metadata.json found).')
|
10
|
+
raise PDK::CLI::ExitWithError, message if PDK::Util.module_root.nil?
|
11
11
|
end
|
12
12
|
module_function :ensure_in_module!
|
13
13
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'tty-prompt'
|
2
|
+
|
3
|
+
module PDK
|
4
|
+
module CLI
|
5
|
+
module Util
|
6
|
+
class CommandRedirector < TTY::Prompt::AnswersCollector
|
7
|
+
attr_accessor :command
|
8
|
+
|
9
|
+
def pastel
|
10
|
+
@pastel ||= Pastel.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def target_command(cmd)
|
14
|
+
@command = cmd
|
15
|
+
end
|
16
|
+
|
17
|
+
def run
|
18
|
+
@prompt.puts _('Did you mean \'%{command}\'?') % { command: pastel.bold(@command) }
|
19
|
+
@prompt.yes?('-->')
|
20
|
+
rescue TTY::Prompt::Reader::InputInterrupt
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -29,15 +29,26 @@ module PDK
|
|
29
29
|
@name = question_name
|
30
30
|
@prompt.print pastel.bold(_('[Q %{current_number}/%{questions_total}]') % { current_number: i, questions_total: num_questions }) + ' '
|
31
31
|
@prompt.puts pastel.bold(question[:question])
|
32
|
-
@prompt.puts question[:help]
|
33
|
-
|
34
|
-
|
32
|
+
@prompt.puts question[:help] if question.key?(:help)
|
33
|
+
if question.key?(:choices)
|
34
|
+
multi_select(_('-->'), per_page: question[:choices].count) do |q|
|
35
|
+
q.enum ')'
|
36
|
+
q.default(*question[:default]) if question.key?(:default)
|
35
37
|
|
36
|
-
|
37
|
-
|
38
|
+
question[:choices].each do |text, metadata|
|
39
|
+
q.choice text, metadata
|
40
|
+
end
|
38
41
|
end
|
42
|
+
else
|
43
|
+
ask(_('-->')) do |q|
|
44
|
+
q.required(question.fetch(:required, false))
|
39
45
|
|
40
|
-
|
46
|
+
if question.key?(:validate_pattern)
|
47
|
+
q.validate(question[:validate_pattern], question[:validate_message])
|
48
|
+
end
|
49
|
+
|
50
|
+
q.default(question[:default]) if question.key?(:default)
|
51
|
+
end
|
41
52
|
end
|
42
53
|
i += 1
|
43
54
|
@prompt.puts ''
|