Compress a stream or string of code with YUI Compressor. (A stream is any object that
responds to read
and close
like an IO.) If a
block is given, you can read the compressed code from the block's argument.
Otherwise, compress
returns a string of compressed code.
compressor = YUI::CssCompressor.new compressor.compress(" div.error { color: red; } div.warning { display: none; } ") # => "div.error{color:red;}div.warning{display:none;}"
compressor = YUI::JavaScriptCompressor.new compressor.compress('(function () { var foo = {}; foo["bar"] = "baz"; })()') # => "(function(){var foo={};foo.bar=\"baz\"})();"
File.open("my.js", "r") do |source| Zlib::GzipWriter.open("my.js.gz", "w") do |gzip| compressor.compress(source) do |compressed| while buffer = compressed.read(4096) gzip.write(buffer) end end end end
# File lib/yui/compressor.rb, line 65 def compress(stream_or_string) streamify(stream_or_string) do |stream| output = true status = POpen4.popen4(command, "b") do |stdout, stderr, stdin, pid| begin stdin.binmode transfer(stream, stdin) if block_given? yield stdout else output = stdout.read end rescue Exception => e raise RuntimeError, "compression failed" end end if status.exitstatus.zero? output else raise RuntimeError, "compression failed" end end end