diff --git a/lib/jammit.rb b/lib/jammit.rb index 5cd9615f..855d3ca1 100644 --- a/lib/jammit.rb +++ b/lib/jammit.rb @@ -99,8 +99,7 @@ def self.load_configuration(config_path, soft=false) set_template_namespace(conf[:template_namespace]) set_template_extension(conf[:template_extension]) set_public_root(conf[:public_root]) if conf[:public_root] - symbolize_keys(conf[:stylesheets]) if conf[:stylesheets] - symbolize_keys(conf[:javascripts]) if conf[:javascripts] + conf.keys.each {|key| symbolize_keys(conf[key]) rescue nil} check_for_deprecations self end @@ -146,6 +145,13 @@ def self.package!(options={}) packager.precache_all(options[:output_folder], options[:base_url]) end + def self.custom_assets + @configuration.select { |key, val| + lambda{ |val| val.respond_to?(:keys) rescue false}.call(val) && + ![:javascripts, :stylesheets].include?(key) + } + end + private # Allows command-line definition of `PUBLIC_ROOT`, for those using Jammit diff --git a/lib/jammit/dependencies.rb b/lib/jammit/dependencies.rb index 9714bd8a..8fb1be14 100644 --- a/lib/jammit/dependencies.rb +++ b/lib/jammit/dependencies.rb @@ -57,3 +57,6 @@ require 'jammit/routes' end +# Load user extentions +require 'jammit/extensions' + diff --git a/lib/jammit/extensions.rb b/lib/jammit/extensions.rb new file mode 100644 index 00000000..a60bba51 --- /dev/null +++ b/lib/jammit/extensions.rb @@ -0,0 +1,3 @@ +module Jammit + require File.join(ASSET_ROOT, 'lib', 'extensions', 'jammit.rb') if File.exists?(File.join(ASSET_ROOT, 'lib', 'extensions', 'jammit.rb')) +end diff --git a/lib/jammit/packager.rb b/lib/jammit/packager.rb index 26cc7313..d499549a 100644 --- a/lib/jammit/packager.rb +++ b/lib/jammit/packager.rb @@ -19,11 +19,11 @@ def initialize @config = { :css => (Jammit.configuration[:stylesheets] || {}), :js => (Jammit.configuration[:javascripts] || {}) - } + }.merge!(Jammit.custom_assets) @packages = { :css => create_packages(@config[:css]), :js => create_packages(@config[:js]) - } + }.merge!(create_custom_packages(Jammit.custom_assets)) end # Ask the packager to precache all defined assets, along with their gzip'd @@ -46,6 +46,9 @@ def precache_all(output_dir=nil, base_url=nil) end end end + @packages.keys.keep_if{|extension| ![:js, :css].include?(extension)}.each do |extension| + cacheable(extension, output_dir).each {|p| cache(p, extension.to_s, self.send(:"pack_#{extension}s", p), output_dir)} + end end # Caches a single prebuilt asset package and gzips it at the highest @@ -169,6 +172,12 @@ def create_packages(config) packages end + def create_custom_packages(custom_assets) + results = {} + custom_assets.each { |key, val| results[:"#{key.to_s.singularize}"] = create_packages(val)} + results + end + # Raise a PackageNotFound exception for missing packages... def not_found(package, extension) raise PackageNotFound, "assets.yml does not contain a \"#{package}\" #{extension.to_s.upcase} package"