lib/compressible.rb in compressible-0.0.2.1 vs lib/compressible.rb in compressible-0.0.2.2

- old
+ new

@@ -4,222 +4,24 @@ gem "activesupport", "= 2.3.5" require 'active_support' rescue Gem::LoadError => e puts e.inspect end -require 'yui/compressor' this = File.dirname(__FILE__) require File.join(this, "ext.rb") -class Compressible +module Compressible KEYS = { :css => :stylesheet, :stylesheet => :css, :js => :javascript, :javascript => :js } - class << self - - attr_reader :config - - def configure(value = nil) - raise "invalid config" unless (value.is_a?(String) || value.is_a?(Hash)) - @config = value.is_a?(String) ? YAML.load_file(value) : value - @config.recursively_symbolize_keys! - - @config = defaults.merge(@config) - - # normalize everything to an array - [:js, :css].each do |type| - @config[type] = [@config[type]] unless @config[type].is_a?(Array) - end - - @config - end - - def defaults - { - :js => [], - :css => [], - :stylesheet_path => defined?(Rails) ? "#{Rails.root}/public/stylesheets" : nil, - :javascript_path => defined?(Rails) ? "#{Rails.root}/public/javascripts" : nil - } - end - - def config - @config ||= defaults - end - - def add_to_config(type, key, value) - item = find_or_create(type, key) - item[:paths] = value.collect {|i| asset_name(i)} - item - end - - def find_or_create(type, key) - result = config[type].detect {|i| i[:to].to_s == key.to_s} - unless result - result = {:to => key.to_s} - config[type] << result - end - result - end - - def reset - @config = defaults - end - - def uncached_stylesheet_paths(*keys) - uncached_paths_for(:css, *keys) - end - - def uncached_javascript_paths(*keys) - uncached_paths_for(:js, *keys) - end - - def uncached_paths_for(type, *keys) - returning [] do |result| - config[type].each do |item| - keys.each do |key| - result.concat(item[:paths]) if item[:to] == key.to_s - end - end - end - end - - # called if you gave it a config - def compress(value = nil) - configure(value) if value - raise "set config to yaml file or run 'Compressible.js' or 'Compressible.css' manually" unless @config - - [:js, :css].each do |k| - config[k].each do |item| - compress_from_hash(k, item) - end - end - end - - def compress_from_hash(k, v) - args = v.dup.delete(:paths) + [v] - self.send(k, *args) - end - - def javascripts(hash) - hash.each do |to, paths| - paths << {:to => to} - javascript(*paths) - end - end - alias_method :add_javascripts, :javascripts - - def stylesheets(hash) - hash.each do |to, paths| - paths << {:to => to} - stylesheet(*paths) - end - end - alias_method :add_stylesheets, :stylesheets - - def javascript(*paths) - options = paths.extract_options! - to = asset_name(options[:to]) - raise "Please define a name for the cached javascript using ':to => :my_name'" unless to - munge = options.has_key?(:munge) ? options[:munge] : true - - add_to_config(:js, to, paths) - - compressor = YUI::JavaScriptCompressor.new(:munge => munge) - - result = paths.collect do |path| - puts "Compressing #{path}..." - compressor.compress(read(:javascript, path)) - end.join("\n\n") - - write(:javascript, to, result) if to - - result - end - alias_method :add_javascript, :javascript - alias_method :js, :javascript - - def stylesheet(*paths) - options = paths.extract_options! - to = asset_name(options[:to]) - - add_to_config(:css, to, paths) - - compressor = YUI::CssCompressor.new - - result = paths.collect do |path| - puts "Compressing #{path}..." - compressor.compress(read(:stylesheet, path)) - end.join("\n\n") - - write(:stylesheet, to, result) if to - - result - end - alias_method :add_stylesheet, :stylesheet - alias_method :css, :stylesheet - - def stylesheets_for(*keys) - assets_for(:stylesheet, *keys) - end - - def javascripts_for(*keys) - assets_for(:javascript, *keys) - end - - def assets_for(type, *keys) - options = keys.extract_options! - environment = defined?(Rails) ? Rails.env.to_s : (options[:current] || "production") - environment = environment.to_s - cache_environments = options[:environments] || "production" - cache_environments = [cache_environments] unless cache_environments.is_a?(Array) - cache_environments = cache_environments.collect(&:to_s) - - assets = cache_environments.include?(environment) ? keys : send("uncached_#{type.to_s}_paths", *keys) - assets - end - - def read(type, from) - IO.read(path_for(type, from)) - end - - def write(type, to, result) - File.open(path_for(type, to), "w") {|f| f.puts result} - end - - def asset_name(path) - result = path.to_s.split(".") - if result.last =~ /(js|css)/ - result = result[0..-2].join(".") - else - result = result.join(".") - end - result - end - - # ultimately should return global path - def path_for(type, file) - key = "#{type.to_s}_path".to_sym - - if config && config[key] - path = File.join(config[key], file.to_s) - elsif defined?(Rails) - path = File.join(Rails.root.to_s, "public/#{type.to_s.pluralize}", file.to_s) - else - path = file.to_s - end - - path << ".#{KEYS[type].to_s}" unless path.split(".").last == KEYS[type].to_s - - path - end - - end - end Dir["#{this}/compressible/*"].each { |c| require c } + +Compressible.send(:include, Compressible::Configurable) +Compressible.send(:include, Compressible::Condensible) +Compressible.send(:include, Compressible::Accessible) \ No newline at end of file