Parent

Methods

YUI::Compressor

Constants

VERSION

Attributes

options[R]

Public Instance Methods

compress(stream_or_string) click to toggle source

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.

Example: Compress CSS

compressor = YUI::CssCompressor.new
compressor.compress(<<-END_CSS)
  div.error {
    color: red;
  }
  div.warning {
    display: none;
  }
END_CSS
# => "div.error{color:red;}div.warning{display:none;}"

Example: Compress JavaScript

compressor = YUI::JavaScriptCompressor.new
compressor.compress('(function () { var foo = {}; foo["bar"] = "baz"; })()')
# => "(function(){var foo={};foo.bar=\"baz\"})();"

Example: Compress and gzip a file on disk

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

[Validate]

Generated with the Darkfish Rdoc Generator 2.