subprocess 0.1.6 → 0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/README.md +72 -0
  2. data/lib/subprocess.rb +529 -20
  3. metadata +55 -121
  4. data/History.txt +0 -4
  5. data/Manifest.txt +0 -46
  6. data/PostInstall.txt +0 -7
  7. data/README.rdoc +0 -77
  8. data/Rakefile +0 -20
  9. data/TODO.rdoc +0 -1
  10. data/examples/simple.irb +0 -22
  11. data/examples/simple_timeout.irb +0 -22
  12. data/features/multiple_popens_sequence.feature +0 -23
  13. data/features/popen.feature +0 -45
  14. data/features/popen_over_ssh.feature +0 -44
  15. data/features/popen_over_ssh_without_blocking.feature +0 -16
  16. data/features/popen_remote_fails_with_invalid_auth_data.feature +0 -13
  17. data/features/popen_reports_runtime.feature +0 -11
  18. data/features/popen_running.feature +0 -11
  19. data/features/popen_with_timeout.feature +0 -19
  20. data/features/popen_without_blocking.feature +0 -16
  21. data/features/step_definitions/common_steps.rb +0 -168
  22. data/features/step_definitions/multiple_popens_sequence_steps.rb +0 -73
  23. data/features/step_definitions/popen_over_ssh_steps.rb +0 -29
  24. data/features/step_definitions/popen_over_ssh_without_blocking_steps.rb +0 -30
  25. data/features/step_definitions/popen_remote_fails_with_invalid_auth_dat_steps.rb +0 -19
  26. data/features/step_definitions/popen_reports_runtime_steps.rb +0 -13
  27. data/features/step_definitions/popen_running_steps.rb +0 -12
  28. data/features/step_definitions/popen_steps.rb +0 -34
  29. data/features/step_definitions/popen_with_timeout_steps.rb +0 -24
  30. data/features/step_definitions/popen_without_blocking_steps.rb +0 -33
  31. data/features/support/common.rb +0 -29
  32. data/features/support/env.rb +0 -15
  33. data/features/support/matchers.rb +0 -11
  34. data/lib/core_ext/hash.rb +0 -14
  35. data/lib/core_ext/process_status.rb +0 -14
  36. data/lib/subprocess/popen.rb +0 -188
  37. data/lib/subprocess/popen_factory.rb +0 -63
  38. data/lib/subprocess/popen_remote.rb +0 -64
  39. data/lib/subprocess/popen_sequence.rb +0 -57
  40. data/script/console +0 -10
  41. data/script/destroy +0 -14
  42. data/script/generate +0 -14
  43. data/spec/spec.opts +0 -1
  44. data/spec/spec_helper.rb +0 -10
  45. data/spec/subprocess/popen_spec.rb +0 -32
  46. data/spec/subprocess_spec.rb +0 -2
  47. data/subprocess.gemspec +0 -36
  48. data/tasks/rspec.rake +0 -21
@@ -1,64 +0,0 @@
1
-
2
- module Subprocess
3
-
4
- class PopenRemote < Popen
5
- attr_accessor :hostname, :ssh_params
6
-
7
- def initialize(command, hostname, username, timeout=300, *ssh_params)
8
- @command = command
9
- @timeout = timeout
10
- @running = false
11
- @ipc_parsed = false
12
-
13
- @hostname = hostname
14
- @username = username
15
- @ssh_params = ssh_params
16
- end
17
-
18
- private
19
- def log_to_stderr_and_exit(msg)
20
- $stderr.write("Net::SSH error: #{@hostname} #{msg}")
21
- exit 1
22
- end
23
-
24
- def fork_child_exec
25
- exit_status = 0
26
- begin
27
- ssh = Net::SSH.start(@hostname, @username, *@ssh_params) do |ssh|
28
- ssh.open_channel do |channel|
29
- channel.exec(@command) do |chan, success|
30
- log_to_stderr_and_exit('failed to open exec channel') unless success
31
-
32
- channel.on_data do |chan, data|
33
- $stdout.write data
34
- end
35
-
36
- channel.on_extended_data do |chan, type, data|
37
- $stderr.write data
38
- end
39
-
40
- channel.on_request('exit-status') do |chan, data|
41
- exit_status = data.read_long.to_i
42
- end
43
-
44
- end
45
- end
46
- ssh.loop
47
- end
48
- rescue Net::SSH::AuthenticationFailed
49
- log_to_stderr_and_exit("authentication failure\n")
50
- rescue Errno::ECONNREFUSED
51
- log_to_stderr_and_exit("connection refused\n")
52
- rescue Errno::ETIMEDOUT
53
- log_to_stderr_and_exit("connection timeout\n")
54
- rescue Errno::EHOSTUNREACH
55
- log_to_stderr_and_exit("unreachable\n")
56
- rescue StandardError => error
57
- log_to_stderr_and_exit("error: #{error.message}\n")
58
- end
59
- exit exit_status
60
- end
61
-
62
- end # class PopenRemote
63
- end # module Subprocess
64
-
@@ -1,57 +0,0 @@
1
-
2
- module Subprocess
3
- class PopenSequenceError < StandardError; end
4
- class PopenSequence
5
- require 'forwardable'
6
- extend Forwardable
7
- attr_reader :running, :queue, :complete, :incomplete, :failed
8
-
9
- def_delegators :@last, :stdout, :stderr, :status
10
-
11
- def initialize(queue=[])
12
- @queue = queue
13
- @incomplete = queue
14
- @complete = []
15
- @failed = []
16
- @running = false
17
- @completed = false
18
- @last = nil
19
- end
20
-
21
- def include?(item)
22
- @queue.include?(item)
23
- end
24
-
25
- def [](index)
26
- @queue[index]
27
- end
28
-
29
- def add_popen(popen)
30
- raise PopenSequenceError,
31
- "appending a completed sequence is not allowed" if @completed
32
- @incomplete << popen
33
- end
34
- alias :<< :add_popen
35
-
36
- def perform
37
- @running = true
38
- @failure = false
39
- @queue.each do |popen|
40
- @last = popen
41
- popen.perform
42
- popen.status[:exitstatus] == 0 ? @complete << popen :
43
- (@failed << popen; break)
44
- end
45
- @incomplete = @incomplete - @complete
46
- @incomplete = @incomplete - @failed
47
- @running = false
48
- @completed = true
49
- end
50
-
51
- def completed?
52
- @completed
53
- end
54
-
55
- end
56
- end
57
-
data/script/console DELETED
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # File: script/console
3
- irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
-
5
- libs = " -r irb/completion"
6
- # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
- # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
- libs << " -r #{File.dirname(__FILE__) + '/../lib/subprocess.rb'}"
9
- puts "Loading subprocess gem"
10
- exec "#{irb} #{libs} --simple-prompt"
data/script/destroy DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
- APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
-
4
- begin
5
- require 'rubigen'
6
- rescue LoadError
7
- require 'rubygems'
8
- require 'rubigen'
9
- end
10
- require 'rubigen/scripts/destroy'
11
-
12
- ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
- RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
- RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
- APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
-
4
- begin
5
- require 'rubigen'
6
- rescue LoadError
7
- require 'rubygems'
8
- require 'rubigen'
9
- end
10
- require 'rubigen/scripts/generate'
11
-
12
- ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
- RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
- RubiGen::Scripts::Generate.new.run(ARGV)
data/spec/spec.opts DELETED
@@ -1 +0,0 @@
1
- --colour --format nested
data/spec/spec_helper.rb DELETED
@@ -1,10 +0,0 @@
1
- begin
2
- require 'spec'
3
- rescue LoadError
4
- require 'rubygems' unless ENV['NO_RUBYGEMS']
5
- gem 'rspec'
6
- require 'spec'
7
- end
8
-
9
- $:.unshift(File.dirname(__FILE__) + '/../lib')
10
- require 'subprocess'
@@ -1,32 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper.rb'
2
-
3
- module Subprocess
4
- #describe Popen do
5
-
6
- describe "zero exit code subprocess with stdout" do
7
- before(:each) do
8
- @subprocess = Popen.new('echo 1')
9
- @subprocess.run
10
- @subprocess.wait
11
- end
12
- it "has an exitcode of 0" do
13
- @subprocess.status[:exitstatus].should == 0
14
- end
15
- it "has a runtime in seconds" do
16
- @subprocess.status[:run_time].should be_kind_of Numeric
17
- end
18
- # TODO: trackdown/report rspec bug with stdout
19
- #it "has a stdout of 1" do
20
- # puts @subprocess.stdout
21
- # @subprocess.stdout.should == '1'
22
- #end
23
- it "has an stderr of " do
24
- @subprocess.stderr.should == ''
25
- end
26
- it "has a numerical pid" do
27
- @subprocess.pid.should be_a_kind_of Numeric
28
- end
29
- end
30
-
31
- #end
32
- end
@@ -1,2 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
2
-
data/subprocess.gemspec DELETED
@@ -1,36 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Gem::Specification.new do |s|
4
- s.name = %q{subprocess}
5
- s.version = "0.1.6"
6
-
7
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Bram Swenson"]
9
- s.date = %q{2010-05-22}
10
- s.description = %q{* Subprocess provides a clean wrapper class around the Kernel.exec method.}
11
- s.email = ["bram@craniumisajar.com"]
12
- s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt"]
13
- s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "TODO.rdoc", "examples/simple.irb", "examples/simple_timeout.irb", "features/multiple_popens_sequence.feature", "features/popen.feature", "features/popen_over_ssh.feature", "features/popen_over_ssh_without_blocking.feature", "features/popen_remote_fails_with_invalid_auth_data.feature", "features/popen_reports_runtime.feature", "features/popen_running.feature", "features/popen_with_timeout.feature", "features/popen_without_blocking.feature", "features/step_definitions/common_steps.rb", "features/step_definitions/multiple_popens_sequence_steps.rb", "features/step_definitions/popen_over_ssh_steps.rb", "features/step_definitions/popen_over_ssh_without_blocking_steps.rb", "features/step_definitions/popen_remote_fails_with_invalid_auth_dat_steps.rb", "features/step_definitions/popen_reports_runtime_steps.rb", "features/step_definitions/popen_running_steps.rb", "features/step_definitions/popen_steps.rb", "features/step_definitions/popen_with_timeout_steps.rb", "features/step_definitions/popen_without_blocking_steps.rb", "features/support/common.rb", "features/support/env.rb", "features/support/matchers.rb", "git_user_switcher", "lib/core_ext/hash.rb", "lib/core_ext/process_status.rb", "lib/subprocess.rb", "lib/subprocess/popen.rb", "lib/subprocess/popen_factory.rb", "lib/subprocess/popen_remote.rb", "lib/subprocess/popen_sequence.rb", "script/console", "script/destroy", "script/generate", "spec/spec.opts", "spec/spec_helper.rb", "spec/subprocess/popen_spec.rb", "spec/subprocess_spec.rb", "subprocess.gemspec", "tasks/rspec.rake"]
14
- s.homepage = %q{http://github.com/bramswenson/subprocess}
15
- s.rdoc_options = ["--main", "README.rdoc"]
16
- s.require_paths = ["lib"]
17
- s.rubyforge_project = %q{subprocess}
18
- s.rubygems_version = %q{1.3.6}
19
- s.summary = %q{* Subprocess provides a clean wrapper class around the Kernel.exec method.}
20
-
21
- if s.respond_to? :specification_version then
22
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
- s.specification_version = 3
24
-
25
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
26
- s.add_development_dependency(%q<rubyforge>, [">= 2.0.4"])
27
- s.add_development_dependency(%q<hoe>, [">= 2.6.0"])
28
- else
29
- s.add_dependency(%q<rubyforge>, [">= 2.0.4"])
30
- s.add_dependency(%q<hoe>, [">= 2.6.0"])
31
- end
32
- else
33
- s.add_dependency(%q<rubyforge>, [">= 2.0.4"])
34
- s.add_dependency(%q<hoe>, [">= 2.6.0"])
35
- end
36
- end
data/tasks/rspec.rake DELETED
@@ -1,21 +0,0 @@
1
- begin
2
- require 'spec'
3
- rescue LoadError
4
- require 'rubygems' unless ENV['NO_RUBYGEMS']
5
- require 'spec'
6
- end
7
- begin
8
- require 'spec/rake/spectask'
9
- rescue LoadError
10
- puts <<-EOS
11
- To use rspec for testing you must install rspec gem:
12
- gem install rspec
13
- EOS
14
- exit(0)
15
- end
16
-
17
- desc "Run the specs under spec/models"
18
- Spec::Rake::SpecTask.new do |t|
19
- t.spec_opts = ['--options', "spec/spec.opts"]
20
- t.spec_files = FileList['spec/**/*_spec.rb']
21
- end