closure-compiler 0.3.0 → 0.3.1

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/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