qbash 0.8.3 → 0.8.4

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.
Files changed (7) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +18 -14
  4. data/Rakefile +2 -2
  5. data/lib/qbash.rb +36 -19
  6. data/qbash.gemspec +7 -9
  7. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d0a50f302fd68190e87a678b3e9a01a67d98e8af5e5e9c1d067445e472bbb03d
4
- data.tar.gz: 98543273ed2dd47dfbe9a1104fcd16ccf687c6fb2a87930ff7d5c33a5d9c6904
3
+ metadata.gz: e16623b1c48dc17b9ce7589800fd59da736e73b0eb4faa620dcd51a6ebb88524
4
+ data.tar.gz: 26e03a152a2ceb3d47f44abf9b36853b70b0ddfde4bb00ee2bac300b96f8e10b
5
5
  SHA512:
6
- metadata.gz: '096508eb2c1263d425f34e730f9bb7ad4274df40ab41c3d00fc59ba016a2e611d39841d4b839c762c68a8153abb3e641720bc656044192b6b57d666afffd6ebc'
7
- data.tar.gz: 847e7c1bd76f6904e8bc145c28bb1c3471a2413c93e52256e8e99d42a24863fa33a218cf7b0ed665dea6992c5ca6ff7424863d634418fddd0de2d9593532678f
6
+ metadata.gz: e14d97c0a8ac90796f1747fa97d698c5e07dbf9626d65db1d8d10ef343d49d04051375df52f3babfc40b8adb1314f22e8fd80cb1e198a41adfc9a40d4e6e2602
7
+ data.tar.gz: e309cc6c08336d8dd368b3b550b07049091c8fefde0fde081b6af28793cb019b95666d9dff525f8d169a18889ecbd68d99fccf57451dfdf4c3994a72d6857de4
data/Gemfile CHANGED
@@ -14,6 +14,7 @@ gem 'rake', '~>13.2', require: false
14
14
  gem 'random-port', '~>0.0', require: false
15
15
  gem 'rdoc', '~>7.0', require: false
16
16
  gem 'rubocop', '~>1.73', require: false
17
+ gem 'rubocop-elegant', '~>0.5', require: false
17
18
  gem 'rubocop-minitest', '~>0.38', require: false
18
19
  gem 'rubocop-performance', '~>1.25', require: false
19
20
  gem 'rubocop-rake', '~>0.7', require: false
data/Gemfile.lock CHANGED
@@ -16,7 +16,7 @@ GEM
16
16
  ast (2.4.3)
17
17
  backtrace (0.4.1)
18
18
  base64 (0.3.0)
19
- bigdecimal (4.1.1)
19
+ bigdecimal (4.1.2)
20
20
  builder (3.3.0)
21
21
  crack (1.0.1)
22
22
  bigdecimal
@@ -40,7 +40,7 @@ GEM
40
40
  cucumber-tag-expressions (> 6, < 9)
41
41
  cucumber-cucumber-expressions (19.0.0)
42
42
  bigdecimal
43
- cucumber-gherkin (39.0.0)
43
+ cucumber-gherkin (39.1.0)
44
44
  cucumber-messages (>= 31, < 33)
45
45
  cucumber-html-formatter (23.1.0)
46
46
  cucumber-messages (> 23, < 33)
@@ -54,7 +54,7 @@ GEM
54
54
  loog (~> 0.6)
55
55
  tago (~> 0.1)
56
56
  ellipsized (0.3.0)
57
- erb (6.0.2)
57
+ erb (6.0.4)
58
58
  ffi (1.17.4-aarch64-linux-gnu)
59
59
  ffi (1.17.4-arm-linux-gnu)
60
60
  ffi (1.17.4-arm64-darwin)
@@ -63,7 +63,7 @@ GEM
63
63
  ffi (1.17.4-x86_64-darwin)
64
64
  ffi (1.17.4-x86_64-linux-gnu)
65
65
  hashdiff (1.2.1)
66
- json (2.19.3)
66
+ json (2.19.5)
67
67
  language_server-protocol (3.17.0.5)
68
68
  lint_roller (1.1.0)
69
69
  logger (1.7.0)
@@ -73,7 +73,7 @@ GEM
73
73
  memoist3 (1.0.0)
74
74
  mini_mime (1.1.5)
75
75
  mini_portile2 (2.8.9)
76
- minitest (6.0.5)
76
+ minitest (6.0.6)
77
77
  drb (~> 2.0)
78
78
  prism (~> 1.5)
79
79
  minitest-reporters (1.8.0)
@@ -83,22 +83,22 @@ GEM
83
83
  ruby-progressbar
84
84
  multi_test (1.1.0)
85
85
  net-ping (2.0.8)
86
- nokogiri (1.19.2)
86
+ nokogiri (1.19.3)
87
87
  mini_portile2 (~> 2.8.2)
88
88
  racc (~> 1.4)
89
- nokogiri (1.19.2-aarch64-linux-gnu)
89
+ nokogiri (1.19.3-aarch64-linux-gnu)
90
90
  racc (~> 1.4)
