pasv_lib 0.1.1 → 0.1.2
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.
- checksums.yaml +5 -5
- data/.gitignore +2 -0
- data/lib/pasv_lib/version.rb +1 -1
- data/lib/pasv_lib.rb +2 -2
- data/pasv_lib.gemspec +0 -2
- data/vendor/systemu.rb +416 -0
- metadata +4 -24
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 50e4d7a31367670be250e437270f02fd37b8638fbd7a541fa91ab0ec7e35dccb
         | 
| 4 | 
            +
              data.tar.gz: 304eab6bd2becd3995b14c92bfdd1a39adda5d73687598eea0c64faeffd03651
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2f550d96c0a73954f1a39ddce847580197ec75bcdf0e69733926ba5d794e986c4d13f76d47a9d4872d20156b095381b052b983ded6dd364d56e414aea21b08de
         | 
| 7 | 
            +
              data.tar.gz: d72ecf0b88674b51d0622878659d12f29d22b3bf815ec64b75eb6e120b00dc4f571744ebeb48f1c334bc91e94569ed2673b2c9e78a7bf82ad8fdd0ba04a01d5f
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/lib/pasv_lib/version.rb
    CHANGED
    
    
    
        data/lib/pasv_lib.rb
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            require "pasv_lib/version"
         | 
| 2 | 
            -
            require "systemu"
         | 
| 2 | 
            +
            require File.join __dir__, "..", "vendor", "systemu"
         | 
| 3 3 |  | 
| 4 4 | 
             
            module PasvLib
         | 
| 5 5 | 
             
              module CoreExtensions
         | 
| @@ -35,7 +35,7 @@ module PasvLib | |
| 35 35 | 
             
                  include CoreExtensions::Time
         | 
| 36 36 |  | 
| 37 37 | 
             
                  def run_it *a, &b
         | 
| 38 | 
            -
                    exit_status, stdout, stderr = systemu *a, &b
         | 
| 38 | 
            +
                    exit_status, stdout, stderr = SystemUniversal::Run.systemu *a, &b
         | 
| 39 39 |  | 
| 40 40 |  | 
| 41 41 | 
             
                    puts stdout unless stdout.empty?
         | 
    
        data/pasv_lib.gemspec
    CHANGED
    
    | @@ -23,6 +23,4 @@ Gem::Specification.new do |spec| | |
| 23 23 | 
             
              spec.add_development_dependency "bundler", "~> 1.15"
         | 
| 24 24 | 
             
              spec.add_development_dependency "rake", "~> 10.0"
         | 
| 25 25 | 
             
              spec.add_development_dependency "rspec", "~> 3.0"
         | 
| 26 | 
            -
             | 
| 27 | 
            -
              spec.add_runtime_dependency "systemu", "~> 2.6", ">= 2.6.5"
         | 
| 28 26 | 
             
            end
         | 
    
        data/vendor/systemu.rb
    ADDED
    
    | @@ -0,0 +1,416 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Copyright (c) 2010, Ara T. Howard
         | 
| 4 | 
            +
            # All rights reserved.
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            #   Redistribution and use in source and binary forms, with or without
         | 
| 7 | 
            +
            # modification, are permitted provided that the following conditions are met:
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # * Redistributions of source code must retain the above copyright notice, this
         | 
| 10 | 
            +
            # list of conditions and the following disclaimer.
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
            #   * Redistributions in binary form must reproduce the above copyright notice,
         | 
| 13 | 
            +
            #                                                                       this list of conditions and the following disclaimer in the documentation
         | 
| 14 | 
            +
            # and/or other materials provided with the distribution.
         | 
| 15 | 
            +
            #
         | 
| 16 | 
            +
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
         | 
| 17 | 
            +
            # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
         | 
| 18 | 
            +
            # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| 19 | 
            +
            # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
         | 
| 20 | 
            +
            # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
         | 
| 21 | 
            +
            # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
         | 
| 22 | 
            +
            # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
         | 
| 23 | 
            +
            # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
         | 
| 24 | 
            +
            # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
         | 
