lib/chef-dk/command/generate.rb in chef-dk-2.4.17 vs lib/chef-dk/command/generate.rb in chef-dk-2.5.3

- old
+ new

@@ -1,125 +1,125 @@ -# -# Copyright:: Copyright (c) 2014 Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "chef-dk/command/base" -require "chef-dk/command/generator_commands" -require "chef-dk/command/generator_commands/base" -require "chef-dk/command/generator_commands/cookbook_code_file" -require "chef-dk/command/generator_commands/cookbook" -require "chef-dk/command/generator_commands/app" -require "chef-dk/command/generator_commands/attribute" -require "chef-dk/command/generator_commands/cookbook_file" -require "chef-dk/command/generator_commands/helpers" -require "chef-dk/command/generator_commands/resource" -require "chef-dk/command/generator_commands/recipe" -require "chef-dk/command/generator_commands/template" -require "chef-dk/command/generator_commands/repo" -require "chef-dk/command/generator_commands/policyfile" -require "chef-dk/command/generator_commands/generator_generator" -require "chef-dk/command/generator_commands/build_cookbook" - -module ChefDK - module Command - class Generate < Base - - GeneratorCommand = Struct.new(:name, :class_name, :description) - - def self.generators - @generators ||= [] - end - - def self.generator(name, class_name, description) - generators << GeneratorCommand.new(name, class_name, description) - end - - generator(:app, :App, "Generate an application repo") - generator(:cookbook, :Cookbook, "Generate a single cookbook") - generator(:recipe, :Recipe, "Generate a new recipe") - generator(:attribute, :Attribute, "Generate an attributes file") - generator(:template, :Template, "Generate a file template") - generator(:file, :CookbookFile, "Generate a cookbook file") - generator(:helpers, :Helpers, "Generate a cookbook helper file in libraries") - generator(:lwrp, :Resource, "Generate a custom resource") - generator(:resource, :Resource, "Generate a custom resource") - generator(:repo, :Repo, "Generate a Chef code repository") - generator(:policyfile, :Policyfile, "Generate a Policyfile for use with the install/push commands") - generator(:generator, :GeneratorGenerator, "Copy ChefDK's generator cookbook so you can customize it") - generator(:'build-cookbook', :BuildCookbook, "Generate a build cookbook for use with Delivery") - - def self.banner_headline - <<-E -Usage: chef generate GENERATOR [options] - -Available generators: -E - end - - def self.generator_list - justify_size = generators.map { |g| g.name.size }.max + 2 - generators.map { |g| " #{g.name.to_s.ljust(justify_size)}#{g.description}" }.join("\n") - end - - def self.banner - banner_headline + generator_list + "\n" - end - - # chef generate app path/to/basename --skel=path/to/skeleton --example - # chef generate file name [path/to/cookbook_root] (inferred from cwd) --from=source_file - - def initialize(*args) - super - end - - def run(params) - if generator_spec = generator_for(params[0]) - params.shift - generator = GeneratorCommands.build(generator_spec.class_name, params) - generator.run - else - msg(banner) - 1 - end - rescue OptionParser::InvalidOption, OptionParser::MissingArgument => e - # ChefDK::Command::Base also handles this error in the same way, but it - # does not have access to the correct option parser, so it cannot print - # the usage correctly. Therefore, invalid CLI usage needs to be handled - # here. - err("ERROR: #{e.message}\n") - msg(generator.opt_parser) - 1 - end - - def generator_for(arg) - self.class.generators.find { |g| g.name.to_s == arg } - end - - # In the Base class, this is defined to be true if any args match "-h" or - # "--help". Here we override that behavior such that if the first - # argument is a valid generator name, like `chef generate cookbook -h`, - # we delegate the request to the specified generator. - def needs_help?(params) - return false if have_generator?(params[0]) - super - end - - def have_generator?(name) - self.class.generators.map { |g| g.name.to_s }.include?(name) - end - - end - end -end +# +# Copyright:: Copyright (c) 2014 Chef Software Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require "chef-dk/command/base" +require "chef-dk/command/generator_commands" +require "chef-dk/command/generator_commands/base" +require "chef-dk/command/generator_commands/cookbook_code_file" +require "chef-dk/command/generator_commands/cookbook" +require "chef-dk/command/generator_commands/app" +require "chef-dk/command/generator_commands/attribute" +require "chef-dk/command/generator_commands/cookbook_file" +require "chef-dk/command/generator_commands/helpers" +require "chef-dk/command/generator_commands/resource" +require "chef-dk/command/generator_commands/recipe" +require "chef-dk/command/generator_commands/template" +require "chef-dk/command/generator_commands/repo" +require "chef-dk/command/generator_commands/policyfile" +require "chef-dk/command/generator_commands/generator_generator" +require "chef-dk/command/generator_commands/build_cookbook" + +module ChefDK + module Command + class Generate < Base + + GeneratorCommand = Struct.new(:name, :class_name, :description) + + def self.generators + @generators ||= [] + end + + def self.generator(name, class_name, description) + generators << GeneratorCommand.new(name, class_name, description) + end + + generator(:app, :App, "Generate an application repo") + generator(:cookbook, :Cookbook, "Generate a single cookbook") + generator(:recipe, :Recipe, "Generate a new recipe") + generator(:attribute, :Attribute, "Generate an attributes file") + generator(:template, :Template, "Generate a file template") + generator(:file, :CookbookFile, "Generate a cookbook file") + generator(:helpers, :Helpers, "Generate a cookbook helper file in libraries") + generator(:lwrp, :Resource, "Generate a custom resource") + generator(:resource, :Resource, "Generate a custom resource") + generator(:repo, :Repo, "Generate a Chef code repository") + generator(:policyfile, :Policyfile, "Generate a Policyfile for use with the install/push commands") + generator(:generator, :GeneratorGenerator, "Copy ChefDK's generator cookbook so you can customize it") + generator(:'build-cookbook', :BuildCookbook, "Generate a build cookbook for use with Delivery") + + def self.banner_headline + <<-E +Usage: chef generate GENERATOR [options] + +Available generators: +E + end + + def self.generator_list + justify_size = generators.map { |g| g.name.size }.max + 2 + generators.map { |g| " #{g.name.to_s.ljust(justify_size)}#{g.description}" }.join("\n") + end + + def self.banner + banner_headline + generator_list + "\n" + end + + # chef generate app path/to/basename --skel=path/to/skeleton --example + # chef generate file name [path/to/cookbook_root] (inferred from cwd) --from=source_file + + def initialize(*args) + super + end + + def run(params) + if generator_spec = generator_for(params[0]) + params.shift + generator = GeneratorCommands.build(generator_spec.class_name, params) + generator.run + else + msg(banner) + 1 + end + rescue OptionParser::InvalidOption, OptionParser::MissingArgument => e + # ChefDK::Command::Base also handles this error in the same way, but it + # does not have access to the correct option parser, so it cannot print + # the usage correctly. Therefore, invalid CLI usage needs to be handled + # here. + err("ERROR: #{e.message}\n") + msg(generator.opt_parser) + 1 + end + + def generator_for(arg) + self.class.generators.find { |g| g.name.to_s == arg } + end + + # In the Base class, this is defined to be true if any args match "-h" or + # "--help". Here we override that behavior such that if the first + # argument is a valid generator name, like `chef generate cookbook -h`, + # we delegate the request to the specified generator. + def needs_help?(params) + return false if have_generator?(params[0]) + super + end + + def have_generator?(name) + self.class.generators.map { |g| g.name.to_s }.include?(name) + end + + end + end +end