system_run 1.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8880b54914f20294364a0bb3695c9a5fda5aa66
4
- data.tar.gz: fb73e272798e02d8e1357a6a5f4ef942a455c670
3
+ metadata.gz: 5c6bd63c23713abf1d6a2ce4c456048e313fd7a3
4
+ data.tar.gz: 304ba5539f1f046ad9eb73bcc0d139fda00b27e0
5
5
  SHA512:
6
- metadata.gz: 3b7ec264ee01e09d5c9466eabb486d12dcdace8da23faf9f144ce8a32783ff8a4dc6a8a356a37cc65e5507e0a6e6f40c60df4eba2d5c919cf34ed48e8d6650bd
7
- data.tar.gz: 69ea30062b708f6f69145f106b36e2c2634595cced51bad4b39804c075d9d294fc0dd8a9d7098fb20824a0e62bde45a8d5609edc47aab56e155dd4ffc6fac1a1
6
+ metadata.gz: 107eafe0bccfa161b5450977034a1b860bf6f9a73c3db07726c902ad23e260e7616001f1caf045fb2a0e53d9f15f3cc7a678f48c2121af1bb13a080831213057
7
+ data.tar.gz: 07d0a846819655436dcbbac434d28d48031f1038725a823266d1d02ecb8a8b0fc82fc51bdc58cd26641313ae5db6d9a03da5419c3ddc3d3a6affcc66200840b2
data/Rakefile CHANGED
@@ -1,13 +1,6 @@
1
1
  require 'rake'
2
2
  require 'rubygems/package_task'
3
3
 
4
- # require 'rake/testtask'
5
- # Rake::TestTask.new do |t|
6
- # t.libs << "test"
7
- # t.test_files = FileList['./test/tc_*.rb']
8
- # t.verbose = false
9
- # end
10
-
11
4
  spec = eval(File.read('system_run.gemspec'))
12
5
  Gem::PackageTask.new(spec) do |pkg|
13
6
  pkg.need_zip = true
@@ -23,3 +16,10 @@ end
23
16
  task :install => :gem do |r|
24
17
  `sudo gem install pkg/system_run.gem`
25
18
  end
19
+
20
+ begin
21
+ require 'rspec/core/rake_task'
22
+ RSpec::Core::RakeTask.new(:spec)
23
+ task :test => :spec
24
+ rescue LoadError
25
+ end
@@ -1,13 +1,13 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "system_run"
3
- s.version = "1.0"
3
+ s.version = "1.0.1"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "MIT"
6
6
  s.summary = "Tiny wrapper for running commands. Inspired by systemu."
7
7
 
8
8
  s.description = "see https://github.com/biederfrau/system_run"
9
9
 
10
- s.files = Dir['{example/**/*,server/**/*,lib/**/*,cockpit/**/*,contrib/logo*,contrib/Screen*,log/**/*}'] + %w(LICENSE Rakefile system_run.gemspec README.md)
10
+ s.files = Dir['lib/**/*,spec/*}'] + %w(LICENSE Rakefile system_run.gemspec README.md)
11
11
  s.require_path = 'lib'
12
12
  s.extra_rdoc_files = ['README.md']
13
13
  s.test_files = []
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: system_run
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sonja Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-02 00:00:00.000000000 Z
11
+ date: 2017-02-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: see https://github.com/biederfrau/system_run
14
14
  email: s.bdrmnn@gmail.com
@@ -20,7 +20,6 @@ files:
20
20
  - LICENSE
21
21
  - README.md
22
22
  - Rakefile
23
- - lib/system_run.rb
24
23
  - system_run.gemspec
25
24
  homepage: https://github.com/biederfrau/system_run
26
25
  licenses:
@@ -1,105 +0,0 @@
1
- # encoding: utf-8
2
- require 'timeout'
3
- require 'tempfile'
4
-
5
- module System
6
- def self.run(cmd, *args, timeout: nil, env: {}, capture: :default, file: nil, cwd: '.', on_timeout: nil)
7
- cmd = cmd.dup << ' ' << args.join(' ')
8
- env = env.dup.map { |k, v| [k.to_s, v.to_s] }.to_h
9
-
10
- raise ArgumentError, "file(s) must be instance of File or Tempfile" unless file.nil? || file.all? { |f| f.is_a?(File) || f.is_a?(Tempfile) }
11
- out, err = case capture
12
- when :default then
13
- raise ArgumentError, "invalid file redirects for default capture, expected array of two" unless file.nil? || file.is_a?(Array) && file.size == 2
14
- file ? [file.first, file.last] : [Tempfile.new('sysrun-out'), Tempfile.new('sysrun-err')]
15
- when :out then [file || Tempfile.new('sysrun-out'), '/dev/null']
16
- when :err then ['/dev/null', file || Tempfile.new('sysrun-err')]
17
- when :both then [file || Tempfile.new('sysrun-outerr')] * 2
18
- else raise ArgumentError, "unknown capture: #{capture}"
19
- end
20
-
21
- pid = spawn env, cmd, out: out, err: err, chdir: cwd
22
- status = wait_or_kill pid, timeout, on_timeout
23
- [out, err].each { |f| f.rewind if f.respond_to? :rewind }
24
-
25
- file ? status : case capture
26
- when :default then [status, out.read, err.read]
27
- when :out, :both then [status, out.read]
28
- when :err then [status, err.read]
29
- end
30
- ensure
31
- [out, err].each { |f| f.unlink if f.is_a?(Tempfile) && f.path&.include?('sysrun') }
32
- end
33
-
34
- def self.wait_or_kill(pid, timeout=nil, on_timeout=nil)
35
- begin
36
- Timeout::timeout(timeout) do
37
- Process.wait pid
38
- end
39
- rescue Timeout::Error
40
- if on_timeout then
41
- on_timeout.call pid
42
- else
43
- Process.kill 9, pid
44
- end
45
- Process.wait pid
46
- end
47
-
48
- $?
49
- end
50
-
51
- private_class_method :wait_or_kill
52
- end
53
-
54
- if __FILE__ == $0 then
55
- date = %q(ruby -e "t = Time.now; STDOUT.puts t; STDERR.puts t")
56
-
57
- # capture stdout and stderr separately.
58
- status, stdout, stderr = System.run date
59
- p [status, stdout, stderr]
60
-
61
- # capture only stdout, discard stderr.
62
- status, stdout = System.run date, capture: :out
63
- p [status, stdout]
64
-
65
- # capture stderr and discard stdout.
66
- status, stderr = System.run date, capture: :err
67
- p [status, stderr]
68
-
69
- # capture both stdout and stderr.
70
- status, all = System.run date, capture: :both
71
- p [status, all]
72
-
73
- # capture stderr. kill process after 2 seconds.
74
- loop_time = %q(ruby -e "loop { STDERR.puts Time.now.to_i; sleep 2 }")
75
- status, stderr = System.run loop_time, capture: :err, timeout: 2
76
- p [status, stderr]
77
-
78
- # set timeout to 2 seconds and provide an action for when timeout occurs. default
79
- # action is to send signal 9. this will be overridden!
80
- status, _, _ = System.run %q(ruby -e "sleep 10"), timeout: 2, on_timeout: ->(pid) do
81
- puts 'oh no, request timed out'
82
- Process.kill 9, pid
83
- end
84
- p status
85
-
86
- # set environment variables.
87
- env = %q(ruby -e "puts ENV['HELLO']")
88
- status, stdout = System.run env, env: {'HELLO' => 'WORLD'}, capture: :out
89
- p [status, stdout]
90
-
91
- # switch to a different directory before executing the command.
92
- dir = %q(ruby -e "puts Dir.pwd")
93
- status, stdout = System.run dir, cwd: Dir.tmpdir, capture: :out
94
- p [status, stdout]
95
-
96
- # write to a file instead of loading output into a string.
97
- out = File.open 'test_out.txt', 'w+'
98
- err = File.open 'test_err.txt', 'w+'
99
-
100
- hello = %q(ruby -e "STDERR.puts 'hello'; STDOUT.puts 'world'")
101
- status = System.run hello, file: [out, err]
102
- p [status, out.read, err.read]
103
-
104
- [out, err].each { |f| f.close; File.unlink f.path }
105
- end