lib/pdk/generate/module.rb in pdk-1.13.0 vs lib/pdk/generate/module.rb in pdk-1.14.0
- old
+ new
@@ -1,27 +1,15 @@
-require 'etc'
-require 'pathname'
-require 'fileutils'
-require 'tty-prompt'
+require 'pdk/util/filesystem'
-require 'pdk'
-require 'pdk/logger'
-require 'pdk/module/metadata'
-require 'pdk/module/templatedir'
-require 'pdk/cli/exec'
-require 'pdk/cli/util'
-require 'pdk/cli/util/interview'
-require 'pdk/cli/util/option_validator'
-require 'pdk/util'
-require 'pdk/util/version'
-
module PDK
module Generate
class Module
extend PDK::Util::Filesystem
def self.validate_options(opts)
+ require 'pdk/cli/util/option_validator'
+
unless PDK::CLI::Util::OptionValidator.valid_module_name?(opts[:module_name])
error_msg = _(
"'%{module_name}' is not a valid module name.\n" \
'Module names must begin with a lowercase letter and can only include lowercase letters, digits, and underscores.',
) % { module_name: opts[:module_name] }
@@ -31,10 +19,16 @@
target_dir = File.expand_path(opts[:target_dir])
raise PDK::CLI::ExitWithError, _("The destination directory '%{dir}' already exists") % { dir: target_dir } if File.exist?(target_dir)
end
def self.invoke(opts = {})
+ require 'pdk/module/templatedir'
+ require 'pdk/util'
+ require 'pdk/util/template_uri'
+ require 'fileutils'
+ require 'pathname'
+
validate_options(opts) unless opts[:module_name].nil?
metadata = prepare_metadata(opts)
target_dir = File.expand_path(opts[:target_dir] || opts[:module_name])
@@ -74,10 +68,11 @@
rescue ArgumentError => e
raise PDK::CLI::ExitWithError, e
end
# Only update the answers files after metadata has been written.
+ require 'pdk/answer_file'
if template_uri.default?
# If the user specifies our default template url via the command
# line, remove the saved template-url answer so that the template_uri
# resolution can find new default URLs in the future.
PDK.answers.update!('template-url' => nil) if opts.key?(:'template-url')
@@ -87,11 +82,16 @@
PDK.answers.update!('template-url' => template_uri.metadata_format)
end
begin
if FileUtils.mv(temp_target_dir, target_dir)
- Dir.chdir(target_dir) { PDK::Util::Bundler.ensure_bundle! } unless opts[:'skip-bundle-install']
+ unless opts[:'skip-bundle-install']
+ Dir.chdir(target_dir) do
+ require 'pdk/util/bundler'
+ PDK::Util::Bundler.ensure_bundle!
+ end
+ end
PDK.logger.info _('Module \'%{name}\' generated at path \'%{path}\', from template \'%{url}\'.') % { name: opts[:module_name], path: target_dir, url: template_uri.git_remote }
PDK.logger.info(_('In your module directory, add classes with the \'pdk new class\' command.'))
end
rescue Errno::EACCES => e
@@ -102,10 +102,12 @@
}
end
end
def self.username_from_login
+ require 'etc'
+
login = Etc.getlogin || ''
login_clean = login.downcase.gsub(%r{[^0-9a-z]}i, '')
login_clean = 'username' if login_clean.empty?
if login_clean != login
@@ -116,10 +118,13 @@
login_clean
end
def self.prepare_metadata(opts = {})
+ require 'pdk/answer_file'
+ require 'pdk/module/metadata'
+
opts[:username] = (opts[:username] || PDK.answers['forge_username'] || username_from_login).downcase
defaults = PDK::Module::Metadata::DEFAULTS.dup
defaults['name'] = "#{opts[:username]}-#{opts[:module_name]}" unless opts[:module_name].nil?
@@ -132,10 +137,12 @@
metadata
end
def self.prepare_module_directory(target_dir)
+ require 'fileutils'
+
[
File.join(target_dir, 'examples'),
File.join(target_dir, 'files'),
File.join(target_dir, 'manifests'),
File.join(target_dir, 'templates'),
@@ -151,10 +158,13 @@
end
end
end
def self.module_interview(metadata, opts = {})
+ require 'pdk/module/metadata'
+ require 'pdk/cli/util/interview'
+
questions = [
{
name: 'module_name',
question: _('If you have a name for your module, add it here.'),
help: _('This is the name that will be associated with your module, it should be relevant to the modules content.'),
@@ -305,10 +315,12 @@
answers['operatingsystem_support'].flatten! if answers.key?('operatingsystem_support')
metadata.update!(answers)
if opts[:prompt].nil? || opts[:prompt]
+ require 'pdk/cli/util'
+
continue = PDK::CLI::Util.prompt_for_yes(
_('Metadata will be generated based on this information, continue?'),
prompt: prompt,
cancel_message: _('Interview cancelled; exiting.'),
)
@@ -317,9 +329,10 @@
PDK.logger.info _('Process cancelled; exiting.')
exit 0
end
end
+ require 'pdk/answer_file'
PDK.answers.update!(
{
'forge_username' => opts[:username],
'author' => answers['author'],
'license' => answers['license'],