91
- nokogiri (1.19.2-arm-linux-gnu)
91
+ nokogiri (1.19.3-arm-linux-gnu)
92
92
  racc (~> 1.4)
93
- nokogiri (1.19.2-arm64-darwin)
93
+ nokogiri (1.19.3-arm64-darwin)
94
94
  racc (~> 1.4)
95
- nokogiri (1.19.2-x64-mingw-ucrt)
95
+ nokogiri (1.19.3-x64-mingw-ucrt)
96
96
  racc (~> 1.4)
97
- nokogiri (1.19.2-x86_64-darwin)
97
+ nokogiri (1.19.3-x86_64-darwin)
98
98
  racc (~> 1.4)
99
- nokogiri (1.19.2-x86_64-linux-gnu)
99
+ nokogiri (1.19.3-x86_64-linux-gnu)
100
100
  racc (~> 1.4)
101
- parallel (2.0.1)
101
+ parallel (2.1.0)
102
102
  parser (3.3.11.1)
103
103
  ast (~> 2.4.1)
104
104
  racc
@@ -118,7 +118,7 @@ GEM
118
118
  tsort
119
119
  regexp_parser (2.12.0)
120
120
  rexml (3.4.4)
121
- rubocop (1.86.1)
121
+ rubocop (1.86.2)
122
122
  json (~> 2.3)
123
123
  language_server-protocol (~> 3.17.0.2)
124
124
  lint_roller (~> 1.1.0)
@@ -132,6 +132,9 @@ GEM
132
132
  rubocop-ast (1.49.1)
133
133
  parser (>= 3.3.7.2)
134
134
  prism (~> 1.7)
135
+ rubocop-elegant (0.5.0)
136
+ lint_roller (~> 1.1)
137
+ rubocop (~> 1.75)
135
138
  rubocop-minitest (0.39.1)
136
139
  lint_roller (~> 1.1)
137
140
  rubocop (>= 1.75.0, < 2.0)
@@ -197,6 +200,7 @@ DEPENDENCIES
197
200
  random-port (~> 0.0)
198
201
  rdoc (~> 7.0)
199
202
  rubocop (~> 1.73)
203
+ rubocop-elegant (~> 0.5)
200
204
  rubocop-minitest (~> 0.38)
201
205
  rubocop-performance (~> 1.25)
202
206
  rubocop-rake (~> 0.7)
data/Rakefile CHANGED
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'rake'
4
+ require 'rake/clean'
3
5
  # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
6
  # SPDX-License-Identifier: MIT
5
7
 
6
8
  require 'rubygems'
7
- require 'rake'
8
- require 'rake/clean'
9
9
 
10
10
  def name
11
11
  @name ||= File.basename(Dir['*.gemspec'].first, '.*')
data/lib/qbash.rb CHANGED
@@ -8,6 +8,7 @@ require 'logger'
8
8
  require 'loog'
9
9
  require 'open3'
10
10
  require 'tago'
11
+ require 'time'
11
12
 
12
13
  # Execute one bash command.
13
14
  #
@@ -81,7 +82,7 @@ module Kernel
81
82
  # # Useful on Windows where /bin/bash is not available
82
83
  # qbash('dir C:\\', raw: true)
83
84
  #
84
- # For command with multiple arguments, you can use +Shellwords.escape()+ to
85
+ # For commands with multiple arguments, you can use +Shellwords.escape()+ to
85
86
  # properly escape each argument.
86
87
  #
87
88
  # == Stderr Handling
@@ -112,10 +113,14 @@ module Kernel
112
113
  # @param [String] chdir Directory to change to before running the command (or +nil+ to use current directory)
113
114
  # @param [Boolean] raw If +true+, run the command via the system shell instead of +/bin/bash+
114
115
  # @return [String] Everything that was printed to the +stdout+ by the command
115
- def qbash(*cmd, opts: [], stdin: '', env: {}, stdout: Loog::NULL, stderr: nil, accept: [0], both: false,
116
- level: Logger::DEBUG, chdir: nil, raw: false)
116
+ def qbash(
117
+ *cmd, opts: [], stdin: '', env: {},
118
+ stdout: Loog::NULL, stderr: nil,
119
+ accept: [0], both: false,
120
+ level: Logger::DEBUG, chdir: nil, raw: false
121
+ )
117
122
  stderr ||= stdout
118
- env.each { |k, v| raise "env[#{k}] is nil" if v.nil? }
123
+ env.each { |k, v| raise(ArgumentError, "env[#{k}] is nil") if v.nil? }
119
124
  env = env.transform_values(&:to_s)
120
125
  cmd = cmd.reject { |a| a.nil? || (a.is_a?(String) && a.empty?) }.join(' ')
121
126
  mtd =
@@ -129,17 +134,17 @@ module Kernel
129
134
  when Logger::ERROR
130
135
  :error
131
136
  else
132
- raise "Unknown log level #{level}"
137
+ raise(ArgumentError, "Unknown log level #{level}")
133
138
  end
134
139
  printer =
135
140
  lambda do |target, msg|
