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'],