qbash 0.0.5 → 0.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 629198be7c8f09f07807f2fdc3f43b771df5d1b97ef33ae3a827c1d56a9ec98c
4
- data.tar.gz: f7b85be41ea296b819d13e3f4cb23f9d0bfb8137de8f05cd6f10737e535c68a7
3
+ metadata.gz: 413276b3af88e8343fc3a872a6c41141525cf5a9977e4a78bf4f51954f949ef9
4
+ data.tar.gz: 2dccf907789c415829801f0fc3c6caec76a19e98fb2f86009c56e2097778d7c3
5
5
  SHA512:
6
- metadata.gz: 026321cb7140203439059803f02a305980c5c44b988c9ebab82522eb8ede41d9d45dad8c6b1d312fcf7a9ae2192cabd2a67b7305e98d8836fd25d5276ceb6a48
7
- data.tar.gz: fd16b90f2af7f1a8ff116e0c1d95cc66a760e4c6c74fcc2763990d9ccf8b07517b6886277e81c8e18164db4c794ac7b619f5df98a20eed888b36fc0fbd300423
6
+ metadata.gz: 43bd520c7e65fe1a9124beea490c45fb416927b79399892de8c58ff7ddde1ea65ef9dcf1a5c1e759cec0b8b8037c7378a37559e211d36d6d4f632bb67db43e4d
7
+ data.tar.gz: bf9eea333fa3f58a275b23e5ee8d8ae899bc4ce28c686ab32e158265b49be6a4b945a81115286b1f0bd7801bb77d900d8e6c88efcde8f64db36dbdb4a9f58101
data/README.md CHANGED
@@ -32,6 +32,9 @@ stdout = qbash('echo "Hello, world!"', log: $stdout)
32
32
 
33
33
  If the command fails, an exception will be raised.
34
34
 
35
+ The function automatically merges `stderr` with `stdout`
36
+ (you can't change this).
37
+
35
38
  It's possible to provide the standard input and environment variables:
36
39
 
37
40
  ```ruby
data/lib/qbash.rb CHANGED
@@ -34,22 +34,28 @@ require 'tago'
34
34
  module Kernel
35
35
  # Execute a single bash command.
36
36
  #
37
+ # For example:
38
+ #
39
+ # year = qbash('date +%Y')
40
+ #
37
41
  # If exit code is not zero, an exception will be raised.
38
42
  #
39
43
  # To escape arguments, use +Shellwords.escape()+ method.
40
44
  #
45
+ # Stderr automatically merges with stdout.
46
+ #
41
47
  # Read this <a href="https://github.com/yegor256/qbash">README</a> file for more details.
42
48
  #
43
49
  # @param [String] cmd The command to run, for example +echo "Hello, world!"+
44
50
  # @param [String] stdin The +stdin+ to provide to the command
45
51
  # @param [Hash] env Hash of environment variables
46
52
  # @param [Loog|IO] log Logging facility with +.debug()+ method (or +$stdout+)
47
- # @param [Array] accept List of accepted exit codes (accepts all if the list is empty)
53
+ # @param [Array] accept List of accepted exit codes (accepts all if the list is +nil+)
48
54
  # @param [Boolean] both If set to TRUE, the function returns an array +(stdout, code)+
49
55
  # @param [Integer] timeout If it's set to non-NIL, the execution will fail after this number of seconds
50
56
  # @return [String] Everything that was printed to the +stdout+ by the command
51
57
  def qbash(cmd, stdin: '', env: {}, log: Loog::NULL, accept: [0], both: false, timeout: nil)
52
- cmd = cmd.join(' ') if cmd.is_a?(Array)
58
+ cmd = cmd.reject { |a| a.nil? || a.empty? }.join(' ') if cmd.is_a?(Array)
53
59
  if log.respond_to?(:debug)
54
60
  log.debug("+ #{cmd}")
55
61
  else
@@ -77,7 +83,7 @@ module Kernel
77
83
  buf += ln
78
84
  end
79
85
  e = thr.value.to_i
80
- if !accept.empty? && !accept.include?(e)
86
+ if !accept.nil? && !accept.include?(e)
81
87
  raise "The command '#{cmd}' failed with exit code ##{e} in #{start.ago}\n#{buf}"
82
88
  end
83
89
  end
data/qbash.gemspec CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
27
27
  s.required_ruby_version = '>=3.2'
28
28
  s.name = 'qbash'
29
- s.version = '0.0.5'
29
+ s.version = '0.0.7'
30
30
  s.license = 'MIT'
31
31
  s.summary = 'Quick Executor of a BASH Command'
32
32
  s.description =
data/test/test_qbash.rb CHANGED
@@ -48,6 +48,10 @@ class TestQbash < Minitest::Test
48
48
  qbash('echo Hello world!', log: $stdout)
49
49
  end
50
50
 
51
+ def test_skip_nil
52
+ assert_equal('Hi!', qbash(['printf', nil, 'Hi!', '']))
53
+ end
54
+
51
55
  def test_with_stdin
52
56
  Dir.mktmpdir do |home|
53
57
  f = File.join(home, 'a b c.txt')
@@ -75,13 +79,13 @@ class TestQbash < Minitest::Test
75
79
 
76
80
  def test_ignore_errors
77
81
  Dir.mktmpdir do |home|
78
- qbash("cat #{Shellwords.escape(File.join(home, 'b.txt'))}", accept: [])
82
+ qbash("cat #{Shellwords.escape(File.join(home, 'b.txt'))}", accept: nil)
79
83
  end
80
84
  end
81
85
 
82
86
  def test_with_both
83
87
  Dir.mktmpdir do |home|
84
- stdout, code = qbash("cat #{Shellwords.escape(File.join(home, 'foo.txt'))}", accept: [], both: true)
88
+ stdout, code = qbash("cat #{Shellwords.escape(File.join(home, 'foo.txt'))}", accept: nil, both: true)
85
89
  assert(code.positive?)
86
90
  assert(!stdout.empty?)
87
91
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qbash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-02 00:00:00.000000000 Z
11
+ date: 2024-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace