right_popen 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -35,15 +35,10 @@ module RightScale
35
35
 
36
36
  # === Parameters
37
37
  # target(Object):: Object defining handler methods to be called.
38
- #
39
38
  # stdout_handler(String):: Token for stdout handler method name.
40
- #
41
39
  # exit_handler(String):: Token for exit handler method name.
42
- #
43
40
  # stderr_eventable(Connector):: EM object representing stderr handler.
44
- #
45
41
  # read_fd(IO):: Standard output read file descriptor.
46
- #
47
42
  # write_fd(IO):: Standard output write file descriptor.
48
43
  def initialize(target, stdout_handler, exit_handler, stderr_eventable, read_fd, write_fd)
49
44
  @target = target
@@ -75,10 +70,12 @@ module RightScale
75
70
  # target(Object):: Object defining handler methods to be called.
76
71
  #
77
72
  # stderr_handler(String):: Token for stderr handler method name.
78
- def initialize(target, stderr_handler)
73
+ # read_fd(IO):: Error output read file descriptor.
74
+ def initialize(target, stderr_handler, read_fd)
79
75
  @target = target
80
76
  @stderr_handler = stderr_handler
81
77
  @unbound = false
78
+ @read_fd = read_fd # So it doesn't get GCed
82
79
  end
83
80
 
84
81
  # Callback from EM to receive data.
@@ -112,14 +109,13 @@ module RightScale
112
109
  #
113
110
  # === Parameters
114
111
  # cmd(String):: command to execute, including any arguments.
115
- #
116
112
  # target(Object):: object defining handler methods to be called.
117
- #
118
113
  # stdout_handler(String):: token for stdout handler method name.
119
- #
120
114
  # stderr_handler(String):: token for stderr handler method name.
121
- #
122
115
  # exit_handler(String):: token for exit handler method name.
116
+ #
117
+ # === Returns
118
+ # true:: Always returns true
123
119
  def self.popen3(cmd, target, stdout_handler = nil, stderr_handler = nil, exit_handler = nil)
124
120
  raise "EventMachine reactor must be started" unless EM.reactor_running?
125
121
  GC.start # To garbage collect open file descriptors from passed executions
@@ -128,12 +124,13 @@ module RightScale
128
124
  r, w = Socket::pair(Socket::AF_LOCAL, Socket::SOCK_STREAM, 0)#IO::pipe
129
125
 
130
126
  $stderr.reopen w
131
- c = EM.attach(r, StdErrHandler, target, stderr_handler) if stderr_handler
127
+ c = EM.attach(r, StdErrHandler, target, stderr_handler, r) if stderr_handler
132
128
  EM.popen(cmd, StdOutHandler, target, stdout_handler, exit_handler, c, r, w)
133
129
  # Do not close 'w', strange things happen otherwise
134
130
  # (command protocol socket gets closed during decommission)
135
131
  $stderr.reopen saved_stderr
136
132
  end
133
+ true
137
134
  end
138
135
 
139
136
  end
data/right_popen.gemspec CHANGED
@@ -4,7 +4,7 @@ spec = Gem::Specification.new do |spec|
4
4
  is_windows = RUBY_PLATFORM =~ /mswin/
5
5
 
6
6
  spec.name = 'right_popen'
7
- spec.version = '1.0.3'
7
+ spec.version = '1.0.4'
8
8
  spec.authors = ['Scott Messier', 'Raphael Simon']
9
9
  spec.email = 'scott@rightscale.com'
10
10
  spec.homepage = 'https://github.com/rightscale/right_popen'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_popen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Messier