Sha256: 0dfaacf3bb3f879c26a60d6c5c0e41e9e40e65b88de787a0c901b06f89a86f2b
Contents?: true
Size: 1.69 KB
Versions: 1
Compression:
Stored size: 1.69 KB
Contents
# OutputCompression # Rails output compression filters # # Adds two classmethods to ActionController that can be used as after-filters: # strip_whitespace and compress_output. # If you use page-caching, you MUST specify the compress_output filter AFTER # caches_page, otherwise the compressed data will be cached instead of the HTML # # class MyController < ApplicationController # after_filter :strip_whitespace # caches_page :index # after_filter :compress_output # end begin require 'zlib' require 'stringio' GZIP_SUPPORTED = true rescue GZIP_SUPPORTED = false end module CompressionSystem def compress_output return unless accepts_gzip? output = StringIO.new def output.close # Zlib does a close. Bad Zlib... rewind end gz = Zlib::GzipWriter.new(output) gz.write(response.body) gz.close if output.length < response.body.length @old_response_body = response.body response.body = output.string response.headers['Content-encoding'] = @compression_encoding end end def accepts_gzip? return false unless GZIP_SUPPORTED accepts = request.env['HTTP_ACCEPT_ENCODING'] return false unless accepts && accepts =~ /(x-gzip|gzip)/ @compression_encoding = $1 true end def strip_whitespace response.body.gsub!(/()|(.*?<\/script>)|()|()|\s+/m) do |m| if m =~ /^()(.*?)<\/script>$/m $1 + $2.strip.gsub(/\s+/, ' ').gsub('',"\n-->") + '' elsif m =~ /^$/m '' elsif m =~ /^<(textarea|pre)/ m else ' ' end end response.body.gsub! /\s+\s+/, '>' end end class ActionController::Base include CompressionSystem end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
parlement-0.6 | vendor/plugins/output_compression/lib/output_compression.rb |