require 'cmdparse' require 'caramelize/version' module Caramelize module CLI # Namespace for all classes that act as CLI commands. autoload :RunCommand, 'caramelize/cli/run_command' autoload :CreateCommand, 'caramelize/cli/create_command' autoload :ContentTransferer, 'caramelize/content_transferer' # This is the command parser class used for handling the webgen command line interface. After # creating an instance, the inherited #parse method can be used for parsing the command line # arguments and executing the requested command. class CommandParser < CmdParse::CommandParser # The website directory. Default: the current working directory. attr_reader :directory # The verbosity level. Default: :normal attr_reader :verbosity # Create a new CommandParser class. T def initialize super(true) @directory = nil @verbosity = :normal self.program_name = "caramelize" self.program_version = Caramelize::VERSION self.options = CmdParse::OptionParserWrapper.new do |opts| opts.separator "Global options:" opts.on("--config DIR", "-d", String, "The config file (default: caramel.conf)") {|p| @directory = p} opts.on("--verbose", "-v", "Print more output") { @verbosity = :verbose } opts.on("--quiet", "-q", "No output") { @verbosity = :quiet } end self.add_command(CmdParse::HelpCommand.new) self.add_command(CmdParse::VersionCommand.new) end KNOWN_CONFIG_LOCATIONS = ['config/caramel.rb', "config/caramel.config", "caramel.rb", "src/caramel.rb"] # Finds the configuration file, if it exists in a known location. def detect_configuration_file(config_path = nil) possible_files = KNOWN_CONFIG_LOCATIONS possible_files.detect{|f| File.exists?(f)} end # Utility method for sub-commands to create a default config file def create_config # TODO create dummy config #if !defined?(@website) #@config = Webgen::Website.new(@directory) do |config| # config['logger.mask'] = @log_filter #end #end #@config end # Utility method for sub-commands to transfer wiki contents def transfer_content # TODO maybe move to mixin time_start = Time.now # TODO outsource to config file = detect_configuration_file if file && File.exists?(file) instance_eval(File.read(file), file || '') original_wiki = input_wiki ContentTransferer.execute original_wiki, {:verbosity => @verbosity} time_end = Time.now puts "Time required: #{time_end - time_start} s" if @verbosity else puts "No config file found." end end # :nodoc: def parse(argv = ARGV) Caramelize::CLI.constants.select {|c| c =~ /.+Command$/ }.each do |c| self.add_command(Caramelize::CLI.const_get(c).new, (c.to_s == 'RunCommand' ? false : false)) # set runcommand as default end super end end end end