closure-compiler 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.textile CHANGED
@@ -2,7 +2,7 @@ h1. The Closure Compiler (as a Ruby Gem)
2
2
 
3
3
  The *closure-compiler* gem is a svelte wrapper around the "Google Closure Compiler":http://code.google.com/closure/compiler/ for JavaScript compression.
4
4
 
5
- Latest Version: *"0.3.0":http://gemcutter.org/gems/closure-compiler*
5
+ Latest Version: *"0.3.1":http://gemcutter.org/gems/closure-compiler*
6
6
 
7
7
  The Closure Compiler's *2010-05-15* JAR-file is included with the gem, so you'll need *Java 6* installed in order to run the compiler.
8
8
 
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'closure-compiler'
3
- s.version = '0.3.0' # Keep version in sync with closure-compiler.rb
4
- s.date = '2010-6-10'
3
+ s.version = '0.3.1' # Keep version in sync with closure-compiler.rb
4
+ s.date = '2010-6-11'
5
5
 
6
6
  s.homepage = "http://github.com/documentcloud/closure-compiler/"
7
7
  s.summary = "Ruby Wrapper for the Google Closure Compiler"
@@ -1,6 +1,6 @@
1
1
  module Closure
2
2
 
3
- VERSION = "0.3.0"
3
+ VERSION = "0.3.1"
4
4
 
5
5
  COMPILER_VERSION = "20100514"
6
6
 
@@ -19,7 +19,7 @@ module Closure
19
19
  # block, for streaming.
20
20
  def compile(io)
21
21
  result, error = nil, nil
22
- pid = Closure::Popen.popen(*command) do |stdin, stdout, stderr|
22
+ Closure::Popen.popen(command) do |stdin, stdout, stderr|
23
23
  if io.respond_to? :read
24
24
  while buffer = io.read(4096) do
25
25
  stdin.write(buffer)
@@ -28,12 +28,17 @@ module Closure
28
28
  stdin.write(io.to_s)
29
29
  end
30
30
  stdin.close
31
- out_thread = Thread.new { result = stdout.read }
32
- err_thread = Thread.new { error = stderr.read }
33
- out_thread.join and err_thread.join
31
+ if Closure::Popen::WINDOWS
32
+ stderr.close
33
+ result = stdout.read
34
+ error = "Stderr cannot be read on Windows."
35
+ else
36
+ out_thread = Thread.new { result = stdout.read }
37
+ err_thread = Thread.new { error = stderr.read }
38
+ out_thread.join and err_thread.join
39
+ end
34
40
  yield(StringIO.new(result)) if block_given?
35
41
  end
36
- Process.waitpid pid
37
42
  raise Error, error unless $?.success?
38
43
  result
39
44
  end
@@ -48,7 +53,7 @@ module Closure
48
53
  end
49
54
 
50
55
  def command
51
- [@java, '-jar', @jar, @options].flatten.join(' ')
56
+ [@java, '-jar', "\"#{@jar}\"", @options].flatten.join(' ')
52
57
  end
53
58
 
54
59
  end
data/lib/closure/popen.rb CHANGED
@@ -4,37 +4,56 @@ module Closure
4
4
  # grandchild process, and returns the pid of the external process.
5
5
  module Popen
6
6
 
7
- def self.popen(*cmd)
8
- # pipe[0] for read, pipe[1] for write
9
- pw, pr, pe = IO.pipe, IO.pipe, IO.pipe
7
+ WINDOWS = RUBY_PLATFORM.match(/mswin32/)
8
+ if WINDOWS
9
+ require 'rubygems'
10
+ require 'win32/open3'
11
+ end
10
12
 
11
- pid = fork {
12
- pw[1].close
13
- STDIN.reopen(pw[0])
14
- pw[0].close
13
+ def self.popen(cmd)
14
+ pid = nil
15
+ if WINDOWS
16
+ error, pid = nil, nil
17
+ Open4.popen4(cmd) do |stdin, stdout, stderr, win_pid|
18
+ yield(stdin, stdout, stderr) if block_given?
19
+ stdout.read unless stdout.closed? or stdout.eof?
20
+ unless stderr.closed?
21
+ stderr.rewind
22
+ error = stderr.read
23
+ end
24
+ pid = win_pid
25
+ end
26
+ else
27
+ # pipe[0] for read, pipe[1] for write
28
+ pw, pr, pe = IO.pipe, IO.pipe, IO.pipe
15
29
 
16
- pr[0].close
17
- STDOUT.reopen(pr[1])
18
- pr[1].close
30
+ pid = fork {
31
+ pw[1].close
32
+ STDIN.reopen(pw[0])
33
+ pw[0].close
19
34
 
20
- pe[0].close
21
- STDERR.reopen(pe[1])
22
- pe[1].close
35
+ pr[0].close
36
+ STDOUT.reopen(pr[1])
37
+ pr[1].close
23
38
 
24
- exec(*cmd)
25
- }
26
-
27
- pw[0].close
28
- pr[1].close
29
- pe[1].close
30
- pi = [pw[1], pr[0], pe[0]]
31
- pw[1].sync = true
32
- begin
33
- if block_given?
34
- yield(*pi)
39
+ pe[0].close
40
+ STDERR.reopen(pe[1])
41
+ pe[1].close
42
+
43
+ exec(cmd)
44
+ }
45
+
46
+ pw[0].close
47
+ pr[1].close
48
+ pe[1].close
49
+ pi = [pw[1], pr[0], pe[0]]
50
+ pw[1].sync = true
51
+ begin
52
+ yield(*pi) if block_given?
53
+ ensure
54
+ pi.each{|p| p.close unless p.closed?}
35
55
  end
36
- ensure
37
- pi.each{|p| p.close unless p.closed?}
56
+ Process.waitpid pid
38
57
  end
39
58
  pid
40
59
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 0
9
- version: 0.3.0
8
+ - 1
9
+ version: 0.3.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jeremy Ashkenas
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-10 00:00:00 -04:00
18
+ date: 2010-06-11 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies: []
21
21