136
141
  msg = msg.encode('UTF-8', invalid: :replace, undef: :replace, replace: '?').gsub(/\n$/, '')
137
- if target.nil?
138
- # nothing to print
139
- elsif target.respond_to?(mtd)
140
- target.__send__(mtd, msg)
141
- else
142
- target.print("#{msg}\n")
142
+ unless target.nil?
143
+ if target.respond_to?(mtd)
144
+ target.__send__(mtd, msg)
145
+ else
146
+ target.print("#{msg}\n")
147
+ end
143
148
  end
144
149
  end
145
150
  buf = +''
@@ -152,13 +157,13 @@ module Kernel
152
157
  bash = ['/bin/bash'] + opts + ['-c', cmd]
153
158
  chdir.nil? ? [env, *bash] : [env, *bash, { chdir: }]
154
159
  end
155
- Open3.send(:popen3, *popen) do |sin, sout, serr, ctrl|
160
+ Open3.__send__(:popen3, *popen) do |sin, sout, serr, ctrl|
156
161
  pid = ctrl.pid
157
162
  printer[stderr, "+ #{cmd} /##{pid}"]
158
163
  consume =
159
164
  lambda do |stream, target, buffer|
160
165
  loop do
161
- sleep 0.001
166
+ sleep(0.001)
162
167
  break if stream.closed? || stream.eof?
163
168
  ln = stream.gets
164
169
  next if ln.nil?
@@ -176,7 +181,7 @@ module Kernel
176
181
  watch = Thread.new { consume.call(sout, stdout, buf) }
177
182
  watch.abort_on_exception = true
178
183
  begin
179
- yield pid
184
+ yield(pid)
180
185
  ensure
181
186
  sout.close
182
187
  serr&.close
@@ -192,8 +197,7 @@ module Kernel
192
197
  attempt += 1
193
198
  rescue Errno::ESRCH
194
199
  if attempt > 1
195
- printer[stderr,
196
- "Process ##{pid} reacted to SIGTERM, after #{attempt} attempts and #{since.ago}"]
200
+ printer[stderr, "Process ##{pid} reacted to SIGTERM, after #{attempt} attempts and #{since.ago}"]
197
201
  end
198
202
  break
199
203
  end
@@ -214,11 +218,24 @@ module Kernel
214
218
  end
215
219
  end
216
220
  status = ctrl.value
217
- raise "The command '#{cmd}' wait status is unavailable in #{start.ago}\n#{buf}" if status.nil?
221
+ if status.nil?
222
+ raise(
223
+ StandardError,
224
+ "The command '#{cmd}' wait status is unavailable in #{start.ago}\n#{buf}"
225
+ )
226
+ end
218
227
  e = status.exitstatus || (status.termsig ? 128 + status.termsig : nil)
219
228
  if !accept.nil? && !accept.include?(e)
220
- reason = status.signaled? ? "killed by signal #{status.termsig}" : "exit code ##{e}"
221
- raise "The command '#{cmd}' failed (#{reason}) in #{start.ago}\n#{buf}"
229
+ raise(
230
+ StandardError,
231
+ "The command '#{cmd}' failed (#{
232
+ if status.signaled?
233
+ "killed by signal #{status.termsig}"
234
+ else
235
+ "exit code ##{e}"
236
+ end
237
+ }) in #{start.ago}\n#{buf}"
238
+ )
222
239
  end
223
240
  end
224
241
  return [buf, e] if both
data/qbash.gemspec CHANGED
@@ -6,15 +6,13 @@
6
6
  require 'English'
7
7
 
8
8
  Gem::Specification.new do |s|
9
- s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
9
+ s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to?(:required_rubygems_version=)
10
10
  s.required_ruby_version = '>=3.2'
11
11
  s.name = 'qbash'
12
- s.version = '0.8.3'
12
+ s.version = '0.8.4'
13
13
  s.license = 'MIT'
14
14
  s.summary = 'Quick Executor of a BASH Command'
15
- s.description =
16
- 'With the help of Open3 executes bash command and conveniently ' \
17
- 'returns its output and exit code'
15
+ s.description = 'With the help of Open3 executes bash command and conveniently returns its output and exit code'
18
16
  s.authors = ['Yegor Bugayenko']
19
17
  s.email = 'yegor256@gmail.com'
20
18
  s.homepage = 'https://github.com/yegor256/qbash'
@@ -22,9 +20,9 @@ Gem::Specification.new do |s|
22
20
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
23
21
  s.rdoc_options = ['--charset=UTF-8']
24
22
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
25
- s.add_dependency 'backtrace', '>0'
26
- s.add_dependency 'elapsed', '>0'
27
- s.add_dependency 'loog', '>0'
28
- s.add_dependency 'tago', '>0'
23
+ s.add_dependency('backtrace', '>0')
24
+ s.add_dependency('elapsed', '>0')
25
+ s.add_dependency('loog', '>0')
26
+ s.add_dependency('tago', '>0')
29
27
  s.metadata['rubygems_mfa_required'] = 'true'
30
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qbash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko