X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/29c1bab0e6dcc0f4b302fb06c62a8bf0a35f875c..5cbd4038edb32b0304bd766e70fc680ea447b52b:/lib/output_compression/output_compression.rb diff --git a/lib/output_compression/output_compression.rb b/lib/output_compression/output_compression.rb index c7652ae1d..df8e55cb6 100644 --- a/lib/output_compression/output_compression.rb +++ b/lib/output_compression/output_compression.rb @@ -1,66 +1,68 @@ # 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 +# 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 +begin + require 'zlib' + require 'stringio' + GZIP_SUPPORTED = true +rescue + GZIP_SUPPORTED = false +end -module CompressionSystem - def compress_output +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 + 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 + 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 + response.body.gsub! /\s+\s+/, '>' + end +end -class ActionController::Base - include CompressionSystem -end \ No newline at end of file +module ActionController + class Base + include CompressionSystem + end +end