Added a mechanism for plugins to extend compass's configuration options.
This commit is contained in:
parent
b1b718e78a
commit
810b95e7f3
@ -14,6 +14,12 @@ The Documentation for the [latest stable release](http://compass-style.org/docs/
|
|||||||
|
|
||||||
The Documentation for the [latest preview release](http://beta.compass-style.org/)
|
The Documentation for the [latest preview release](http://beta.compass-style.org/)
|
||||||
|
|
||||||
|
0.11.beta.8 (UNRELEASED)
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
* Created an official API to add configuration options to compass.
|
||||||
|
[More information](/help/tutorials/extending/).
|
||||||
|
|
||||||
0.11.beta.7 (04/16/2011)
|
0.11.beta.7 (04/16/2011)
|
||||||
------------------------
|
------------------------
|
||||||
* Added support for the new webkit gradient syntax that matches the css3 specification.
|
* Added support for the new webkit gradient syntax that matches the css3 specification.
|
||||||
|
@ -12,7 +12,7 @@ classnames:
|
|||||||
|
|
||||||
The sprite engine is the work horse of sprite generation it's the interface for assembling and writing the image file to disk.
|
The sprite engine is the work horse of sprite generation it's the interface for assembling and writing the image file to disk.
|
||||||
|
|
||||||
## Requirments
|
### Requirements
|
||||||
|
|
||||||
A sprite engine requires only one method and that is `construct_sprite` which must return an object that responds to `save(filepath)`
|
A sprite engine requires only one method and that is `construct_sprite` which must return an object that responds to `save(filepath)`
|
||||||
|
|
||||||
@ -30,7 +30,6 @@ The example below will load `Compass::SassExtension::Sprites::ChunkyPngEngine`
|
|||||||
|
|
||||||
sprite_engine = :chunky_png
|
sprite_engine = :chunky_png
|
||||||
|
|
||||||
|
|
||||||
### Class Definition
|
### Class Definition
|
||||||
|
|
||||||
module Compass
|
module Compass
|
||||||
@ -47,3 +46,28 @@ The example below will load `Compass::SassExtension::Sprites::ChunkyPngEngine`
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
<a name="adding-configuration-properties"></a>
|
||||||
|
## Adding Configuration Properties to Compass
|
||||||
|
|
||||||
|
To add a new configuration property to Compass:
|
||||||
|
|
||||||
|
Compass::Configuration.add_configuration_property(:foobar, "this is a foobar") do
|
||||||
|
if environment == :production
|
||||||
|
"foo"
|
||||||
|
else
|
||||||
|
"bar"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
This will do several things:
|
||||||
|
|
||||||
|
1. make it possible for users to set the `foobar` configuration property in their
|
||||||
|
configuration file.
|
||||||
|
2. Ruby code can read and write the `foobar` attribute from any configuration object.
|
||||||
|
3. It will add the comment `# this is a foobar` above the property in the configuration file.
|
||||||
|
A comment is not required, you can simply omit this argument if you like.
|
||||||
|
4. The block of code provided allows you to assign a sensible default value according to other
|
||||||
|
settings in the configuration or by using arbitrary code to determine what the value should
|
||||||
|
be. For instance it could read from another configuration file or it could change based on
|
||||||
|
the user's operating system.
|
@ -106,6 +106,10 @@ template directories are not at the top level, you can just do this instead:
|
|||||||
base_directory = File.join(File.dirname(__FILE__), '..', 'compass')
|
base_directory = File.join(File.dirname(__FILE__), '..', 'compass')
|
||||||
Compass::Frameworks.register('my_extension', :path => base_directory)
|
Compass::Frameworks.register('my_extension', :path => base_directory)
|
||||||
|
|
||||||
|
### Adding Configuration Options to Compass
|
||||||
|
|
||||||
|
For details on how to add new configuration options to compass [read this](/help/tutorials/extending/#adding-configuration-properties).
|
||||||
|
|
||||||
Conventions to Follow
|
Conventions to Follow
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
|
@ -41,6 +41,40 @@ module Compass
|
|||||||
:sprite_engine
|
:sprite_engine
|
||||||
].flatten
|
].flatten
|
||||||
|
|
||||||
|
# Registers a new configuration property.
|
||||||
|
# Extensions can use this to add new configuration options to compass.
|
||||||
|
#
|
||||||
|
# @param [Symbol] name The name of the property.
|
||||||
|
# @param [String] comment A comment for the property.
|
||||||
|
# @param [Proc] default A method to calculate the default value for the property.
|
||||||
|
# The proc is executed in the context of the project's configuration data.
|
||||||
|
def self.add_configuration_property(name, comment = nil, &default)
|
||||||
|
ATTRIBUTES << name
|
||||||
|
if comment.is_a?(String)
|
||||||
|
unless comment[0..0] == "#"
|
||||||
|
comment = "# #{comment}"
|
||||||
|
end
|
||||||
|
unless comment[-1..-1] == "\n"
|
||||||
|
comment = comment + "\n"
|
||||||
|
end
|
||||||
|
Data.class_eval <<-COMMENT
|
||||||
|
def comment_for_#{name}
|
||||||
|
#{comment.inspect}
|
||||||
|
end
|
||||||
|
COMMENT
|
||||||
|
end
|
||||||
|
Data.send(:define_method, :"default_#{name}", &default) if default
|
||||||
|
Data.inherited_accessor(name)
|
||||||
|
if name.to_s =~ /dir|path/
|
||||||
|
strip_trailing_separator(name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# For testing purposes
|
||||||
|
def self.remove_configuration_property(name)
|
||||||
|
ATTRIBUTES.delete(name)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -125,6 +125,7 @@ module Compass
|
|||||||
Compass::Frameworks.register_directory framework_dir
|
Compass::Frameworks.register_directory framework_dir
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Finds all extensions within a directory and registers them.
|
||||||
def discover(frameworks_dir)
|
def discover(frameworks_dir)
|
||||||
(self.framework_path ||= []) << frameworks_dir
|
(self.framework_path ||= []) << frameworks_dir
|
||||||
Compass::Frameworks.discover frameworks_dir
|
Compass::Frameworks.discover frameworks_dir
|
||||||
|
@ -195,4 +195,44 @@ EXPECTED
|
|||||||
assert_equal "fonts", Compass.configuration.fonts_dir
|
assert_equal "fonts", Compass.configuration.fonts_dir
|
||||||
assert_equal "extensions", Compass.configuration.extensions_dir
|
assert_equal "extensions", Compass.configuration.extensions_dir
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_custom_configuration_properties
|
||||||
|
# Add a configuration property to compass.
|
||||||
|
Compass::Configuration.add_configuration_property(:foobar, "this is a foobar") do
|
||||||
|
if environment == :production
|
||||||
|
"foo"
|
||||||
|
else
|
||||||
|
"bar"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
contents = StringIO.new(<<-CONFIG)
|
||||||
|
foobar = "baz"
|
||||||
|
CONFIG
|
||||||
|
|
||||||
|
Compass.add_configuration(contents, "test_strip_trailing_directory_separators")
|
||||||
|
|
||||||
|
assert_equal "baz", Compass.configuration.foobar
|
||||||
|
expected_serialization = <<EXPECTED
|
||||||
|
# Require any additional compass plugins here.
|
||||||
|
# Set this to the root of your project when deployed:
|
||||||
|
http_path = "/"
|
||||||
|
# You can select your preferred output style here (can be overridden via the command line):
|
||||||
|
# output_style = :expanded or :nested or :compact or :compressed
|
||||||
|
# To enable relative paths to assets via compass helper functions. Uncomment:
|
||||||
|
# relative_assets = true
|
||||||
|
# To disable debugging comments that display the original location of your selectors. Uncomment:
|
||||||
|
# line_comments = false
|
||||||
|
# this is a foobar
|
||||||
|
foobar = "baz"
|
||||||
|
EXPECTED
|
||||||
|
assert_equal expected_serialization, Compass.configuration.serialize
|
||||||
|
Compass.reset_configuration!
|
||||||
|
Compass.configuration.environment = :production
|
||||||
|
assert_equal "foo", Compass.configuration.foobar
|
||||||
|
Compass.configuration.environment = :development
|
||||||
|
assert_equal "bar", Compass.configuration.foobar
|
||||||
|
ensure
|
||||||
|
Compass::Configuration.remove_configuration_property :foobar
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user