execute 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/IOAdapter.rb +14 -0
  3. data/lib/cmd.rb +43 -18
  4. metadata +5 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 798cb7001f37401533422316c77c6e1bc4f4aee3
4
- data.tar.gz: 975768244e8e9784bd6c20ffdd214e9950d0075b
3
+ metadata.gz: 0544f6e92540ff7ab8d005b3474208a896741889
4
+ data.tar.gz: 4ba1872358af9e977c6442e0f26df575e07a1646
5
5
  SHA512:
6
- metadata.gz: 25babf483591aced7c3ad78a08cdaa39a801c97bcf662ee6d472870aa97f4c306850952d124e85827219511d30bf48df26889e68d501239d44a2d9632348ffc7
7
- data.tar.gz: 47647de07f2ae45ac72e06955b14fdcd19ebf98c6f895449caed3dab99206907a1225629f25eaad9b02274b061153dc2b0a627ddb30d51409b6b2c8a5ddc4207
6
+ metadata.gz: fa1dfd84665ea2ab0e0e3d7a9f09ca796bdb88fe5ae46ed3515cd48e365c38fd795b84c8c0ee7923ae85d86e6a9614270a8c361238c43e62ce101315c0c3e22f
7
+ data.tar.gz: 6ed1745bf90e2c48f7bbd70224a6c7dc42ba8c3397e74301ac371510d40124f97b1e9747e8cebc05c356ba8e64638cfc300e5c7da08a549b55fa53ec7c1fd80d
data/lib/IOAdapter.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'securerandom'
2
+ require 'tempfile'
3
+ class IOAdapter < DelegateClass(IO)
4
+ attr_accessor :output_buffer
5
+ def initialize(io)
6
+ __setobj__(io)
7
+ @output_buffer = []
8
+ end
9
+
10
+ def write(string)
11
+ @output_buffer << string
12
+ self.__getobj__.write(string)
13
+ end
14
+ end
data/lib/cmd.rb CHANGED
@@ -1,32 +1,57 @@
1
1
  require 'open3'
2
+ require 'sys/proctable'
3
+ require_relative 'IOAdapter.rb'
2
4
 
3
5
  class CMD < Hash
6
+ private
7
+ @@default_options = nil
8
+
9
+ def self.initialize_defaults
10
+ @@default_options = { echo_command: true, echo_output: true, ignore_exit_code: false, debug: false }
11
+ end
12
+
13
+ public
4
14
  def initialize(cmd, options=nil)
5
15
  self[:output] = ''
6
16
  self[:error] = ''
7
- self[:ignore_exit_code] = false
8
- self[:debug] = false
9
- self[:quiet] = false
10
-
11
- self[:command]=cmd
17
+ initialize_defaults if(@@default_options.nil?)
18
+
19
+ @@default_options.each { |key, value| self[key] = value}
12
20
  options.each { |key, value| self[key] = value} unless(options.nil?)
21
+ self[:command]=cmd
22
+ end
23
+
24
+ public
25
+ def self.default_options(hash)
26
+ initialize_defaults
27
+ hash.each { |key, value| @@default_options[key] = value}
13
28
  end
14
29
 
15
30
  def execute
16
- begin
17
- puts self[:command] unless(self[:quiet])
18
- self[:output],self[:error], self[:exit_code] = Open3.capture3(self[:command])
19
- self[:exit_code]=self[:exit_code].to_i
20
-
21
- if(self[:debug])
22
- puts "command: #{self[:command]}" if(self[:quiet])
23
- puts "output: #{self[:output]}"
24
- puts "error: #{self[:error]}"
25
- puts "exit_code: #{self[:exit_code]}"
31
+ #begin
32
+ puts self[:command] if(self[:echo_command])
33
+
34
+ output = {output: [], error: [] }
35
+ Open3.popen3(self[:command]) do |stdin, stdout, stderr, wait_thr|
36
+ {:output => stdout,:error => stderr}.each do |key, stream|
37
+ Thread.new do
38
+ until(raw_line = stream.gets).nil? do
39
+ output[key] << raw_line
40
+ puts raw_line if(self[:echo_output])
41
+ end
42
+ end
43
+ end
44
+ wait_thr.join
45
+ self[:output] = output[:output].join
46
+ self[:error] = output[:error].join
47
+ self[:exit_code] = wait_thr.value.to_i
26
48
  end
27
- rescue Exception => e
28
- self[:error] = "Exception: " + e.to_s
29
- self[:exit_code]=1 unless(has_key('exit_code'))
49
+
50
+ if(self[:debug])
51
+ puts "command: #{self[:command]}" if(self[:quiet])
52
+ puts "output: #{self[:output]}"
53
+ puts "error: #{self[:error]}"
54
+ puts "exit_code: #{self[:exit_code]}"
30
55
  end
31
56
 
32
57
  if((self[:exit_code] != 0) && !self[:ignore_exit_code])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: execute
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Marshall
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-21 00:00:00.000000000 Z
11
+ date: 2015-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,7 +66,7 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description: Class to execute system commands
69
+ description: Class wrapper for system commands
70
70
  email: KCCKSMarshall@gmail.com
71
71
  executables: []
72
72
  extensions: []
@@ -74,6 +74,7 @@ extra_rdoc_files: []
74
74
  files:
75
75
  - LICENSE
76
76
  - README.md
77
+ - lib/IOAdapter.rb
77
78
  - lib/cmd.rb
78
79
  homepage: http://rubygems.org/gems/execute
79
80
  licenses:
@@ -98,5 +99,5 @@ rubyforge_project:
98
99
  rubygems_version: 2.4.5
99
100
  signing_key:
100
101
  specification_version: 4
101
- summary: Class to execute system commands
102
+ summary: Class wrapper for system commands
102
103
  test_files: []