diff --git a/lib/compass/commands.rb b/lib/compass/commands.rb index 227b405b..fdeceadf 100644 --- a/lib/compass/commands.rb +++ b/lib/compass/commands.rb @@ -3,7 +3,7 @@ end require 'compass/commands/registry' -%w(base generate_grid_background list_frameworks project_base +%w(base generate_grid_background help list_frameworks project_base update_project watch_project create_project installer_command print_version stamp_pattern validate_project write_configuration).each do |lib| require "compass/commands/#{lib}" diff --git a/lib/compass/commands/create_project.rb b/lib/compass/commands/create_project.rb index 2c2dba6f..57cd8a47 100644 --- a/lib/compass/commands/create_project.rb +++ b/lib/compass/commands/create_project.rb @@ -56,6 +56,14 @@ module Compass option_parser([]).to_s end + def description(command) + if command.to_sym == :create + "Create a new compass project" + else + "Initialize an existing project" + end + end + def parse!(arguments) parser = option_parser(arguments) parse_options!(parser, arguments) diff --git a/lib/compass/commands/help.rb b/lib/compass/commands/help.rb new file mode 100644 index 00000000..ed5798cd --- /dev/null +++ b/lib/compass/commands/help.rb @@ -0,0 +1,62 @@ +module Compass + module Commands + module HelpOptionsParser + def set_options(opts) + banner = %Q{Usage: compass help [command] + +Description: + The Compass Stylesheet Authoring Framework helps you + build and maintain your stylesheets and makes it easy + for you to use stylesheet libraries provided by others. + +To get help on a particular command please specify the command. + +Available commands: + +} + Compass::Commands.all.sort_by{|c| c.to_s}.each do |command| + banner << " * #{command}" + if Compass::Commands[command].respond_to? :description + banner << " - #{Compass::Commands[command].description(command)}" + end + banner << "\n" + end + opts.banner = banner + + super + end + end + class Help < Base + register :help + + class << self + def option_parser(arguments) + parser = Compass::Exec::CommandOptionParser.new(arguments) + parser.extend(HelpOptionsParser) + end + def usage + option_parser([]).to_s + end + def description(command) + "Get help on a compass command or extension" + end + def parse!(arguments) + parser = option_parser(arguments) + parser.parse! + parser.options[:help_command] = arguments.shift || 'help' + parser.options + end + end + + def execute + if Compass::Commands.command_exists? options[:help_command] + $command = options[:help_command] + puts Compass::Commands[options[:help_command]].usage + $command = "help" + else + raise OptionParser::ParseError, "No such command: #{options[:help_command]}" + end + end + end + end +end diff --git a/lib/compass/commands/registry.rb b/lib/compass/commands/registry.rb index 53e3db37..d073bcb6 100644 --- a/lib/compass/commands/registry.rb +++ b/lib/compass/commands/registry.rb @@ -12,6 +12,9 @@ module Compass::Commands @commands ||= Hash.new @commands.has_key?(name.to_sym) end + def all + @commands.keys + end alias_method :[], :get alias_method :[]=, :register end