| 25 | 
            +
            # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
         | 
| 26 | 
            +
            #
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            # This is a modified version of systemu by me (Ryan Moore).
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            require 'tmpdir'
         | 
| 31 | 
            +
            require 'socket'
         | 
| 32 | 
            +
            require 'fileutils'
         | 
| 33 | 
            +
            require 'rbconfig'
         | 
| 34 | 
            +
            require 'thread'
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            # Change to this to not pollute Object.
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            class SystemUniversal
         | 
| 39 | 
            +
              class Run
         | 
| 40 | 
            +
                def self.systemu(*a, &b)
         | 
| 41 | 
            +
                  Object::SystemUniversal.new(*a, &b).systemu
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            #
         | 
| 46 | 
            +
            # error class
         | 
| 47 | 
            +
            #
         | 
| 48 | 
            +
              class Error < RuntimeError
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            #
         | 
| 52 | 
            +
            # constants
         | 
| 53 | 
            +
            #
         | 
| 54 | 
            +
              SystemUniversal::VERSION = '2.6.5' unless SystemUniversal.send(:const_defined?, :VERSION)
         | 
| 55 | 
            +
              def SystemUniversal.version() SystemUniversal::VERSION end
         | 
| 56 | 
            +
              def version() SystemUniversal::VERSION end
         | 
| 57 | 
            +
              def SystemUniversal.description
         | 
| 58 | 
            +
                "universal capture of stdout and stderr and handling of child process pid for windows, *nix, etc."
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
            #
         | 
| 61 | 
            +
            # class methods
         | 
| 62 | 
            +
            #
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              @host = Socket.gethostname
         | 
| 65 | 
            +
              @ppid = Process.ppid
         | 
| 66 | 
            +
              @pid = Process.pid
         | 
| 67 | 
            +
              @turd = ENV['SYSTEMU_TURD']
         | 
| 68 | 
            +
              @ruby = nil
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              def self.ruby
         | 
| 71 | 
            +
                return @ruby if @ruby
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                c = begin; ::RbConfig::CONFIG; rescue NameError; ::Config::CONFIG; end
         | 
| 74 | 
            +
                ruby = File.join(c['bindir'], c['ruby_install_name']) << c['EXEEXT']
         | 
| 75 | 
            +
                @ruby = if system(ruby, '-e', '42')
         | 
| 76 | 
            +
                          ruby
         | 
| 77 | 
            +
                        else
         | 
| 78 | 
            +
                          system('ruby', '-e', '42') ? 'ruby' : warn('no ruby in PATH/CONFIG')
         | 
| 79 | 
            +
                        end
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
              class << SystemUniversal
         | 
| 83 | 
            +
                %w( host ppid pid turd ).each{|a| attr_accessor a}
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                def quote(*words)
         | 
| 86 | 
            +
                  words.map{|word| word.inspect}.join(' ')
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            #
         | 
| 91 | 
            +
            # instance methods
         | 
| 92 | 
            +
            #
         | 
| 93 | 
            +
             | 
| 94 | 
            +
              def initialize argv, opts = {}, &block
         | 
| 95 | 
            +
                getopt = getopts opts
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                @argv = argv
         | 
| 98 | 
            +
                @block = block
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                @stdin = getopt[ ['stdin', 'in', '0', 0] ]
         | 
| 101 | 
            +
                @stdout = getopt[ ['stdout', 'out', '1', 1] ]
         | 
| 102 | 
            +
                @stderr = getopt[ ['stderr', 'err', '2', 2] ]
         | 
| 103 | 
            +
                @env = getopt[ 'env' ]
         | 
| 104 | 
            +
                @cwd = getopt[ 'cwd' ]
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                @host = getopt[ 'host', self.class.host ]
         | 
| 107 | 
            +
                @ppid = getopt[ 'ppid', self.class.ppid ]
         | 
| 108 | 
            +
                @pid = getopt[ 'pid', self.class.pid ]
         | 
| 109 | 
            +
                @ruby = getopt[ 'ruby', self.class.ruby ]
         | 
| 110 | 
            +
              end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
              def systemu
         | 
| 113 | 
            +
                tmpdir do |tmp|
         | 
| 114 | 
            +
                  c = child_setup tmp
         | 
| 115 | 
            +
                  status = nil
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                  begin
         | 
| 118 | 
            +
                    thread = nil
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                    quietly{
         | 
| 121 | 
            +
                      IO.popen "#{ quote(@ruby) } #{ quote(c['program']) }", 'rb+' do |pipe|
         | 
| 122 | 
            +
                        line = pipe.gets
         | 
| 123 | 
            +
                        case line
         | 
| 124 | 
            +
                        when %r/^pid: \d+$/
         | 
| 125 | 
            +
                          cid = Integer line[%r/\d+/]
         | 
| 126 | 
            +
                        else
         | 
| 127 | 
            +
                          begin
         | 
| 128 | 
            +
                            buf = pipe.read
         | 
| 129 | 
            +
                            buf = "#{ line }#{ buf }"
         | 
| 130 | 
            +
                            e = Marshal.load buf
         | 
| 131 | 
            +
                            raise unless Exception === e
         | 
| 132 | 
            +
                            raise e
         | 
| 133 | 
            +
                          rescue
         | 
| 134 | 
            +
                            raise Error "systemu: Error - process interrupted!\n#{ buf }\n"
         | 
| 135 | 
            +
                          end
         | 
| 136 | 
            +
                        end
         | 
| 137 | 
            +
                        thread = new_thread cid, @block if @block
         | 
| 138 | 
            +
                        pipe.read rescue nil
         | 
| 139 | 
            +
                      end
         | 
| 140 | 
            +
                    }
         | 
| 141 | 
            +
                    status = $?
         | 
| 142 | 
            +
                  ensure
         | 
| 143 | 
            +
                    if thread
         | 
| 144 | 
            +
                      begin
         | 
| 145 | 
            +
                        class << status
         | 
| 146 | 
            +
                          attr 'thread'
         | 
| 147 | 
            +
                        end
         | 
| 148 | 
            +
                        status.instance_eval{ @thread = thread }
         | 
| 149 | 
            +
                      rescue
         | 
| 150 | 
            +
                        42
         | 
| 151 | 
            +
                      end
         | 
| 152 | 
            +
                    end
         | 
| 153 | 
            +
                  end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                  if @stdout or @stderr
         | 
| 156 | 
            +
                    open(c['stdout'], 'rb'){|f| relay f => @stdout} if @stdout
         | 
| 157 | 
            +
                    open(c['stderr'], 'rb'){|f| relay f => @stderr} if @stderr
         | 
| 158 | 
            +
                    status
         | 
| 159 | 
            +
                  else
         | 
| 160 | 
            +
                    [status, open(c['stdout'], 'rb'){|f| f.read}, open(c['stderr'], 'rb'){|f| f.read}]
         | 
| 161 | 
            +
                  end
         | 
| 162 | 
            +
                end
         | 
| 163 | 
            +
              end
         | 
| 164 | 
            +
             | 
| 165 | 
            +
              def quote *args, &block
         | 
| 166 | 
            +
                SystemUniversal.quote(*args, &block)
         | 
| 167 | 
            +
              end
         | 
| 168 | 
            +
             | 
| 169 | 
            +
              def new_thread child_pid, block
         | 
| 170 | 
            +
                q = Queue.new
         | 
| 171 | 
            +
                Thread.new(child_pid) do |cid|
         | 
| 172 | 
            +
                  current = Thread.current
         | 
| 173 | 
            +
                  current.abort_on_exception = true
         | 
| 174 | 
            +
                  q.push current
         | 
| 175 | 
            +
                  block.call cid
         | 
| 176 | 
            +
                end
         | 
| 177 | 
            +
                q.pop
         | 
| 178 | 
            +
              end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
              def child_setup tmp
         | 
| 181 | 
            +
                stdin = File.expand_path(File.join(tmp, 'stdin'))
         | 
| 182 | 
            +
                stdout = File.expand_path(File.join(tmp, 'stdout'))
         | 
| 183 | 
            +
                stderr = File.expand_path(File.join(tmp, 'stderr'))
         | 
| 184 | 
            +
                program = File.expand_path(File.join(tmp, 'program'))
         | 
| 185 | 
            +
                config = File.expand_path(File.join(tmp, 'config'))
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                if @stdin
         | 
| 188 | 
            +
                  open(stdin, 'wb'){|f| relay @stdin => f}
         | 
| 189 | 
            +
                else
         | 
| 190 | 
            +
                  FileUtils.touch stdin
         | 
| 191 | 
            +
                end
         | 
| 192 | 
            +
                FileUtils.touch stdout
         | 
| 193 | 
            +
                FileUtils.touch stderr
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                c = {}
         | 
| 196 | 
            +
                c['argv'] = @argv
         | 
| 197 | 
            +
                c['env'] = @env
         | 
| 198 | 
            +
                c['cwd'] = @cwd
         | 
| 199 | 
            +
                c['stdin'] = stdin
         | 
| 200 | 
            +
                c['stdout'] = stdout
         | 
| 201 | 
            +
                c['stderr'] = stderr
         | 
| 202 | 
            +
                c['program'] = program
         | 
| 203 | 
            +
                open(config, 'wb'){|f| Marshal.dump(c, f)}
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                open(program, 'wb'){|f| f.write child_program(config)}
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                c
         | 
| 208 | 
            +
              end
         | 
| 209 | 
            +
             | 
| 210 | 
            +
              def quietly
         | 
| 211 | 
            +
                v = $VERBOSE
         | 
| 212 | 
            +
                $VERBOSE = nil
         | 
| 213 | 
            +
                yield
         | 
| 214 | 
            +
              ensure
         | 
| 215 | 
            +
                $VERBOSE = v
         | 
| 216 | 
            +
              end
         | 
| 217 | 
            +
             | 
| 218 | 
            +
              def child_program config
         | 
| 219 | 
            +
                <<-program
         | 
| 220 | 
            +
                  # encoding: utf-8
         | 
| 221 | 
            +
             | 
| 222 | 
            +
                  PIPE = STDOUT.dup
         | 
| 223 | 
            +
                  begin
         | 
| 224 | 
            +
                    config = Marshal.load(IO.read('#{ config }',:mode=>"rb"))
         | 
| 225 | 
            +
             | 
| 226 | 
            +
                    argv = config['argv']
         | 
| 227 | 
            +
                    env = config['env']
         | 
| 228 | 
            +
                    cwd = config['cwd']
         | 
| 229 | 
            +
                    stdin = config['stdin']
         | 
| 230 | 
            +
                    stdout = config['stdout']
         | 
| 231 | 
            +
                    stderr = config['stderr']
         | 
| 232 | 
            +
             | 
| 233 | 
            +
                    Dir.chdir cwd if cwd
         | 
| 234 | 
            +
                    env.each{|k,v| ENV[k.to_s] = v.to_s} if env
         | 
| 235 | 
            +
             | 
| 236 | 
            +
                    STDIN.reopen stdin
         | 
| 237 | 
            +
                    STDOUT.reopen stdout
         | 
| 238 | 
            +
                    STDERR.reopen stderr
         | 
| 239 | 
            +
             | 
| 240 | 
            +
                    PIPE.puts "pid: \#{ Process.pid }"
         | 
| 241 | 
            +
                    PIPE.flush                        ### the process is ready yo!
         | 
| 242 | 
            +
                    PIPE.close
         | 
| 243 | 
            +
             | 
| 244 | 
            +
                    exec *argv
         | 
| 245 | 
            +
                  rescue Exception => e
         | 
| 246 | 
            +
                    PIPE.write Marshal.dump(e) rescue nil
         | 
| 247 | 
            +
                    exit 42
         | 
| 248 | 
            +
                  end
         | 
| 249 | 
            +
                program
         | 
| 250 | 
            +
              end
         | 
| 251 | 
            +
             | 
| 252 | 
            +
              def relay srcdst
         | 
