right_popen 1.0.3 → 1.0.4

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.
@@ -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