shell_tools 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -22,21 +22,20 @@ module ShellTools
22
22
  end
23
23
 
24
24
  def escape_word(str)
25
- if str.empty?
26
- "''"
27
- elsif %r{\A[0-9A-Za-z+,./:=@_-]+\z} =~ str
28
- str
29
- else
30
- result = ''
31
- str.scan(/('+)|[^']+/) {
32
- if $1
33
- result << %q{\'} * $1.length
34
- else
35
- result << "'#{$&}'"
36
- end
37
- }
38
- result
39
- end
25
+ # An empty argument will be skipped, so return empty quotes.
26
+ return "''" if str.empty?
27
+
28
+ str = str.dup
29
+
30
+ # Process as a single byte sequence because not all shell
31
+ # implementations are multibyte aware.
32
+ str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1")
33
+
34
+ # A LF cannot be escaped with a backslash because a backslash + LF
35
+ # combo is regarded as line continuation and simply ignored.
36
+ str.gsub!(/\n/, "'\n'")
37
+
38
+ return str
40
39
  end
41
40
 
42
41
  def capture
@@ -55,4 +54,22 @@ module ShellTools
55
54
  $stdout.reopen(old_out)
56
55
  $stderr.reopen(old_err)
57
56
  end
57
+
58
+ def capture_stdout
59
+ out, _ = capture { yield }
60
+ out
61
+ end
62
+
63
+ def capture_all
64
+ old_out, old_err = STDOUT.dup, STDERR.dup
65
+ stdall_read, stdall_write = IO.pipe
66
+ $stdout.reopen(stdall_write)
67
+ $stderr.reopen(stdall_write)
68
+ yield
69
+ stdall_write.close
70
+ stdall_write.rewind && stdall_write.read rescue ""
71
+ ensure
72
+ $stdout.reopen(old_out)
73
+ $stderr.reopen(old_err)
74
+ end
58
75
  end
@@ -1,3 +1,3 @@
1
1
  module ShellTools
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shell_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-06 00:00:00.000000000Z
12
+ date: 2012-07-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70259743014820 !ruby/object:Gem::Requirement
16
+ requirement: &70162956312120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70259743014820
24
+ version_requirements: *70162956312120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: minitest
27
- requirement: &70259743013800 !ruby/object:Gem::Requirement
27
+ requirement: &70162956311600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70259743013800
35
+ version_requirements: *70162956311600
36
36
  description: Some common shell utils.
37
37
  email:
38
38
  - joshbuddy@gmail.com
@@ -61,24 +61,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
61
61
  - - ! '>='
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
- segments:
65
- - 0
66
- hash: -759511355527622154
67
64
  required_rubygems_version: !ruby/object:Gem::Requirement
68
65
  none: false
69
66
  requirements:
70
67
  - - ! '>='
71
68
  - !ruby/object:Gem::Version
72
69
  version: '0'
73
- segments:
74
- - 0
75
- hash: -759511355527622154
76
70
  requirements: []
77
71
  rubyforge_project: shell_tools
78
- rubygems_version: 1.8.10
72
+ rubygems_version: 1.8.15
79
73
  signing_key:
80
74
  specification_version: 3
81
75
  summary: Some common shell utils
82
76
  test_files:
83
77
  - test/shell_utils_test.rb
84
78
  - test/test_helper.rb
79
+ has_rdoc: