libexec 0.2.0 → 0.2.2

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: a3d8b26a3b51d11a80ee0b158da31636268490b6b7141f9c0953934df47341f8
4
- data.tar.gz: 31ee9aeae742be7e66c6f8c020957214a22af6edccf9d6131200b2c5b9a34182
3
+ metadata.gz: 88d970febf501ba9372769e1d9e133f7b2ba925f746cd0f548678d380f9febf9
4
+ data.tar.gz: '0902086c184c1e813ce6dab467f59c5b4b6a90414b248707267c7c3bfd7e46ff'
5
5
  SHA512:
6
- metadata.gz: e15fe7d30af4bbc40b400b7aef5b51208d2478127bc4e23d1488ed80483be8a907711164b94a40655361286a6310d0f821614e469c1a3e2f536c56c9ca8cc290
7
- data.tar.gz: 85858c2cf6fc6be5e607245c332f79aea2e26444f807a9937fba72fbb40b52c94df0ae410d3d0da9222b5c6e855ebfbb15721af0ee1f121c0d1cd8d5a83a649d
6
+ metadata.gz: ea31a1801ef196301ac6035e75fffbf9be1695f64406d2fc4321d467cd9db27874cdc6b26044ab61c17906d7ca0bb8928e901aa6fecbe9075fd57343bb3923cf
7
+ data.tar.gz: 6be76f8b62e4003dd09a8d1ac06ad7070de2077637a51158480dda664e70eecc46f3f1c1da5dcd1757d33abb636be1134894e34c7b5486247feec7aab6129b35
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- libexec (0.2.0)
4
+ libexec (0.2.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -55,4 +55,4 @@ DEPENDENCIES
55
55
  rubocop (~> 1.21)
56
56
 
57
57
  BUNDLED WITH
58
- 2.3.26
58
+ 2.4.1
data/lib/libexec/exec.rb CHANGED
@@ -2,61 +2,71 @@
2
2
 
3
3
  module Libexec
4
4
  module Exec
5
- def run(cmd, *argv, env: {}, mode: "r", **opts)
6
- unless argv.empty?
7
- cmd = [cmd]
8
- argv.each do |arg|
9
- # https://docs.ruby-lang.org/en/master/Kernel.html#method-i-class
10
- if arg.instance_of?(Array)
11
- cmd.concat(arg)
12
- elsif arg.instance_of?(String)
13
- cmd.push(arg)
14
- end
15
- end
16
- end
5
+ # wrapper for Ruby IO.popen
6
+ # {https://docs.ruby-lang.org/en/master/IO.html#method-c-popen link} <br>
7
+ # cmd first grammar <br>
8
+ # conv argv by _ruby_style_cmd
9
+ #
10
+ # @return [nil]
11
+ def run(*argv, env: {}, mode: "r", **opts)
12
+ cmd = _ruby_style_cmd(argv)
17
13
 
18
- # https://docs.ruby-lang.org/en/master/IO.html#method-c-popen
19
14
  IO.popen(env, cmd, mode, opts) do |pipe|
20
15
  print pipe.gets until pipe.eof?
21
16
  end
22
17
  nil
23
18
  end
24
19
 
25
- def each_line(cmd, *argv, env: {}, mode: "r", **opts, &block)
26
- unless argv.empty?
27
- cmd = [cmd]
28
- argv.each do |arg|
29
- if arg.instance_of?(Array)
30
- cmd.concat(arg)
31
- elsif arg.instance_of?(String)
32
- cmd.push(arg)
33
- end
34
- end
35
- end
20
+ # Run code block in IO.popen <br>
21
+ # inspired from Ruby IO.each_line
22
+ # {https://docs.ruby-lang.org/en/master/IO.html#method-i-each_line link}
23
+ def each_line(*argv, env: {}, mode: "r", **opts, &block)
24
+ cmd = _ruby_style_cmd(argv)
36
25
 
37
- # https://docs.ruby-lang.org/en/master/IO.html#method-i-each_line
38
26
  IO.popen(env, cmd, mode, opts) do |pipe|
39
27
  pipe.each_line(&block)
40
28
  end
41
29
  end
42
30
 
43
- def by_ls_1(dir)
31
+ # wrapper for `ls -1` which will be often used
32
+ #
33
+ # @param [Array] argv
34
+ # @return [Array] line.chomp
35
+ def by_ls_1(*argv, **opts)
44
36
  arr = []
45
- each_line("ls -1 #{dir}") do |line|
37
+ argv.unshift(["ls", "-1"])
38
+ each_line(argv, opts: opts) do |line|
46
39
  arr.push line.chomp
47
40
  end
48
41
  arr
49
42
  end
50
43
 
51
- def each_ls_1(dir, &block)
52
- each_line("ls -1 #{dir}", &block)
44
+ # Operate each line result by yourself in `ls -1`
45
+ #
46
+ # @param [Array] argv
47
+ def each_ls_1(*argv, **opts, &block)
48
+ argv.unshift(["ls", "-1"])
49
+ each_line(argv, opts: opts, &block)
53
50
  end
54
51
 
55
- def code(cmd, *opt, **args)
56
- catch_error = !opt.empty? || args[:catch_error] || false
57
- code = opt[0] || args[:code] || 1
52
+ # wrapper for Process.spawn
53
+ # {https://docs.ruby-lang.org/en/master/Process.html#method-c-last_status link}
54
+ #
55
+ # @return [Integer]
56
+ def code(*argv, **opts)
57
+ opt_catch_error = opts[:catch_error]
58
+ opt_code = opts[:code]
59
+
60
+ *args, last_arg = argv
58
61
 
59
- # https://docs.ruby-lang.org/en/master/Process.html#method-c-last_status
62
+ is_integer = last_arg.instance_of?(Integer)
63
+ arg_catch_error = is_integer
64
+ arg_code = is_integer ? last_arg : false
65
+
66
+ catch_error = arg_catch_error|| opt_catch_error || false
67
+ code = arg_code || opt_code || 1
68
+
69
+ cmd = is_integer ? _js_style_cmd(args) : _js_style_cmd(argv)
60
70
  Process.spawn(cmd)
61
71
  Process.wait
62
72
 
@@ -71,23 +81,56 @@ module Libexec
71
81
  127
72
82
  end
73
83
 
74
- def output(cmd, *argv)
75
- unless argv.empty?
84
+ # wrapper for Kernel.`command`
85
+ # {https://docs.ruby-lang.org/en/master/Kernel.html#method-i-60 link}
86
+ #
87
+ # @note Only recommend to use when get single line output
88
+ # @return [String] output.chomp
89
+ def output(*argv)
90
+ cmd = _js_style_cmd(argv)
91
+
92
+ output = `#{cmd}`
93
+ output.chomp
94
+ end
95
+
96
+ private
97
+
98
+ # cmd must be unix command String <br>
99
+ # no " ", not Array <br>
100
+ # not support cmd with opt like `ls -1`
101
+ #
102
+ # @param [Array] argv
103
+ # @return [String | Array]
104
+ #
105
+ # @since 0.2.1
106
+ def _ruby_style_cmd(argv)
107
+ cmd, *args = argv
108
+
109
+ args.empty? ? cmd : argv.flatten
110
+ end
111
+
112
+ # in JS style, all arg connect with " " <br>
113
+ # so cmd like `ls -1` is OK
114
+ #
115
+ # @param [Array] argv
116
+ # @return [String | Array]
117
+ #
118
+ # @since 0.2.1
119
+ def _js_style_cmd(argv)
120
+ cmd, *args = argv
121
+
122
+ unless args.empty?
76
123
  arr = [cmd]
77
- argv.each do |arg|
124
+ args.each do |arg|
78
125
  if arg.instance_of?(Array)
79
- arr.push("'#{arg.join(" ")}'")
80
- elsif arg.instance_of?(String)
126
+ arr.push(%('#{arg.join(" ")}'))
127
+ else
81
128
  arr.push(arg)
82
129
  end
83
130
  end
84
-
85
131
  cmd = arr.join(" ")
86
132
  end
87
-
88
- # https://docs.ruby-lang.org/en/master/Kernel.html#method-i-60
89
- output = `#{cmd}`
90
- output.chomp
133
+ cmd
91
134
  end
92
135
  end
93
136
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Libexec
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.2"
5
5
  end
data/lib/libexec.rb CHANGED
@@ -4,8 +4,5 @@ require_relative "libexec/version"
4
4
  require_relative "libexec/exec"
5
5
 
6
6
  module Libexec
7
- class Error < StandardError; end
8
- # Your code goes here...
9
-
10
7
  extend Libexec::Exec
11
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libexec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - initdc
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-25 00:00:00.000000000 Z
11
+ date: 2022-12-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Wrapper for ruby exec shell command.
14
14
  email: