yuicompressor 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/yuicompressor.rb +4 -11
- data/lib/yuicompressor/jruby.rb +61 -63
- data/lib/yuicompressor/shell.rb +55 -56
- data/yuicompressor.gemspec +2 -2
- metadata +55 -48
data/lib/yuicompressor.rb
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
require 'stringio'
|
2
2
|
|
3
3
|
module YUICompressor
|
4
|
-
|
5
4
|
# The path to the YUI Compressor jar file.
|
6
5
|
JAR_FILE = File.expand_path('../yuicompressor-2.4.2.jar', __FILE__)
|
7
6
|
|
8
|
-
autoload :JRuby, 'yuicompressor/jruby'
|
9
|
-
autoload :Shell, 'yuicompressor/shell'
|
10
|
-
|
11
7
|
module_function
|
12
8
|
|
13
9
|
# Returns +true+ if the Ruby platform is JRuby.
|
@@ -68,12 +64,9 @@ module YUICompressor
|
|
68
64
|
# If we're on JRuby we can use the YUI Compressor Java classes directly. This
|
69
65
|
# gives a huge speed boost. Otherwise we need to make a system call to the
|
70
66
|
# Java interpreter and stream IO to/from the shell.
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
mod.instance_methods.each do |name|
|
76
|
-
module_function name
|
67
|
+
if jruby?
|
68
|
+
require 'yuicompressor/jruby'
|
69
|
+
else
|
70
|
+
require 'yuicompressor/shell'
|
77
71
|
end
|
78
|
-
|
79
72
|
end
|
data/lib/yuicompressor/jruby.rb
CHANGED
@@ -2,85 +2,83 @@ require 'java'
|
|
2
2
|
require 'stringio'
|
3
3
|
|
4
4
|
module YUICompressor
|
5
|
-
# This
|
6
|
-
# automatically used when JRuby is detected.
|
7
|
-
# increase in performance over the Shell module.
|
8
|
-
module JRuby
|
5
|
+
# This file contains methods specific to the JRuby platform and is
|
6
|
+
# automatically used when JRuby is detected.
|
9
7
|
|
10
|
-
|
8
|
+
require JAR_FILE
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
import java.io.InputStreamReader
|
11
|
+
import java.io.OutputStreamWriter
|
12
|
+
import com.yahoo.platform.yui.compressor.JavaScriptCompressor
|
13
|
+
import com.yahoo.platform.yui.compressor.CssCompressor
|
16
14
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
15
|
+
class ErrorReporter #:nodoc:
|
16
|
+
def error(message, source_name, line, line_source, line_offset)
|
17
|
+
if line < 0
|
18
|
+
"\n[ERROR] %s" % message
|
19
|
+
else
|
20
|
+
"\n[ERROR] %s:%s:%s" % [line, line_offset, message]
|
24
21
|
end
|
22
|
+
end
|
25
23
|
|
26
|
-
|
27
|
-
|
28
|
-
end
|
24
|
+
def runtimeError(*args)
|
25
|
+
raise RuntimeError, 'Compression failed. %s' % error(*args)
|
29
26
|
end
|
27
|
+
end
|
30
28
|
|
31
|
-
|
32
|
-
# using the given +options+.
|
33
|
-
def command_arguments(options={})
|
34
|
-
args = [ options[:line_break] ? options[:line_break].to_i : -1 ]
|
29
|
+
module_function
|
35
30
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
args << ! options[:optimize] # disable optimizations?
|
41
|
-
end
|
31
|
+
# Returns the set of arguments that are needed to instantiate a compressor
|
32
|
+
# using the given +options+.
|
33
|
+
def command_arguments(options={})
|
34
|
+
args = [ options[:line_break] ? options[:line_break].to_i : -1 ]
|
42
35
|
|
43
|
-
|
36
|
+
if options[:type].to_s == 'js'
|
37
|
+
args << !! options[:munge]
|
38
|
+
args << false # verbose?
|
39
|
+
args << !! options[:preserve_semicolons]
|
40
|
+
args << ! options[:optimize] # disable optimizations?
|
44
41
|
end
|
45
42
|
|
46
|
-
|
47
|
-
|
48
|
-
# specified, and should be one of <tt>"css"</tt> or <tt>"js"</tt>. See
|
49
|
-
# YUICompressor#compress_css and YUICompressor#compress_js for details about
|
50
|
-
# which options are acceptable for each type of compressor.
|
51
|
-
#
|
52
|
-
# If a block is given, it will receive the IO output object. Otherwise the
|
53
|
-
# output will be returned as a string.
|
54
|
-
def compress(stream_or_string, options={})
|
55
|
-
raise ArgumentError, 'Option :type required' unless options.key?(:type)
|
43
|
+
args
|
44
|
+
end
|
56
45
|
|
57
|
-
|
58
|
-
|
46
|
+
# Compresses the given +stream_or_string+ of code using the given +options+.
|
47
|
+
# When using this method directly, at least the +:type+ option must be
|
48
|
+
# specified, and should be one of <tt>"css"</tt> or <tt>"js"</tt>. See
|
49
|
+
# YUICompressor#compress_css and YUICompressor#compress_js for details about
|
50
|
+
# which options are acceptable for each type of compressor.
|
51
|
+
#
|
52
|
+
# If a block is given, it will receive the IO output object. Otherwise the
|
53
|
+
# output will be returned as a string.
|
54
|
+
def compress(stream_or_string, options={})
|
55
|
+
raise ArgumentError, 'Option :type required' unless options.key?(:type)
|
59
56
|
|
60
|
-
|
61
|
-
|
57
|
+
stream = streamify(stream_or_string)
|
58
|
+
output = StringIO.new
|
62
59
|
|
63
|
-
|
64
|
-
|
65
|
-
options = default_js_options.merge(options)
|
66
|
-
JavaScriptCompressor.new(reader, ErrorReporter.new)
|
67
|
-
when 'css'
|
68
|
-
options = default_css_options.merge(options)
|
69
|
-
CssCompressor.new(reader)
|
70
|
-
else
|
71
|
-
raise ArgumentError, 'Unknown resource type: %s' % options[:type]
|
72
|
-
end
|
73
|
-
|
74
|
-
compressor.compress(writer, *command_arguments(options))
|
75
|
-
writer.flush
|
76
|
-
output.rewind
|
60
|
+
reader = InputStreamReader.new(stream.to_inputstream)
|
61
|
+
writer = OutputStreamWriter.new(output.to_outputstream)
|
77
62
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
63
|
+
compressor = case options[:type].to_s
|
64
|
+
when 'js'
|
65
|
+
options = default_js_options.merge(options)
|
66
|
+
JavaScriptCompressor.new(reader, ErrorReporter.new)
|
67
|
+
when 'css'
|
68
|
+
options = default_css_options.merge(options)
|
69
|
+
CssCompressor.new(reader)
|
70
|
+
else
|
71
|
+
raise ArgumentError, 'Unknown resource type: %s' % options[:type]
|
83
72
|
end
|
84
73
|
|
74
|
+
compressor.compress(writer, *command_arguments(options))
|
75
|
+
writer.flush
|
76
|
+
output.rewind
|
77
|
+
|
78
|
+
if block_given?
|
79
|
+
yield output
|
80
|
+
else
|
81
|
+
output.read
|
82
|
+
end
|
85
83
|
end
|
86
84
|
end
|
data/lib/yuicompressor/shell.rb
CHANGED
@@ -5,78 +5,77 @@ rescue LoadError
|
|
5
5
|
end
|
6
6
|
|
7
7
|
module YUICompressor
|
8
|
-
# This
|
8
|
+
# This file contains methods that allow the YUI Compressor to be used by
|
9
9
|
# piping IO to a separate Java process via the system shell. It is used on all
|
10
10
|
# Ruby platforms except for JRuby.
|
11
|
-
module Shell
|
12
11
|
|
13
|
-
|
14
|
-
# command line for the given set of +options+.
|
15
|
-
def command_arguments(options={})
|
16
|
-
args = []
|
17
|
-
args.concat(['--type', options[:type].to_s]) if options[:type]
|
18
|
-
args.concat(['--line-break', options[:line_break].to_s]) if options[:line_break]
|
12
|
+
module_function
|
19
13
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
14
|
+
# Returns an array of flags that should be passed to the jar file on the
|
15
|
+
# command line for the given set of +options+.
|
16
|
+
def command_arguments(options={})
|
17
|
+
args = []
|
18
|
+
args.concat(['--type', options[:type].to_s]) if options[:type]
|
19
|
+
args.concat(['--line-break', options[:line_break].to_s]) if options[:line_break]
|
25
20
|
|
26
|
-
|
21
|
+
if options[:type].to_s == 'js'
|
22
|
+
args << '--nomunge' unless options[:munge]
|
23
|
+
args << '--preserve-semi' if options[:preserve_semicolons]
|
24
|
+
args << '--disable-optimizations' unless options[:optimize]
|
27
25
|
end
|
28
26
|
|
29
|
-
|
30
|
-
|
31
|
-
# specified, and should be one of <tt>"css"</tt> or <tt>"js"</tt>. See
|
32
|
-
# YUICompressor#compress_css and YUICompressor#compress_js for details about
|
33
|
-
# which options are acceptable for each type of compressor.
|
34
|
-
#
|
35
|
-
# In addition to the standard options, this method also accepts a
|
36
|
-
# <tt>:java</tt> option that can be used to specify the location of the Java
|
37
|
-
# binary. This option will default to using <tt>"java"</tt> unless otherwise
|
38
|
-
# specified.
|
39
|
-
#
|
40
|
-
# If a block is given, it will receive the IO output object. Otherwise the
|
41
|
-
# output will be returned as a string.
|
42
|
-
def compress(stream_or_string, options={})
|
43
|
-
raise ArgumentError, 'Option :type required' unless options.key?(:type)
|
27
|
+
args
|
28
|
+
end
|
44
29
|
|
45
|
-
|
30
|
+
# Compresses the given +stream_or_string+ of code using the given +options+.
|
31
|
+
# When using this method directly, at least the +:type+ option must be
|
32
|
+
# specified, and should be one of <tt>"css"</tt> or <tt>"js"</tt>. See
|
33
|
+
# YUICompressor#compress_css and YUICompressor#compress_js for details about
|
34
|
+
# which options are acceptable for each type of compressor.
|
35
|
+
#
|
36
|
+
# In addition to the standard options, this method also accepts a
|
37
|
+
# <tt>:java</tt> option that can be used to specify the location of the Java
|
38
|
+
# binary. This option will default to using <tt>"java"</tt> unless otherwise
|
39
|
+
# specified.
|
40
|
+
#
|
41
|
+
# If a block is given, it will receive the IO output object. Otherwise the
|
42
|
+
# output will be returned as a string.
|
43
|
+
def compress(stream_or_string, options={})
|
44
|
+
raise ArgumentError, 'Option :type required' unless options.key?(:type)
|
46
45
|
|
47
|
-
|
48
|
-
when 'js'
|
49
|
-
options = default_js_options.merge(options)
|
50
|
-
when 'css'
|
51
|
-
options = default_css_options.merge(options)
|
52
|
-
else
|
53
|
-
raise ArgumentError, 'Unknown resource type: %s' % options[:type]
|
54
|
-
end
|
46
|
+
stream = streamify(stream_or_string)
|
55
47
|
|
56
|
-
|
57
|
-
|
48
|
+
case options[:type].to_s
|
49
|
+
when 'js'
|
50
|
+
options = default_js_options.merge(options)
|
51
|
+
when 'css'
|
52
|
+
options = default_css_options.merge(options)
|
53
|
+
else
|
54
|
+
raise ArgumentError, 'Unknown resource type: %s' % options[:type]
|
55
|
+
end
|
58
56
|
|
59
|
-
|
60
|
-
|
61
|
-
while buffer = stream.read(4096)
|
62
|
-
input.write(buffer)
|
63
|
-
end
|
57
|
+
command = [ options.delete(:java) || 'java', '-jar', JAR_FILE ]
|
58
|
+
command.concat(command_arguments(options))
|
64
59
|
|
65
|
-
|
60
|
+
Open3.popen3(command.join(' ')) do |input, output, stderr|
|
61
|
+
begin
|
62
|
+
while buffer = stream.read(4096)
|
63
|
+
input.write(buffer)
|
64
|
+
end
|
65
|
+
|
66
|
+
input.close
|
66
67
|
|
67
|
-
|
68
|
-
|
68
|
+
err = stderr.read
|
69
|
+
raise err unless err.empty?
|
69
70
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
75
|
-
rescue Exception => e
|
76
|
-
raise RuntimeError, 'Compression failed. %s' % e
|
71
|
+
if block_given?
|
72
|
+
yield output
|
73
|
+
else
|
74
|
+
output.read
|
77
75
|
end
|
76
|
+
rescue Exception => e
|
77
|
+
raise RuntimeError, 'Compression failed. %s' % e
|
78
78
|
end
|
79
79
|
end
|
80
|
-
|
81
80
|
end
|
82
81
|
end
|
data/yuicompressor.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'yuicompressor'
|
3
|
-
s.version = '1.0
|
4
|
-
s.date = '2010-08-
|
3
|
+
s.version = '1.1.0'
|
4
|
+
s.date = '2010-08-04'
|
5
5
|
|
6
6
|
s.summary = 'A YUI JavaScript and CSS compressor for Ruby and JRuby'
|
7
7
|
s.description = 'A YUI JavaScript and CSS compressor for Ruby and JRuby'
|
metadata
CHANGED
@@ -1,34 +1,37 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yuicompressor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
version: 1.0
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 1.1.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
|
-
|
13
|
+
- Michael Jackson
|
13
14
|
autorequire:
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-04 00:00:00 -06:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rake
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
32
35
|
description: A YUI JavaScript and CSS compressor for Ruby and JRuby
|
33
36
|
email: mjijackson@gmail.com
|
34
37
|
executables: []
|
@@ -36,52 +39,56 @@ executables: []
|
|
36
39
|
extensions: []
|
37
40
|
|
38
41
|
extra_rdoc_files:
|
39
|
-
|
42
|
+
- README
|
40
43
|
files:
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
44
|
+
- lib/yuicompressor/jruby.rb
|
45
|
+
- lib/yuicompressor/shell.rb
|
46
|
+
- lib/yuicompressor.rb
|
47
|
+
- test/css_test.rb
|
48
|
+
- test/helper.rb
|
49
|
+
- test/js_test.rb
|
50
|
+
- yuicompressor.gemspec
|
51
|
+
- Rakefile
|
52
|
+
- README
|
50
53
|
has_rdoc: true
|
51
54
|
homepage: http://github.com/mjijackson/yuicompressor
|
52
55
|
licenses: []
|
53
56
|
|
54
57
|
post_install_message:
|
55
58
|
rdoc_options:
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
- --line-numbers
|
60
|
+
- --inline-source
|
61
|
+
- --title
|
62
|
+
- YUICompressor
|
63
|
+
- --main
|
64
|
+
- YUICompressor
|
62
65
|
require_paths:
|
63
|
-
|
66
|
+
- lib
|
64
67
|
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
65
69
|
requirements:
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
71
76
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
72
78
|
requirements:
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
hash: 3
|
82
|
+
segments:
|
83
|
+
- 0
|
84
|
+
version: "0"
|
78
85
|
requirements: []
|
79
86
|
|
80
87
|
rubyforge_project:
|
81
|
-
rubygems_version: 1.3.
|
88
|
+
rubygems_version: 1.3.7
|
82
89
|
signing_key:
|
83
90
|
specification_version: 3
|
84
91
|
summary: A YUI JavaScript and CSS compressor for Ruby and JRuby
|
85
92
|
test_files:
|
86
|
-
|
87
|
-
|
93
|
+
- test/css_test.rb
|
94
|
+
- test/js_test.rb
|