compass/lib/compass/commands/write_configuration.rb
2009-10-26 18:52:27 -07:00

91 lines
2.4 KiB
Ruby

require 'compass/commands/project_base'
module Compass
module Commands
module ConfigurationOptionsParser
def set_options(opts)
opts.banner = %Q{
Usage: compass config [path/to/config_file.rb] [options]
Description:
Generate a configuration file for the options specified.
Compass will recognize configuration files in the
following locations relative to the project root:
* #{Compass::Configuration::Helpers::KNOWN_CONFIG_LOCATIONS.join("
* ")}
Any other location, and you'll need to specify it when working with the command line tool using the -c option.
Options:
}.strip.split("\n").map{|l| l.gsub(/^ {0,10}/,'')}.join("\n")
super
end
end
class WriteConfiguration < ProjectBase
register :config
include InstallerCommand
def initialize(working_path, options)
super
assert_project_directory_exists!
end
def add_project_configuration
Compass.add_project_configuration
end
def perform
directory projectize(File.dirname(options[:configuration_file]))
installer.write_configuration_files(options[:configuration_file])
end
def installer_args
[nil, project_directory, options]
end
def explicit_config_file_must_be_readable?
false
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(ConfigurationOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Generate a configuration file for the provided command line options."
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parse_arguments!(parser, arguments)
parser.options
end
def parse_arguments!(parser, arguments)
if arguments.size == 1
parser.options[:configuration_file] = arguments.shift
elsif arguments.size == 0
# default to the current directory.
else
raise Compass::Error, "Too many arguments were specified."
end
end
end
end
end
end