| 253 | 
            +
                src, dst, _ = srcdst.to_a.first
         | 
| 254 | 
            +
                if src.respond_to? 'read'
         | 
| 255 | 
            +
                  while((buffer = src.read(8192))); dst << buffer; end
         | 
| 256 | 
            +
                else
         | 
| 257 | 
            +
                  if src.respond_to?(:each_line)
         | 
| 258 | 
            +
                    src.each_line{|buf| dst << buf}
         | 
| 259 | 
            +
                  else
         | 
| 260 | 
            +
                    src.each{|buf| dst << buf}
         | 
| 261 | 
            +
                  end
         | 
| 262 | 
            +
                end
         | 
| 263 | 
            +
              end
         | 
| 264 | 
            +
             | 
| 265 | 
            +
              def slug_for(*args)
         | 
| 266 | 
            +
                options = args.last.is_a?(Hash) ? args.pop : {}
         | 
| 267 | 
            +
                join = (options[:join] || options['join'] || '_').to_s
         | 
| 268 | 
            +
                string = args.flatten.compact.join(join)
         | 
| 269 | 
            +
                words = string.to_s.scan(%r|[/\w]+|)
         | 
| 270 | 
            +
                words.map!{|word| word.gsub %r|[^/0-9a-zA-Z_-]|, ''}
         | 
| 271 | 
            +
                words.delete_if{|word| word.nil? or word.strip.empty?}
         | 
| 272 | 
            +
                words.join(join).downcase.gsub('/', (join * 2))
         | 
| 273 | 
            +
              end
         | 
| 274 | 
            +
             | 
| 275 | 
            +
              def tmpdir d = Dir.tmpdir, max = 42, &b
         | 
| 276 | 
            +
                i = -1 and loop{
         | 
| 277 | 
            +
                  i += 1
         | 
| 278 | 
            +
             | 
| 279 | 
            +
                  tmp = File.join(d, slug_for("systemu_#{ @host }_#{ @ppid }_#{ @pid }_#{ rand }_#{ i += 1 }"))
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                  begin
         | 
| 282 | 
            +
                    Dir.mkdir tmp
         | 
| 283 | 
            +
                  rescue Errno::EEXIST
         | 
| 284 | 
            +
                    raise Error if i >= max
         | 
| 285 | 
            +
                    next
         | 
| 286 | 
            +
                  end
         | 
| 287 | 
            +
             | 
| 288 | 
            +
                  break(
         | 
| 289 | 
            +
                    if b
         | 
| 290 | 
            +
                      begin
         | 
| 291 | 
            +
                        b.call tmp
         | 
| 292 | 
            +
                      ensure
         | 
| 293 | 
            +
                        FileUtils.rm_rf tmp unless SystemU.turd
         | 
| 294 | 
            +
                      end
         | 
| 295 | 
            +
                    else
         | 
| 296 | 
            +
                      tmp
         | 
| 297 | 
            +
                    end
         | 
| 298 | 
            +
                  )
         | 
| 299 | 
            +
                }
         | 
| 300 | 
            +
              end
         | 
| 301 | 
            +
             | 
| 302 | 
            +
              def getopts opts = {}
         | 
| 303 | 
            +
                lambda do |*args|
         | 
| 304 | 
            +
                  keys, default, _ = args
         | 
| 305 | 
            +
                  catch(:opt) do
         | 
| 306 | 
            +
                    [keys].flatten.each do |key|
         | 
| 307 | 
            +
                      [key, key.to_s, key.to_s.intern].each do |k|
         | 
| 308 | 
            +
                        throw :opt, opts[k] if opts.has_key?(k)
         | 
| 309 | 
            +
                      end
         | 
| 310 | 
            +
                    end
         | 
| 311 | 
            +
                    default
         | 
| 312 | 
            +
                  end
         | 
| 313 | 
            +
                end
         | 
| 314 | 
            +
              end
         | 
| 315 | 
            +
            end
         | 
| 316 | 
            +
             | 
| 317 | 
            +
            # some monkeypatching for JRuby
         | 
| 318 | 
            +
            if defined? JRUBY_VERSION
         | 
| 319 | 
            +
              require 'jruby'
         | 
| 320 | 
            +
              java_import org.jruby.RubyProcess
         | 
| 321 | 
            +
             | 
| 322 | 
            +
              class SystemUniversal
         | 
| 323 | 
            +
                def systemu
         | 
| 324 | 
            +
                  split_argv = JRuby::PathHelper.smart_split_command @argv
         | 
| 325 | 
            +
                  process = java.lang.Runtime.runtime.exec split_argv.to_java(:string)
         | 
| 326 | 
            +
             | 
| 327 | 
            +
                  stdout, stderr = [process.input_stream, process.error_stream].map do |stream|
         | 
| 328 | 
            +
                    StreamReader.new(stream)
         | 
| 329 | 
            +
                  end
         | 
| 330 | 
            +
             | 
| 331 | 
            +
                  field = process.get_class.get_declared_field("pid")
         | 
| 332 | 
            +
                  field.set_accessible(true)
         | 
| 333 | 
            +
                  pid = field.get(process)
         | 
| 334 | 
            +
                  _thread = new_thread pid, @block if @block
         | 
| 335 | 
            +
                  exit_code = process.wait_for
         | 
| 336 | 
            +
                  [
         | 
| 337 | 
            +
                    RubyProcess::RubyStatus.new_process_status(JRuby.runtime, exit_code, pid),
         | 
| 338 | 
            +
                    stdout.join,
         | 
| 339 | 
            +
                    stderr.join
         | 
| 340 | 
            +
                  ]
         | 
| 341 | 
            +
                end
         | 
| 342 | 
            +
             | 
| 343 | 
            +
                class StreamReader
         | 
| 344 | 
            +
                  def initialize(stream)
         | 
| 345 | 
            +
                    @data = ""
         | 
| 346 | 
            +
                    @thread = Thread.new do
         | 
| 347 | 
            +
                      reader = java.io.BufferedReader.new java.io.InputStreamReader.new(stream)
         | 
| 348 | 
            +
             | 
| 349 | 
            +
                      while line = reader.read_line
         | 
| 350 | 
            +
                        @data << line << "\n"
         | 
| 351 | 
            +
                      end
         | 
| 352 | 
            +
                    end
         | 
| 353 | 
            +
                  end
         | 
| 354 | 
            +
             | 
| 355 | 
            +
                  def join
         | 
| 356 | 
            +
                    @thread.join
         | 
| 357 | 
            +
                    @data
         | 
| 358 | 
            +
                  end
         | 
| 359 | 
            +
                end
         | 
| 360 | 
            +
              end
         | 
| 361 | 
            +
            end
         | 
| 362 | 
            +
             | 
| 363 | 
            +
             | 
| 364 | 
            +
             | 
| 365 | 
            +
            SystemU = SystemUniversal unless defined? SystemU
         | 
| 366 | 
            +
            Systemu = SystemUniversal unless defined? Systemu
         | 
| 367 | 
            +
             | 
| 368 | 
            +
             | 
| 369 | 
            +
             | 
| 370 | 
            +
             | 
| 371 | 
            +
             | 
| 372 | 
            +
             | 
| 373 | 
            +
             | 
| 374 | 
            +
             | 
| 375 | 
            +
             | 
| 376 | 
            +
             | 
| 377 | 
            +
             | 
| 378 | 
            +
             | 
| 379 | 
            +
             | 
| 380 | 
            +
            if $0 == __FILE__
         | 
| 381 | 
            +
            #
         | 
| 382 | 
            +
            # date
         | 
| 383 | 
            +
            #
         | 
| 384 | 
            +
              date = %q( ruby -e"  t = Time.now; STDOUT.puts t; STDERR.puts t  " )
         | 
| 385 | 
            +
             | 
| 386 | 
            +
              status, stdout, stderr = systemu date
         | 
| 387 | 
            +
              p [status, stdout, stderr]
         | 
| 388 | 
            +
             | 
| 389 | 
            +
              status = systemu date, 1=>(stdout = '')
         | 
