def cacheable(extension, output_dir)
      names = @packages[extension].keys
      names = names.select {|n| @package_names.include? n } if @package_names
      config_mtime = latest_mtime
      return names if @force
      return names.select do |name|
        pack        = package_for(name, extension)
        cached      = [Jammit.filename(name, extension)]
        if extension == :css
          cached.push Jammit.filename(name, extension, :datauri) if Jammit.embed_assets
          cached.push Jammit.filename(name, extension, :mhtml) if Jammit.mhtml_enabled
        end
        cached.map! {|file| File.join(output_dir, file) }
        if cached.any? {|file| !File.exists?(file) }
          true
        else
          since = cached.map {|file| File.mtime(file) }.min
          config_mtime > since || pack[:paths].any? {|src| File.mtime(src) > since }
        end
      end
    end
def cacheable(extension, output_dir)
      names = @packages[extension].keys
      names = names.select {|n| @package_names.include? n } if @package_names
      config_mtime = latest_mtime
      return names if @force
      return names.select do |name|
        pack        = package_for(name, extension)
        cached      = [Jammit.filename(name, extension)]
        if extension == :css
          cached.push Jammit.filename(name, extension, :datauri) if Jammit.embed_assets
          cached.push Jammit.filename(name, extension, :mhtml) if Jammit.mhtml_enabled
        end
        cached.map! {|file| File.join(output_dir, file) }
        if cached.any? {|file| !File.exists?(file) }
          true
        else
          since = cached.map {|file| File.mtime(file) }.min
          config_mtime > since || pack[:paths].any? {|src| File.mtime(src) > since }
        end
      end
    end
Return a list of all of the packages that should be cached. If "force" is
 true, this is all of them -- otherwise only the packages that are missing
 or whose source files have changed since the last package build.