ActionController::Base
The JammitController is added to your Rails application when the Gem is loaded. It takes responsibility for /assets, and dynamically packages any missing or uncached asset packages.
The "package" action receives all requests for asset packages that haven't yet been cached. The package will be built, cached, and gzipped.
# File lib/jammit/controller.rb, line 18 def package parse_request template_ext = Jammit.template_extension.to_sym case @extension when :js render :js => (@contents = Jammit.packager.pack_javascripts(@package)) when template_ext render :js => (@contents = Jammit.packager.pack_templates(@package)) when :css render :text => generate_stylesheets, :content_type => 'text/css' end cache_package if perform_caching && (@extension != template_ext) rescue Jammit::PackageNotFound package_not_found end
Tells the Jammit::Packager to cache and gzip an asset package. We can't just use the built-in "cache_page" because we need to ensure that the timestamp that ends up in the MHTML is also on the cached file.
# File lib/jammit/controller.rb, line 40 def cache_package dir = File.join(page_cache_directory, Jammit.package_path) Jammit.packager.cache(@package, @extension, @contents, dir, @variant, @mtime) end
If we're generating MHTML/CSS, return a stylesheet with the absolute request URL to the client, and cache a version with the timestamped cache URL swapped in.
# File lib/jammit/controller.rb, line 56 def generate_stylesheets return @contents = Jammit.packager.pack_stylesheets(@package, @variant) unless @variant == :mhtml @mtime = Time.now request_url = prefix_url(request.fullpath) cached_url = prefix_url(Jammit.asset_url(@package, @extension, @variant, @mtime)) css = Jammit.packager.pack_stylesheets(@package, @variant, request_url) @contents = css.gsub(request_url, cached_url) if perform_caching css end
Render the 404 page, if one exists, for any packages that don't.
# File lib/jammit/controller.rb, line 81 def package_not_found return render(:file => NOT_FOUND_PATH, :status => 404) if File.exists?(NOT_FOUND_PATH) render :text => "<h1>404: \"#{@package}\" asset package not found.</h1>", :status => 404 end
Extracts the package name, extension (:css, :js), and variant (:datauri, :mhtml) from the incoming URL.
# File lib/jammit/controller.rb, line 68 def parse_request pack = params[:package] @extension = params[:extension].to_sym raise PackageNotFound unless (VALID_FORMATS + [Jammit.template_extension.to_sym]).include?(@extension) if Jammit.embed_assets suffix_match = pack.match(SUFFIX_STRIPPER) @variant = Jammit.embed_assets && suffix_match && suffix_match[1].to_sym pack.sub!(SUFFIX_STRIPPER, '') end @package = pack.to_sym end
Generate the complete, timestamped, MHTML url -- if we're rendering a dynamic MHTML package, we'll need to put one URL in the response, and a different one into the cached package.
# File lib/jammit/controller.rb, line 48 def prefix_url(path) host = request.port == 80 ? request.host : request.host_with_port "#{request.protocol}#{host}#{path}" end
Generated with the Darkfish Rdoc Generator 2.