| 390 | 
            +
              p [status, stdout]
         | 
| 391 | 
            +
             | 
| 392 | 
            +
              status = systemu date, 2=>(stderr = '')
         | 
| 393 | 
            +
              p [status, stderr]
         | 
| 394 | 
            +
            #
         | 
| 395 | 
            +
            # sleep
         | 
| 396 | 
            +
            #
         | 
| 397 | 
            +
              sleep = %q( ruby -e"  p(sleep(1))  " )
         | 
| 398 | 
            +
              status, stdout, stderr = systemu sleep
         | 
| 399 | 
            +
              p [status, stdout, stderr]
         | 
| 400 | 
            +
             | 
| 401 | 
            +
              sleep = %q( ruby -e"  p(sleep(42))  " )
         | 
| 402 | 
            +
              status, stdout, stderr = systemu(sleep){|cid| Process.kill 9, cid}
         | 
| 403 | 
            +
              p [status, stdout, stderr]
         | 
| 404 | 
            +
            #
         | 
| 405 | 
            +
            # env
         | 
| 406 | 
            +
            #
         | 
| 407 | 
            +
              env = %q( ruby -e"  p ENV['A']  " )
         | 
| 408 | 
            +
              status, stdout, stderr = systemu env, :env => {'A' => 42}
         | 
| 409 | 
            +
              p [status, stdout, stderr]
         | 
| 410 | 
            +
            #
         | 
| 411 | 
            +
            # cwd
         | 
| 412 | 
            +
            #
         | 
| 413 | 
            +
              env = %q( ruby -e"  p Dir.pwd  " )
         | 
| 414 | 
            +
              status, stdout, stderr = systemu env, :cwd => Dir.tmpdir
         | 
| 415 | 
            +
              p [status, stdout, stderr]
         | 
| 416 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: pasv_lib
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ryan Moore
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2019-02-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -52,26 +52,6 @@ dependencies: | |
| 52 52 | 
             
                - - "~>"
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 54 | 
             
                    version: '3.0'
         | 
| 55 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            -
              name: systemu
         | 
| 57 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            -
                requirements:
         | 
| 59 | 
            -
                - - "~>"
         | 
| 60 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: '2.6'
         | 
| 62 | 
            -
                - - ">="
         | 
| 63 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 64 | 
            -
                    version: 2.6.5
         | 
| 65 | 
            -
              type: :runtime
         | 
| 66 | 
            -
              prerelease: false
         | 
| 67 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 68 | 
            -
                requirements:
         | 
| 69 | 
            -
                - - "~>"
         | 
| 70 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 71 | 
            -
                    version: '2.6'
         | 
| 72 | 
            -
                - - ">="
         | 
| 73 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 74 | 
            -
                    version: 2.6.5
         | 
| 75 55 | 
             
            description: 
         | 
| 76 56 | 
             
            email:
         | 
| 77 57 | 
             
            - moorer@udel.edu
         | 
| @@ -91,6 +71,7 @@ files: | |
| 91 71 | 
             
            - lib/pasv_lib.rb
         | 
| 92 72 | 
             
            - lib/pasv_lib/version.rb
         | 
| 93 73 | 
             
            - pasv_lib.gemspec
         | 
| 74 | 
            +
            - vendor/systemu.rb
         | 
| 94 75 | 
             
            homepage: http://www.github.com/mooreryan/pasv_lib
         | 
| 95 76 | 
             
            licenses: []
         | 
| 96 77 | 
             
            metadata: {}
         | 
| @@ -109,8 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 109 90 | 
             
                - !ruby/object:Gem::Version
         | 
| 110 91 | 
             
                  version: '0'
         | 
| 111 92 | 
             
            requirements: []
         | 
| 112 | 
            -
             | 
| 113 | 
            -
            rubygems_version: 2.6.14
         | 
| 93 | 
            +
            rubygems_version: 3.0.1
         | 
| 114 94 | 
             
            signing_key: 
         | 
| 115 95 | 
             
            specification_version: 4
         | 
| 116 96 | 
             
            summary: Library code for PASV
         |