Expose CLI config parameters at configuration parse time.

This commit is contained in:
Chris Eppstein 2010-12-18 11:26:42 -08:00
parent b47ff5106a
commit f318e93764
5 changed files with 27 additions and 9 deletions

View File

@ -22,6 +22,10 @@ The Documentation for the [latest preview release](http://beta.compass-style.org
optional based on Compass's legacy support settings.
* Added the ability to piggy back on compass's watcher within your configuration file.
See the [configuration reference](/help/tutorials/configuration-reference/) for details.
* The options passed to the CLI can now be inspected within the compass configuration file.
The CLI options will still override the values set within the config file, but they might
inform other values. For instance `compass compile -e production` will have the environment
parameter preset to `:production` so that you can set other values in the project accordingly.
0.11.alpha.4 (12/08/2010)

View File

@ -28,7 +28,7 @@ module Compass
end
def add_project_configuration
Compass.add_project_configuration(options[:configuration_file]) do
Compass.add_project_configuration(options[:configuration_file], :defaults => Compass.configuration_for(options, "cli_defaults")) do
options[:project_type]
end
end

View File

@ -27,18 +27,18 @@ module Compass
@configuration = data
end
def configuration_for(config, filename = nil)
def configuration_for(config, filename = nil, defaults = nil)
if config.nil?
nil
elsif config.is_a?(Compass::Configuration::Data)
config
elsif config.respond_to?(:read)
filename ||= config.to_s if config.is_a?(Pathname)
Compass::Configuration::Data.new_from_string(config.read, filename)
Compass::Configuration::Data.new_from_string(config.read, filename, defaults)
elsif config.is_a?(Hash)
Compass::Configuration::Data.new(filename, config)
elsif config.is_a?(String)
Compass::Configuration::Data.new_from_file(config)
Compass::Configuration::Data.new_from_file(config, defaults)
elsif config.is_a?(Symbol)
Compass::AppIntegration.lookup(config).configuration
else
@ -76,7 +76,7 @@ module Compass
options = args.last.is_a?(Hash) ? args.pop : {}
configuration_file_path = args.shift || detect_configuration_file
raise ArgumentError, "Too many arguments" if args.any?
if data = configuration_for(configuration_file_path)
if data = configuration_for(configuration_file_path, nil, configuration_for(options[:defaults]))
if data.raw_project_type
add_configuration(data.raw_project_type.to_sym)
elsif options[:project_type]

View File

@ -87,6 +87,16 @@ module Compass
self
end
def reset_inheritance!
self.inherited_data = nil
end
def with_defaults(data)
inherit_from!(data)
yield
reset_inheritance!
end
def unset!(attribute)
@set_attributes ||= {}
send("#{attribute}=", nil)

View File

@ -8,15 +8,19 @@ module Compass
end
module ClassMethods
def new_from_file(config_file)
def new_from_file(config_file, defaults)
data = Data.new(config_file)
data._parse(config_file)
data.with_defaults(defaults) do
data._parse(config_file)
end
data
end
def new_from_string(contents, filename)
def new_from_string(contents, filename, defaults)
data = Data.new(filename)
data.parse_string(contents, filename)
data.with_defaults(defaults) do
data.parse_string(contents, filename)
end
data
end
end