mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
added compress options for gzip
added test for compress options of gzip update changelog
This commit is contained in:
parent
a0380e808d
commit
d59a877da4
3 changed files with 25 additions and 2 deletions
|
@ -1,5 +1,10 @@
|
|||
## Rails 4.0.0 (unreleased) ##
|
||||
|
||||
* ActiveSupport::Gzip.compress allows two optional arguments for compression
|
||||
level and strategy.
|
||||
|
||||
*Beyond*
|
||||
|
||||
* Modify `TimeWithZone#as_json` to include 3 decimal places of sub-second accuracy
|
||||
by default, which is optional as per the ISO8601 spec, but extremely useful. Also
|
||||
the default behaviour of Date#toJSON() in recent versions of Chrome, Safari and
|
||||
|
|
|
@ -25,9 +25,9 @@ module ActiveSupport
|
|||
end
|
||||
|
||||
# Compresses a string using gzip.
|
||||
def self.compress(source)
|
||||
def self.compress(source, level=Zlib::DEFAULT_COMPRESSION, strategy=Zlib::DEFAULT_STRATEGY)
|
||||
output = Stream.new
|
||||
gz = Zlib::GzipWriter.new(output)
|
||||
gz = Zlib::GzipWriter.new(output, level, strategy)
|
||||
gz.write(source)
|
||||
gz.close
|
||||
output.string
|
||||
|
|
|
@ -4,6 +4,12 @@ require 'active_support/core_ext/object/blank'
|
|||
class GzipTest < ActiveSupport::TestCase
|
||||
def test_compress_should_decompress_to_the_same_value
|
||||
assert_equal "Hello World", ActiveSupport::Gzip.decompress(ActiveSupport::Gzip.compress("Hello World"))
|
||||
assert_equal "Hello World", ActiveSupport::Gzip.decompress(ActiveSupport::Gzip.compress("Hello World", Zlib::NO_COMPRESSION))
|
||||
assert_equal "Hello World", ActiveSupport::Gzip.decompress(ActiveSupport::Gzip.compress("Hello World", Zlib::BEST_SPEED))
|
||||
assert_equal "Hello World", ActiveSupport::Gzip.decompress(ActiveSupport::Gzip.compress("Hello World", Zlib::BEST_COMPRESSION))
|
||||
assert_equal "Hello World", ActiveSupport::Gzip.decompress(ActiveSupport::Gzip.compress("Hello World", nil, Zlib::FILTERED))
|
||||
assert_equal "Hello World", ActiveSupport::Gzip.decompress(ActiveSupport::Gzip.compress("Hello World", nil, Zlib::HUFFMAN_ONLY))
|
||||
assert_equal "Hello World", ActiveSupport::Gzip.decompress(ActiveSupport::Gzip.compress("Hello World", nil, nil))
|
||||
end
|
||||
|
||||
def test_compress_should_return_a_binary_string
|
||||
|
@ -12,4 +18,16 @@ class GzipTest < ActiveSupport::TestCase
|
|||
assert_equal Encoding.find('binary'), compressed.encoding
|
||||
assert !compressed.blank?, "a compressed blank string should not be blank"
|
||||
end
|
||||
|
||||
def test_compress_should_return_gzipped_string_by_compression_level
|
||||
source_string = "Hello World"*100
|
||||
|
||||
gzipped_by_speed = ActiveSupport::Gzip.compress(source_string, Zlib::BEST_SPEED)
|
||||
assert_equal 1, Zlib::GzipReader.new(StringIO.new(gzipped_by_speed)).level
|
||||
|
||||
gzipped_by_best_compression = ActiveSupport::Gzip.compress(source_string, Zlib::BEST_COMPRESSION)
|
||||
assert_equal 9, Zlib::GzipReader.new(StringIO.new(gzipped_by_best_compression)).level
|
||||
|
||||
assert_equal true, (gzipped_by_best_compression.bytesize < gzipped_by_speed.bytesize)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue