Module: YUICompressor

Defined in:
lib/yuicompressor.rb,
lib/yuicompressor/jruby.rb,
lib/yuicompressor/shell.rb
more...

Defined Under Namespace

Classes: ErrorReporter

Constant Summary collapse

JAR_FILE =

The path to the YUI Compressor jar file.

File.expand_path('../yuicompressor-2.4.8.jar', __FILE__)

Class Method Summary collapse

Class Method Details

.command_arguments(options = {}) ⇒ Object

Returns an array of flags that should be passed to the jar file on the command line for the given set of options.

[View source]

33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/yuicompressor/jruby.rb', line 33

def command_arguments(options={})
  args = [ options[:line_break] ? options[:line_break].to_i : -1 ]

  if options[:type].to_s == 'js'
    args << !! options[:munge]
    args << false # verbose?
    args << !! options[:preserve_semicolons]
    args << ! options[:optimize] # disable optimizations?
  end

  args
end

.compress(stream_or_string, options = {}) ⇒ Object

Returns a compressed version of the given stream_or_string of code using the given options. When using this method directly, at least the :type option must be specified, and should be one of "css" or "js". See YUICompressor#compress_css and YUICompressor#compress_js for details about which options are acceptable for each type of compressor.

In addition to the standard options, this method also accepts a :java option that can be used to specify the location of the Java executable. This option will default to using "java" unless otherwise specified.

Raises:

  • (ArgumentError)
[View source]

52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/yuicompressor/jruby.rb', line 52

def compress(stream_or_string, options={})
  raise ArgumentError, 'Option :type required' unless options.key?(:type)

  stream = streamify(stream_or_string)
  output = StringIO.new

  reader = InputStreamReader.new(stream.to_inputstream)
  writer = OutputStreamWriter.new(output.to_outputstream)

  compressor = case options[:type].to_s
  when 'js'
    options = default_js_options.merge(options)
    JavaScriptCompressor.new(reader, ErrorReporter.new)
  when 'css'
    options = default_css_options.merge(options)
    CssCompressor.new(reader)
  else
    raise ArgumentError, 'Unknown resource type: %s' % options[:type]
  end

  compressor.compress(writer, *command_arguments(options))
  writer.flush

  output.rewind
  output.read
end

.compress_css(stream_or_string, options = {}, &block) ⇒ Object

Compress the given CSS stream_or_string using the given options. Options should be a Hash with any of the following keys:

:line_break

The maximum number of characters that may appear in a single line of compressed code. Defaults to no maximum length. If set to 0 each line will be the minimum length possible.

:charset

Charset. Default is utf8.

[View source]

22
23
24
# File 'lib/yuicompressor.rb', line 22

def compress_css(stream_or_string, options={}, &block)
  compress(stream_or_string, options.merge(:type => 'css'), &block)
end

.compress_js(stream_or_string, options = {}, &block) ⇒ Object

Compress the given JavaScript stream_or_string using the given options. Options should be a Hash with any of the following keys:

:line_break

The maximum number of characters that may appear in a single line of compressed code. Defaults to no maximum length. If set to 0 each line will be the minimum length possible.

:munge

Should be true if the compressor should shorten local variable names when possible. Defaults to false.

:preserve_semicolons

Should be true if the compressor should preserve all semicolons in the code. Defaults to false.

:optimize

Should be true if the compressor should enable all micro optimizations. Defaults to true.

:charset

Charset. Default is utf8.

[View source]

40
41
42
# File 'lib/yuicompressor.rb', line 40

def compress_js(stream_or_string, options={}, &block)
  compress(stream_or_string, options.merge(:type => 'js'), &block)
end

.default_css_optionsObject

:nodoc:

[View source]

44
45
46
# File 'lib/yuicompressor.rb', line 44

def default_css_options #:nodoc:
  { :line_break => nil, :charset => 'utf8' }
end

.default_js_optionsObject

:nodoc:

[View source]

48
49
50
51
52
53
54
55
# File 'lib/yuicompressor.rb', line 48

def default_js_options #:nodoc:
  { :line_break => nil,
    :charset => 'utf8',
    :munge => false,
    :preserve_semicolons => false,
    :optimize => true
  }
end

.jruby?Boolean

Returns true if the Ruby platform is JRuby.

Returns:

  • (Boolean)
[View source]

10
11
12
# File 'lib/yuicompressor.rb', line 10

def jruby?
  !! (RUBY_PLATFORM =~ /java/)
end

.streamify(stream_or_string) ⇒ Object

:nodoc:

[View source]

57
58
59
60
61
62
63
64
65
# File 'lib/yuicompressor.rb', line 57

def streamify(stream_or_string) #:nodoc:
  if IO === stream_or_string || StringIO === stream_or_string
    stream_or_string
  elsif String === stream_or_string
    StringIO.new(stream_or_string.to_s)
  else
    raise ArgumentError, 'Stream or string required'
  end
end

.stringify(stream_or_string) ⇒ Object

:nodoc:

[View source]

67
68
69
70
71
72
73
# File 'lib/yuicompressor.rb', line 67

def stringify(stream_or_string) #:nodoc:
  case stream_or_string
    when IO then stream_or_string.read
    when String then stream_or_string
    else raise ArgumentError, 'Stream or string required'
  end
end